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 串口:
$ ls /dev/tty.usbserial*
/dev/tty.usbserial-14110
使用 esptool.py -p <SerialPort> flash_id
命令確認該串口是否能成功檢測到 ESP8266 設備:
$ 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
命令對開發板進行擦除操作(以防萬一):
$ 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>
)
$ 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>
效果如下:
$ sudo cu -l /dev/tty.usbserial-14110 -s 115200
Connected.
終端窗口提示 Connected 之後,按下 NodeMCU 板子上的 RST (Reset) 按鈕。
如固件刷寫成功,則終端在輸出部分亂碼後會立即進入 Python 解釋器界面:
MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266
Type "help()" for more information.
>>>
在解釋器界面下,輸入 help()
命令獲取基本的幫助信息:
MicroPython 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 的頻率閃爍:
>>> 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 代碼後,點擊執行按鈕即可直接運行,或者點擊上傳按鈕將代碼文件上傳至開發板。