如果我们想开发硬件设备的时候,非专业硬件工程师的我们往往会使用开发板,而开发板中,比较流行的又不得不提 Arduino,但是比如说我们想做一些 IoT 的原型设备,或者一切其他小项目小玩具,使用带有 Wifi 功能的 esp8266 和带有 Wifi 和 蓝牙的 ESP32 更为合适。尽管这两款开发板都支持 Arduino,并且在 Arduino 这个平台上有很多现成的库可以作为参考。
不过如果想进行快速的开发测试,在这两款开发板上使用 MicroPython 也是一个很好的选择。
MicroPython 大致的操作步骤就是先把固件刷到开发板上,然后可以通过串口连接进行交互式编程(REPL)或者通过上传main.py
到开发板上,开发板就会自己运行你写好的代码。
然而事实上,整一个操作体验并不是在官方文档介绍上的代码复制粘贴即可,而是存在各种坑。以下将罗列一下我所遇到的坑,可以帮大家避免,当然,如果你想加深理解,也可以往坑里跳,然后深入研究学习一下。
pyboard
,很多教程都介绍使用 pyboard.py 这个库将写好的 main.py
上传到开发板上,但是我在 Window 系统下,尝试了各种配置,包括修改这个 python 脚本,修改系统环境变量,但都无法完全正常使用(可以查看到开发板,但不能上传),我不太清楚是我的系统问题,还是这个库有问题。所以如果你也是按网上教程使用 pyboard.py
库,如果成功,继续用即可,如果不成功,建议像我一样,使用 adafruit-ampy
,能剩下不少折腾的时间。
终端连接的问题。首先,我习惯了 Linux 和 macOS 下使用命令行工具,所以这个 MicroPython 既然有提供 REPL,那么如果有命令行工具在终端下连接然后继续进行命令行交互即可。然而,在 Window 下没有找到简单好用的命令行工具。然后网上有介绍 SecureCRT
的,我在他们的官网上注册,然后等邮件验证再拿到下载地址,下载完才发现并不是免费软件,只可以使用一段时间。然后我又看到介绍一个交 Tera Term
的软件,这个软件虽然免费,但是十分简陋,而且经常会乱码。最后找到一个 PuTTY
的工具,这个工具算是比较正常且免费的,所以这里如果没有习惯串口工具的朋友,不妨就用这个。
REPL 与 main.py
冲突,REPL将无法使用。这一点我似乎没有看到网上有说的。这个问题就是我们如果上传了 main.py 到开发板上,我们再用终端工具进行串口连接,我们是不能使用 REPL 的,表现就是终端没有任何反应,就像卡住一样。这时如果像使用 REPL,将开发板上的 main.py 删除或者下载到本地再删除开发板上的 main.py 即可。
自动补全功能。在 Arduino 那个那么简陋的 IDE 都有自动补全功能,在这个 MicroPython 上并没有那么方便。因为我们在本地使用 VSCode 之类的工具写 python ,然后上传到开发板上,但是我们的本地是没有类似 machine
之类的库的。如果需要有代码提示,需要在本地有对应的库。这里可以安装 micropy-cli
,运行这个工具可以为我们完拥有代码提示。这里有一个坑,就是在 micropy init
的时候,需要同时选 VSCode Settings for Autocompletion/Intellisense
和 Pylint Micropython Settings
,如果不选后面的那个选项,你会出现 import 错误的提示。
不要尝试 PyMakr
和 Micropython IDE
。Arduino 可以在 VSCode 里面有 PlatfromIO 这样的插件,非常好用。很自然的想法,也想同样的用在 MicroPython 上,然后很多教程会让你使用上面这两个工具,我尝试了,这两个工具 PyMakr 无法连接开发板,无论怎么配置都不行,而那个 IDE,经常卡死和无法连接端口。我们使用 MicroPython无非就像快和简单,所以直接使用 ampy put
上传文件就好了。
在刷固件之前,我们需要先准备好固件,这个固件可以在 MicroPython 网站上找到,这里提供了很多开发板的固件,我们选择我们所使用的 ESP8266 即可。
MicroPython - Python for microcontrollers
这里我们下载 esp8266-20210418-v1.15.bin
这个固件即可,当然也可以根据自己的需要自行选择。
我们需要一个交 esptool
的工具来帮助我们刷固件,可以使用 pip
来安装。
pip install esptool
安装完成后,我们把开发板接入电脑,通过 read_mac
命令来获取开发板的信息以及串口的位置。
# 这里如果是 linux 或者 macOS, 使用 esptool.py
esptool.exe read_mac
>
esptool.py v3.0
Found 2 serial ports
Serial port COM3
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 40:f5:20:35:**:68
Uploading stub...
Running stub...
Stub running...
MAC: 40:f5:20:35:**:68
Hard resetting via RTS pin...
可以看到已经获取到开发板的信息,这里可以看到开发板的串口在 COM3
。
接下来就可以开始刷固件了。
# 清除原来的固件
esptool -p COM3 erase_flash
>
esptool.py v3.0
Serial port COM3
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 40:f5:20:35:**:68
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 8.7s
Hard resetting via RTS pin...
# 写入新的固件
esptool --port COM3 --baud 460800 write_flash --flash_size=detect 0 esp8266-20210418-v1.15.bin
>
esptool.py v3.0
Serial port COM3
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 40:f5:20:35:**:68
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0040
Compressed 632632 bytes to 415633...
Wrote 632632 bytes (415633 compressed) at 0x00000000 in 10.1 seconds (effective 502.7 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
这样,我们的 MicroPython 已经刷好固件了。
如上图,打开 PuTTY,新建一个连接,这里我们选择 Serial 串口连接,端口选择 COM3 (具体根据自己的情况设置),然后这里的波特率需要修改为 115200,完成后可以在下面 Saved Sessions 填如一个名字,如 esp8266,然后点击一下 Save ,这样下次就可以直接连接不需要重新输入端口信息了。
然后我们点击 Open,就可以进入 REPL 模式。
MicroPython v1.15 on 2021-04-18; ESP module with ESP8266
Type "help()" for more information.
>>> print('Hello Speculatecat!')
Hello Speculatecat!
我们可以在这里进行交互式编程,类似 ipython 的模式。
接下来我们改用 VSCode 来进行后续的编程。首先先来配置自动完成功能,这里需要先安装一个 micropy-cli
的工具:
pip install micropy-cli
接下来打开 VSCode,新建一个项目目录,然后 `Ctrl+`` 打开终端。然后确认当前目录为项目根目录:
# 查找开发板支持
micropy stubs search esp8266
>
MicroPy Searching Stub Repositories...
MicroPy Results for esp8266:
MicroPy esp8266-micropython-1.10.0
MicroPy esp8266-micropython-1.11.0 (Installed)
MicroPy esp8266-micropython-1.9.3
MicroPy esp8266-micropython-1.9.4
MicroPy esp8266-pycopy-1.11.0
MicroPy esp8266-pycopy-2.11.0
MicroPy esp8266-pycopy-2.11.0.1
# 安装开发板支持
micropy stubs add esp8266-micropython-1.11.0
>
MicroPy Loading Project
MicroPy esp8266-micropython-1.11.0 is already installed!
MicroPy ✔ Ready!
MicroPy Adding esp8266-micropython-1.11.0 to stubs
MicroPy esp8266-micropython-1.11.0 is already installed!
MicroPy Adding esp8266-micropython-1.11.0 to esp8266Demo
MicroPy Loading project...
MicroPy Updating Project Info...
MicroPy esp8266-micropython-1.11.0 is already installed!
MicroPy Project Stubs: esp8266-micropython-1.11.0
MicroPy ✔ Project Updated!
# 自动初始化项目
micropy.exe init
>
Project Name esp8266Demo
? Choose any Templates to Generate (Use arrow keys to move, <space> to select, <a> to toggle, <i> to invert)
● VSCode Settings for Autocompletion/Intellisense
○ Pymakr Configuration
» ● Pylint MicroPython Settings
○ Git Ignore Template
○ main.py & boot.py files
? Which stubs would you like to use? (Use arrow keys to move, <space> to select, <a> to toggle, <i> to invert)
» ● esp8266-micropython-1.11.0
这里需要注意的是,项目初始化的时候,一定要选择 Pylint MicroPython Settings
,否则将会有 import 错误报出。
接下来就可以在 VSCode 中编写程序了。我们来完成一个最简单的点亮开发板上自带的LED灯闪烁功能。这里注意的是,我的开发板 Pin-2 就是控制那个自带 LED 的,但并不是所有开发板都一样的,在开始前可以先查看一下硬件手册。
import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
while True:
time.sleep(1)
led.on()
time.sleep(3)
led.off()
我们可以使用 ampy
来上传我们写好的代码。首先来安装:
pip install adafruit-ampy
安装完成后,可以使用 ampy --help
来查看可用命令。下面我们先来查看一下当前开发板上的文件:
ampy.exe -p COM3 ls
>
/boot.py
这里可以看到我们的开发板上只有一个文件。接下来将我们刚刚写好的 main.py
上传到开发板上
ampy.exe -p COM3 put .\main.py
ampy.exe -p COM3 ls
>
/boot.py
/main.py
这样,我们就把代码上传到开发板上了。
接下来我们需要重启一下开发板,按一下开发板上的 RESET 按钮,我们就可以看到开发板上的LED灯出现亮1秒熄3秒的不断循环了。
硬件开发比单纯的代码开发更有难度,有时一样的步骤,却又不能跑通。本文开篇介绍了遇到的一些坑,以及手把手的演示如何给 esp8266 配置 MicroPython 环境、VSCode 自动补全配置以及如何上传代码。希望本文对你有用。如果你觉得文章对你用,记得关注收藏。你的关注和收藏是继续更新的动力哦。