EPS32 MicroPython 开发入门

EPS32 MicroPython 开发入门

未经私信同意禁止转载!

前言

在很早的一篇文章里面就提到要写一篇文章来说明如何使用MicroPython对EPS32 进行开发,今天有空,就抓紧时间写出来,不然又会被抛在脑后。其实也是给自己写个小教程,怕自己以后忘了,再次开发的时候好多东西要从头再来。

一、相关资料

这是EPS32官网链接,ESP32的相关信息都被放在这里,技术手册编程指南都放在这里
espressif.com/zh-hans/p

这是使用MicroPython开发EPS32的相关文档。
docs.singtown.com/micro
这个链接下不仅有与ESP32硬件相关的MicroPyhon函数的使用(比如IO、定时器、ADC等等),还有MicroPyhon标准库的使用教程。可以说,所有文档里面这是最核心的,也是拿到开发板了解基本开发流程后最经常查看的文档。

Pyhon最重要的有各种库支持,否则很多事情都需要自己来做,用Python就不值得了。MicroPyhon有自己的特殊库。所有库的源码都可以在这个下载到。github.com/micropython/
建议将这个库的文件下载下来。以后遇到与标准库相关的问题,可以自己查看源码,分析问题。据我的初步经验,这个库里面不少子文件是有点小问题的,需要自己去研究。这是我觉得MicroPyhon还不够成熟的地方。
这个库文件还有另外的用处,就是直接找打你要的库文件直接上传到ESP32就完成了安装,另外一种途径是使用upip指令从网络安装库,这种方式经常装不上库,而且限定了EPS32已经连上网络。

二、搭建ESP32开发环境

用Pyhon开发硬件与C语言最大的不同的就是没有编译过程,Python是一种解释行的语言,使用过一句一句解读来执行,直到执行完成或者遇到错误才会停下来。所以MicroPyhon没有编译过程,是直接在EPS32上输入源码,或者上传某个写好的Pyhon 文件直接执行的。
在淘宝上二十几块钱就可以买一块ESP8266的开发板,而EPS32要贵些,但是都是对MicroPyhon支持的。
在拿到开发板后要先下载MicroPyhon的固件,这是一个已经编译好,直接下载到开发板上就可以运行的二进制文件。我把下载链接放在这里。
micropython.org/downloa

对于EPS32,这个bin文件应该使用使用github上这个项目编译出来的,
github.com/micropython/
在这个项目下你可以看到MicroPython里面与EPS32外设相关的各种函数(其实主要是machine 和network这两个库)的源码,如果遇到问题怀疑是库有问题,可以在这里追踪。到这里的话就需要你学会使用C语言来开发ESP32了。
这个项目的源文件需要在linux系统下编译才能得到你要的二进制文件。我曾经尝试过一个能将蓝牙功能加进进来的版本,但是没有成功。

有bin文件后,到乐鑫官网下载FLASH_DOWNLOAD_TOOLS,按照下面参数配置,重点是地址为0x1000,以及选中DoNotChgBin选项。(这张图来自网上,我懒得把自己板子的文件刷掉)

esp32-upgrade

想探索其他方式更新EPS32固件,参考下面链接:

micropython.org.cn/bbs/

固件下载完成后,安装CP210x串口驱动程序,直接使用串口终端工具,设定相应的串口,使用115200波特率就可以连接EPS32了。下面这个链接就是串口驱动的下载地址。silabs.com/products/dev
我的开发板正确连接后是这样的

esp32_loadin

你可以看到硬件配置和网络连接情况(我已经设置好了wifi,并且正确获取到了IP)。

看到最下面一行的“>>>”了吧,在这里你就可以直接输入MicroPyhon代码了。

其实经过下载固件和串口终端登录这简单的两步,开发环境就已经基本搭建完成了。

三、uPyCraft来开发

串口终端开发只能输入一行或者几行代码,调试起来极为不便,当你要开发一个比较大的程序,甚至是多文件开发时,这种方法几乎是无法使用的。我推荐的是使用uPycraft。我尝试过多种工具,这个是功能最强的,使用起来最方便的,建议不要浪费时间去尝试其他工具。

uPyCraft是一个可运行在Windows平台的MicroPython编程IDE,其界面简洁,操作便利,适合新手的学习和使用。uPyCraft IDE内置了许多基础操作库,为众多的MicroPython爱好者提供了一个简单实用的平台。

在这里你能下载到最新版本的软件和各种例程:
gitee.com/dfrobot/upycr
这里是这个工具的中文教程
dfrobot.gitbooks.io/upy

在uPyCraft里面,你可以直接使用串口连接开发板,即可完成开发。可以在里面编写代码然后下载到开发板上运行,并能够通过串口终端查看运行结果。

uPyCraft

区域1:文件列表区,在这里可以看到开发板上的文件和你的工程目录下来的问题件。
区域2:程序编写和查看区,你可以在这里查看已有代码, 并进行进一步编辑。
区域3:串口终端去,在这里可以直接输入你要执行的语句,或者在这里查看程序返回的结果
区域4:工具栏,可以在这里选择连接开发板,下载文件
区域5:快捷操作区,包含打开和新建文件,运行程序,断开与板子连接等。

这个工具使用很简单,相信你经过简单摸索就能学会。

四、使用WebREPL进行开发

WebREPL 即WebSockets的REPL, 可通过网络浏览器访问ESP32完成交互,和串口的交互访问类似,但是可以通过界面来上传和下载文件,比串口要稍微方便一点。但是感觉有些延时,并且上传文件的操作非常不人性化。我并不推荐这种开发方式,但是在无法使用串口进行开发时,不失为一种不错的替代方式。

这种开发需要你做一些准备工作:
1,在ESP32里面建立一个webrepl.py文件,里面写入下面这句话:

PASS = '1234'

其实就是一个密码,我用的是1234,你可以换成你要的密码。
2,在ESP32里面建立一个wifi.py文件,写上wifi 连接的代码。我是这样写的

import network
import usocket as socket

def connect():
    import json
    import network

    # 尝试读取配置文件wifi_confi.json,这里我们以json的方式来存储WIFI配置
    # wifi_config.json在根目录下  
    # 若不是初次运行,则将文件中的内容读取并加载到字典变量 config
    try:
        with open('wifi_config.json','r') as f:
            config = json.loads(f.read())
    # 若初次运行,则将进入excpet,执行配置文件的创建        
    except:
        essid = input('wifi name:') # 输入essid
        password = input('wifi passwrod:') # 输入password
        config = dict(essid=essid, password=password) # 创建字典

        with open('wifi_config.json','w') as f:
            f.write(json.dumps(config)) # 将字典序列化为json字符串,存入wifi_config.json
         
    #以下为正常的WIFI连接流程        
    wifi = network.WLAN(network.STA_IF)  
    if not wifi.isconnected(): 
        print('connecting to network...')
        wifi.active(True) 
        wifi.connect(config['essid'], config['password']) 
        import time
        time.sleep(5) #一般睡个5-10秒,应该绰绰有余      

        if not wifi.isconnected():
            wifi.active(False) #关掉连接,免得repl死循环输出
            print('wifi connection error, please reconnect')
            import os
            # 连续输错essid和password会导致wifi_config.json不存在
            try:
                os.remove('wifi_config.json') # 删除配置文件
            except:
                pass
            connect() # 重新连接
        else:
            print('network config:', wifi.ifconfig())

这个脚本需要你在第一次连接的时候手动输入wifi名称和密码,正确连接后就存到了一个wifi_config.json的文件里面,下一次开机就直接读取这里面的密码进行连接了。

3,在boot.py里面添加以下代码:

# This file is executed on every boot (including wake-boot from deepsleep)

import webrepl
import wifi
webrepl.start()
wifi.connect()

这里import了两个库一个是webrepl,一个是wifi,其实就是前面两步编写的文件。在boot.py里面执行表示每次开机后就自动连接wifi并启用webrepl服务。

准备好后,先确保你的EPS32 正确连接上无线网络,然后在浏览器上输入micropython.org/webrepl。在第一行的地址里面填上你的开发的IP地址,这个可以通过串口看到。选择连接之后输入webrepl的密码就行了,这个密码就是第一步里面的写入的。我的界面是这样的:

WebREPL

在uPyCraft和webrepl之外,我还有一种开发方式。你可以在github上搜索一个uPyloader的工具。这个工具能选择用串口和网络进行开发,但总体感觉不如uPyCraft 好用,后来被我弃用。

后记

终于写完了。本以为没什么可写的,没想到写了这么多,依然觉得有些细节写的不够清楚。

我相信这篇文章是我见过的所有有关于EPS32 Micropython开发入门写的最详细的文章了。上面很多东西都是我自己摸索出来的,网上有些零零散散的东西,相信都不如我这么全面完整。大家做的过程中有什么问题给我留言。

这里放上我用ESP32和MicroPyhon做的一些东西,大家可以来作为深入学习的参考。关注我的知乎专栏可以看到更多的文章。

下面是这些文章的简书链接连接,现在我的文章都在简书上更新的,可能有些更新不会及时同步到知乎。
《使用Python来做物联网,就是这么easy!》
jianshu.com/p/f6b1936d6
《使用ESP32驱动电子墨水屏》
jianshu.com/p/776693227
《在墨水屏上显示任意汉字》
jianshu.com/p/994c8da32
《语音识别模块LD3320的MicroPython驱动》
jianshu.com/p/3f20433fd
《如何吹灭LED》
jianshu.com/p/fc583c733


欢迎关注我的专栏《电子工程师有多无聊》,你可以看到更多关于使用Python进行硬件编程的文章。如果你有兴趣,也欢迎投稿。

编辑于 2019-06-27

文章被以下专栏收录