筆者在前幾篇文章曾經提過, 如果使用好的硬體燒錄工具 就不需要在每個行為做熱插拔後再進行.
前置作業
0. 購買ESP LINK v1.0 (ESP8266 WIFI模組下載器)
[秘訣] 這款新的ESP Linker 可以同時做到燒錄/ 傳輸跟即時除錯的部分, 所以可以設計燒錄-設定-執行程式 (一氣呵成)
root@ctt:/opt/micropython/bin# cat t_macaddr
S1: 68:C6:3A:DA:FC:78
S2: 84:F3:EB:11:11:3A
S3: 68:C6:3A:DA:DE:42
[秘訣]
(1) 經過自訂義的標籤名稱加上各裝置的 MAC address 記錄下來後有利於未來做自動化使用
(2) 細節請參考筆者的Gist
4. 這樣燒錄的動作就可以做到一鍵完成
[實作] 一鍵部署之 ESP 裝置上的Micropython 設定 (以自動設定webrepl Server為例)
>>> pip3 search pexpect
pexpect (4.6.0) - Pexpect allows easy control of interactive
console applications
>>> pip3 install pexpect
[秘訣] Expect 腳本語言是常被應用在開發各種互動式Shell中的自動化, 筆者發現這個好用的腳本語言也存在python的第三方呼叫模組
>>> ipython3
In [1]: import pexpect
In [2]:
>>> esp = pexpect.spawn('picocom /dev/ttyUSB0 -b 115200')
def sendto(cmd):
while True:
if esp.waitnoecho() == true:
esp.sendline("{0}\r".format(cmd))
break
else:
time.sleep(1)
* Press Enter key once
sendto('\r')
* 搜尋>>> 是否存在
index = esp.expect('>>>')
if index == 0:
sendto("import webrepl_setup")
if esp.expect('[Empty]') == 0:
sendto("E")
if esp.expect('[New password (4-9 chars):]') == 0:
sendto("password")
sendto("password")
if esp.expect('[Woule you like to reboot now? (y/n)]') == 0:
sendto("y")
time.sleep(1)
if esp.waitnocho() == True:
if esp.exp('[>>>]') == 0:
esp.send('\x01') # Ctrl-A
esp.send('\x18') # Ctrl-X
[秘訣] pexpect檢查符合字串的部分有兩種寫法
[秘訣]
(1) pexpect 完整的說明請參考 pexpect man page
(2) 完整程式碼請參考: one-click