MicroPython 是对 Python 3 语言的一种精简的实现,主要是为了在微控制器这种硬件资源受限的环境中可以高效地运行,因此做了很多针对性的优化。
它类似于一个小型的 Python 操作系统,可以通过串口与内置的 Python 解释器直接交互,也可以上传程序文件在开机上电后自动运行。
MicroPython 支持多种开发板,包括价格很实惠的基于 ESP8266 芯片的 NodeMCU。
一、刷入固件
我这里使用的开发板是从网上购买的 NodeMCU ,出厂时预先刷好了基于 Lua 语言编程的固件。
为了使用 MicroPython ,需要先对该开发板重新刷写固件。
1. 准备工作
首先进入 MicroPython 官方的下载页面,下载最新版的针对 ESP8266 硬件的固件包。
我这里使用的是 esp8266-20180511-v1.9.4.bin 。
刷写软件可以使用支持多种操作系统的命令行工具 esptool。对于已经装好 Python 环境的电脑,直接使用 pip 命令安装即可:pip install esptool
2. 刷入固件
首先将 NodeMCU 开发板连接至电脑,Mac 系统可以使用 ls /dev/tty.usbserial*
命令查看当前系统已经检测到的 USB 串口:1
2$ ls /dev/tty.usbserial*
/dev/tty.usbserial-14110
使用 esptool.py -p <SerialPort> flash_id
命令确认该串口是否能成功检测到 ESP8266 设备:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$ esptool.py -p /dev/tty.usbserial-14110 flash_id
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
使用 esptool.py -p <SerialPort> erase_flash
命令对开发板进行擦除操作(以防万一):1
2
3
4
5
6
7
8
9
10
11
12
13
14$ esptool.py -p /dev/tty.usbserial-14110 erase_flash
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.5s
Hard resetting via RTS pin...
擦除完成后即可使用 esptool
工具的 write_flash
命令将 MicroPython 固件刷入开发板。
(完整命令为:esptool.py -p <SerialPort> --baud 460800 write_flash --flash_size=detect -fm dio 0 <FirmwareFile>
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22$ esptool.py -p /dev/tty.usbserial-14110 --baud 460800 write_flash --flash_size=detect -fm dio 0 ~/Downloads/esp8266-20180511-v1.9.4.bin
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0240
Compressed 604872 bytes to 394893...
Wrote 604872 bytes (394893 compressed) at 0x00000000 in 9.9 seconds (effective 490.0 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
二、固件测试
刷写固件的操作完成后,可以使用 Mac 系统自带的串口调试工具 cu
连接 USB 串口,对刚刷好的开发版进行测试:sudo cu -l <SerialPort> -s <BaudRateSpeed>
效果如下:1
2$ sudo cu -l /dev/tty.usbserial-14110 -s 115200
Connected.
终端窗口提示 Connected 之后,按下 NodeMCU 板子上的 RST (Reset) 按钮。
如固件刷写成功,则终端在输出部分乱码后会立即进入 Python 解释器界面:1
2
3MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266
Type "help()" for more information.
>>>
在解释器界面下,输入 help()
命令获取基本的帮助信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266
Type "help()" for more information.
>>> help()
Welcome to MicroPython!
For online docs please visit http://docs.micropython.org/en/latest/esp8266/ .
For diagnostic information to include in bug reports execute 'import port_diag'.
Basic WiFi configuration:
import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan() # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected() # Check for successful connection
# Change name/password of ESP8266's AP:
ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="<AP_NAME>", authmode=network.AUTH_WPA_WPA2_PSK, password="<password>")
Control commands:
CTRL-A -- on a blank line, enter raw REPL mode
CTRL-B -- on a blank line, enter normal REPL mode
CTRL-C -- interrupt a running program
CTRL-D -- on a blank line, do a soft reset of the board
CTRL-E -- on a blank line, enter paste mode
For further help on a specific object, type help(obj)
>>>
更多的交互命令和详细的指导手册可以参考官方文档
使用如下的命令,能够让 GPIO2 上连接的 LED(即 ESP8266 模块内置的蓝色 LED)以 1s 的频率闪烁:1
2
3
4
5
6
7
8
9
10
11>>> from machine import Pin
>>> import time
>>> p=Pin(2,Pin.OUT)
>>> while True:
... p.on()
... time.sleep(1)
... p.off()
... time.sleep(1)
...
...
...
三、配置 Atom 编程环境
当前可以使用多种软件作为简单的 IDE 对 MicroPython 开发板进行编程。主要是提供连接串口的终端,可以交互地执行 Python 命令,以及程序文件的上传和下载。
我个人比较喜欢 Atom 编辑器搭配上 pymakr-atom 插件。
Atom 的配置较简单,主要步骤如下:
- 从 Atom 官网下载对应系统版本的安装程序并安装
- 通过 Atom 内置的插件管理器搜索安装 pymakr 插件,安装完成后重启编辑器
- 编辑器重启后底部自动出现 pymakr 的终端窗口,点击终端右上角设置 - 全局设置,找到设备地址并改为开发板连接的端口号
- 直接点击终端顶部的连接按钮即可完成串口连接
此时的 Atom 编辑器,可以通过底部的终端窗口直接输入 Python 命令。
也可以在编辑器中新建项目目录,并创建 main.py
源文件。编辑好 Python 代码后,点击执行按钮即可直接运行,或者点击上传按钮将代码文件上传至开发板。