[ MicroPython ] 在 ESP8266上使用 MicroPyhton

前陣子工作繁忙加上 Arduino玩得有點挫折,好不容易稍微有一點時間,嘗試一下自己比較熟悉的語言。

首先安裝燒錄的套件 Esptool
pip install esptool
接著清除 ESP8266中的 flash
esptool.py --port /dev/tty.usbserial-1420 erase_flash
/dev/tty.usbserial-1420是我連接中的 USB設備,不知道怎麼查看的朋友可以參考之前分享的 "檢查 Serial設備"。
接著下載 MicroPython,我下載的是 esp8266-20180511-v1.9.4.bin。

接著對 ESP8266進行燒錄。
$ esptool.py --port /dev/tty.usbserial-1420 --baud 460800 write_flash --flash_size=detect 0 esp8266-20180511-v1.9.4.bin
$
$ esptool.py --port /dev/tty.usbserial-1420 --baud 460800 write_flash --flash_size=detect 0 esp8266-20180511-v1.9.4.bin -fm dio
第二行燒錄指令中添加了 "-fm dio" ,因為我的 ESP8266開發版是 NodeMCU的某種變體,需要加入額外指令才能燒錄成功。

燒錄成功後 MacOS和 Ubuntu的用戶可以透過 screen指令透過 serial對設備進行操作。
$ screen /dev/tty.usbserial-1420 115200
Windows的用戶則可以透過 PuTTY對 COM port來操作。

順便就利用 MicroPython幫 ESP8266連上網吧。
>>> import network
>>> sta_if = network.WLAN(network.STA_IF)
>>> sta_if.active(True)                     # 啟動 WiFi設備
#6 ets_task(4020f474, 28, 3fffa018, 10)
>>> sta_if.connect('<SSID>', '<PASSWORD>')  # WiFi帳號與密碼
>>> sta_if.isconnected()                    # 確認連線狀態
True
>>> sta_if.ifconfig()                       # 取得 IP位址
('10.1.26.22', '255.255.255.0', '10.1.26.1', '192.168.1.1')
若要讓 ESP8266自動執行文件,就需要將檔案放在 ESP8266中。
因此需要安裝上傳代碼的套件 ampy
pip install adafruit-ampy
寫一個連線的程式命名 connWiFi.py。
import network
import time
from machine import Pin

def connWiFi(ssid, password):
    sta_if = network.WLAN(network.STA_IF)
    sta_if.active(True)
    while not sta_if.isconnected():
        sta_if.connect(ssid, password)
        time.sleep(5)
    ip = sta_if.ifconfig()[0]
    return ip, True

def blinkLed():
    Pin(2, Pin.OUT)
    time.sleep(0.2)
    Pin(2, Pin.IN)
    time.sleep(0.2)

if __name__ == '__main__':
    ip, is_conn = connWiFi('<SSID>', '<PASSWORD>')
    while is_conn:
        print('IP address: '+ip)
        blinkLed()
連線成功後,ESP8266上的 LED就會閃爍。
若透過 serial連線後,Terminal上就會顯示 IP位置。

最後透過 ampy將代碼上傳。
ampy -p /dev/tty.usbserial-1420 put connWiFi.py main.py
利用 ampy的 "put"指令將檔案上傳。
connWiFi.py是電腦中的文件,main.py是上傳後文件的檔名。main.py才是MicroPython會主動執行的代碼。

也可以利用 "ls"指令,來查看目前 ESP8266內的文件。
$ ampy -p /dev/tty.usbserial-1420 ls
/boot.py
/main.py
Ampy還有很多功能,可以透過下列指令查詢。
$ ampy --help

文章參考 MicroPython Docs.

留言