ESP32+MicroPython 物联网单片机的开发入门

Uncategorized

ESP32,听朋友 @Hank 说,是一个很有意思的物联网芯片模块,带有Wi-Fi和蓝牙。迫不及待的放下stm32,入手一块玩玩。

作为软件工程师,对硬件知识是很匮乏的,之前做stm32也仅能用官方IDE编写代码【zetachow晓代码:一个应用软件程序员的单片机STM32零基础入门 】于是Google了一些资料了解到ESP32还可以使用Arduino和MicroPython这两种简化的方式开发。

Arduino框架下,支持的芯片比MicroPython更多,而且据说运行效果更稳定高效。

但是作为软件工程师,玩芯片的主要目的就是玩以及做一些有趣的小实验,若是真到需要商用时,再考虑更换更有效的开发模式,于是我选择了MicroPython。

关于搭建环境,网上有一些教程会用到Thonny、uPycraft等开发工具,操作简单高效。我比较喜欢用原始一点的手段,不依赖可视化工具的情况,通过命令行一步一步搭建。

进入正题,完整流程如下:

  1. 购买一块ESP32的板子,价格20多左右
  2. 下载对应的MicroPython固件
  3. 向ESP32刷入固件
  4. 连接串口进入交互式编程界面编程
  5. 通过文件写入方式编程

1. 购买ESP32的板子

各大线上购物平台都应该有,最简单的板子大概在20元左右

大概这样。

2. 下载MicroPython固件

MicroPython – Python for microcontrollers

找到 Generic ESP32 module 通用ESP32模组

然后下载 Firmware with ESP-IDF v3.x 版本。

说明一下,3.x版本比4.x版本多支持了蓝牙功能。

3. 向ESP32刷入刚下载好的固件

3.1 刷固件需要使用esptool.py

pip install esptool

3.2 安装完成后,用usb线将esp32模组和电脑连接,然后运行擦除flash命令

esptool.py --port /dev/cu.usbserial-0001 erase_flash

/dev/cu.usbserial-0001 是我的电脑上esp32串口名称,这里换成你自己的。

3.3 刷固件

esptool.py --chip esp32 --port /dev/cu.usbserial-0001 write_flash -z 0x1000 esp32-idf3-20200902-v1.13.bin

这条命令中,--port /dev/cu.usbserial-0001 换成你自己的,-z 0x1000 不要改动, esp32-idf3-20200902-v1.13.bin 是你下载的固件包路径和名称。

另外,如果烧写过程报错,最好添加上波特参数 --baud 115200 。

4. 连接串口进入交互式编程界面编程

刷固件成功后,就可以进入交互式界面进行编程了。

我使用的MacBook,安装了Screen,所以在不安装额外工具的情况下,可以直接使用screen进入交互编程界面

screen /dev/cu.usbserial-0001 115200  

115200 参数一定要指定,不然你可能看到一对乱码

5. 通过文件写入方式编程

通过交互式(REPL)编写代码,基本上就能满足简单的实验目的了。但是如果要写复杂点的功能,还是需要编写并运行py脚本

在不使用Thonny之类的工具的情况,可以安装ampy上传/下载python文件

pip install adafruit-ampy

MicroPython会分配一个区域保存脚本文件。

这个区域中默认有一个boot.py,这是模组启动的脚本文件,一般我们不用管他

MicroPython启动时,会先执行boot.py,紧接着执行main.py,但是默认情况下没有main.py这个文件,这就是我们可以用来写自己脚本的脚本文件。

一般情况下,执行命令

ampy --port /dev/cu.usbserial-0001 --baud 115200 ls

可以看到文件列表

/boot.py

但是,很有可能会提示错误

ampy.pyboard.PyboardError: could not enter raw repl

查找了很多资料后,发现当出现这个错误时,需要增加delay参数,并且设置在1秒以上,1秒还报错就2秒。

ampy -d 1 --port /dev/cu.usbserial-0001 --baud 115200 ls

ampy提供了以下通过串口进行文件操作的命令

  get    Retrieve a file from the board.
  ls     List contents of a directory on the board.
  mkdir  Create a directory on the board.
  put    Put a file or folder and its contents on the board.
  reset  Perform soft reset/reboot of the board.
  rm     Remove a file from the board.
  rmdir  Forcefully remove a folder and all its children from the board.
  run    Run a script and print its output.

编写好main.py和其他依赖文件,用ampy上传就行

例如,在main.py写入代码

print('helloworld')

然后上传

然后用screen查看交互式界面

可以看到,main.py执行并打印出了文本。

最后

到目前为止,就搭建好啦。很简单,当然,如果用Thonny这个IDE工具可以可视化的完成刷固件和上传脚本,还可以选择MicroPython的开发库,会更加简便。关于Thonny搭建开发ESP32的MicroPython开发环境,以下这边文件有很详细的说明。

使用MicroPython开发ESP32(01):快速入门_Naisu的各种笔记-CSDN博客

相关资料连接

MicroPython官网教程:Quick reference for the ESP32

ESP32最新入门教程:ESP-IDF 编程指南 latest 文档

ampy Github主页:https://github.com/scientifichackers/ampy

Thonny官网:Thonny, Python IDE for beginners

发表评论