本篇新增軟件
WebREPL在線版http:///webrepl/
下載地址:https://codeload.github.com/micropython/webrepl/zip/master
在MicroPython on ESP8266的開發(fā)過程中,做的最多的事情就是上傳文件,MicroPython File Uploader 雖然很好用,但是有兩個缺點:
- 必須將ESP8266開發(fā)板與電腦連接
- 如果開發(fā)板中運行的程序未結束,例如定義了死循環(huán)用來監(jiān)聽信號時,文件的上傳有可能會失敗。
上傳失敗自不必說,而必須與電腦連接就制約了我們開發(fā)的靈活性,想像一下:我們用8266做了一個通過手機控制的接線板控制器,封裝后安裝進接線板中,然后有一天想要給它增加一個定時開關功能,只需要簡單更新幾句代碼并沒有新增硬件設施的前提下,如果使用MicroPython File Uploader,需要從接線板中拆除后再連接電腦進行更新,這無疑會影響體驗。ESP8266的官方SDK是支持云升級功能的,即可以通過遠程燒寫固件的方式對開發(fā)板進行固件更新,那MicroPython是否能實現(xiàn)類似的功能呢?今天的主角WebREPL為此而生。
WebREPL客戶端是MicroPython官方推薦的更新方式,功能很強大,通過網(wǎng)頁的方式讀取ESP8266的文件系統(tǒng),可以上傳文件或者下載開發(fā)板中已存在的文件,可以輸入指令并實時查看開發(fā)板中的輸出狀態(tài),完全取代串口調(diào)試。
WebREPL客戶端的兩種使用方式在本篇開頭已經(jīng)寫明,選擇任意一種均可以連接開發(fā)板。
WebREPL客戶端必須與ESP8266開發(fā)板在同一局域網(wǎng)下,否則無法正常連接
WebREPL在固件中默認是不啟動的,所以在使用之前,需要先將服務打開。
- 在輸入框輸入
import webrepl_setup
-
看到當前WebREPL自動啟動狀態(tài)是未開啟的
- 輸入
E開啟上電時自動啟動WebREPL功能
-
要開啟WebREPL必須先設定密碼,密碼為4-9個字符
-
連續(xù)輸入兩次密碼后,確認Web_REPL開啟成功,重啟開發(fā)板
到這一步,按照我的預期,WebREPL服務應該已經(jīng)是開啟狀態(tài),而我們可以使用WebREPL客戶端來進行連接了,實際情況卻是此時如果使用客戶端進行連接,將會始終連接失敗,所以還需要有第6步。
- 輸入
import webrepl;webrepl.start();
輸入import webrepl;webrepl.start();
-
成功開啟WebREPL服務,此時即可通過WebREPL客戶端來進行遠程連接ESP8266開發(fā)板,并上傳或下載文件。
接下來使用WebREPL客戶端連接開發(fā)板
- 打開http:///webrepl/
并修改地址為上一步控制臺輸出的地址,我這里是ws://192.168.2.19:8266
2.點擊連接后,輸入剛剛設定的密碼,輸入密碼時不會有任何回顯,輸入完畢直接回車,一切正常的情況即會連接成功。
- 現(xiàn)在已經(jīng)可以通過WebREPL客戶端對ESP8266進行操作,主窗口中輸入python代碼進行實時調(diào)試,右側有文件上傳與下載功能,上傳功能與MicroPython File Uploader一樣,下載功能可以直接下載ESP8266開發(fā)板中存在的文件。
輸入import os;os.listdir();,查看當前開發(fā)板中的文件名稱
將文件名輸入到右側的Get a file輸入框中,點擊Get from device按鈕,即可將開發(fā)板中的文件下載到本地
4.webrepl_cfg.py文件中存放著我們之前設定的WebREPL密碼,明文的?!?
到此,使用WebREPL遠程更新ESP8266開發(fā)板已經(jīng)完成,不過雖然前面設置了在開發(fā)板啟動時自動開啟WebREPL服務的功能,實驗證明,在開發(fā)板斷電重啟后,WebREPL服務并未開啟,經(jīng)檢查,是因為在設置WebREPL服務之前,我們上傳了自定義的boot.py文件,而MicroPython在開啟WebREPL服務時,會將相關代碼直接追加在boot.py文件尾,造成了語法錯誤,所以要手動更新一下boot.py文件。
更新后的boot.py文件內(nèi)容如下
import network,webrepl
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print("connecting to network...")
sta_if.active(True)
sta_if.connect("<ap_name>", "<password>") # Connect to an AP <ap_name>&<password> is your route name&password
while not sta_if.isconnected(): # Check for successful connection
pass
print("network config:", sta_if.ifconfig())
webrepl.start()
再也不用把開發(fā)板跟電腦相連啦!
上一篇:ESP8266折騰之路(二) 連接WIFI路由器使能上網(wǎng)
|