本篇新增軟件
WebREPL在線版http://micropython.org/webrepl/
下載地址:https://codeload.github.com/micropython/webrepl/zip/master
在MicroPython on ESP8266的開(kāi)發(fā)過(guò)程中,做的最多的事情就是上傳文件,MicroPython File Uploader 雖然很好用,但是有兩個(gè)缺點(diǎn):
- 必須將ESP8266開(kāi)發(fā)板與電腦連接
- 如果開(kāi)發(fā)板中運(yùn)行的程序未結(jié)束,例如定義了死循環(huán)用來(lái)監(jiān)聽(tīng)信號(hào)時(shí),文件的上傳有可能會(huì)失敗。
上傳失敗自不必說(shuō),而必須與電腦連接就制約了我們開(kāi)發(fā)的靈活性,想像一下:我們用8266做了一個(gè)通過(guò)手機(jī)控制的接線板控制器,封裝后安裝進(jìn)接線板中,然后有一天想要給它增加一個(gè)定時(shí)開(kāi)關(guān)功能,只需要簡(jiǎn)單更新幾句代碼并沒(méi)有新增硬件設(shè)施的前提下,如果使用MicroPython File Uploader,需要從接線板中拆除后再連接電腦進(jìn)行更新,這無(wú)疑會(huì)影響體驗(yàn)。ESP8266的官方SDK是支持云升級(jí)功能的,即可以通過(guò)遠(yuǎn)程燒寫(xiě)固件的方式對(duì)開(kāi)發(fā)板進(jìn)行固件更新,那MicroPython是否能實(shí)現(xiàn)類(lèi)似的功能呢?今天的主角WebREPL為此而生。
WebREPL客戶(hù)端是MicroPython官方推薦的更新方式,功能很強(qiáng)大,通過(guò)網(wǎng)頁(yè)的方式讀取ESP8266的文件系統(tǒng),可以上傳文件或者下載開(kāi)發(fā)板中已存在的文件,可以輸入指令并實(shí)時(shí)查看開(kāi)發(fā)板中的輸出狀態(tài),完全取代串口調(diào)試。
WebREPL客戶(hù)端的兩種使用方式在本篇開(kāi)頭已經(jīng)寫(xiě)明,選擇任意一種均可以連接開(kāi)發(fā)板。
WebREPL客戶(hù)端必須與ESP8266開(kāi)發(fā)板在同一局域網(wǎng)下,否則無(wú)法正常連接
WebREPL在固件中默認(rèn)是不啟動(dòng)的,所以在使用之前,需要先將服務(wù)打開(kāi)。
- 在輸入框輸入
import webrepl_setup
輸入 import webrepl_setup -
看到當(dāng)前WebREPL自動(dòng)啟動(dòng)狀態(tài)是未開(kāi)啟的
提示 webrepl未開(kāi)啟自動(dòng)啟動(dòng)功能 - 輸入
E開(kāi)啟上電時(shí)自動(dòng)啟動(dòng)WebREPL功能
輸入E開(kāi)啟 -
要開(kāi)啟WebREPL必須先設(shè)定密碼,密碼為4-9個(gè)字符
連續(xù)輸入兩次4-9位的密碼 -
連續(xù)輸入兩次密碼后,確認(rèn)Web_REPL開(kāi)啟成功,重啟開(kāi)發(fā)板
webrepl已開(kāi)啟自動(dòng)啟動(dòng)功能
到這一步,按照我的預(yù)期,WebREPL服務(wù)應(yīng)該已經(jīng)是開(kāi)啟狀態(tài),而我們可以使用WebREPL客戶(hù)端來(lái)進(jìn)行連接了,實(shí)際情況卻是此時(shí)如果使用客戶(hù)端進(jìn)行連接,將會(huì)始終連接失敗,所以還需要有第6步。
- 輸入
import webrepl;webrepl.start();
輸入import webrepl;webrepl.start(); -
成功開(kāi)啟WebREPL服務(wù),此時(shí)即可通過(guò)WebREPL客戶(hù)端來(lái)進(jìn)行遠(yuǎn)程連接ESP8266開(kāi)發(fā)板,并上傳或下載文件。
開(kāi)始WebREPL成功
接下來(lái)使用WebREPL客戶(hù)端連接開(kāi)發(fā)板
- 打開(kāi)http://micropython.org/webrepl/
并修改地址為上一步控制臺(tái)輸出的地址,我這里是ws://192.168.2.19:8266
改為ESP8266開(kāi)發(fā)板ip地址
2.點(diǎn)擊連接后,輸入剛剛設(shè)定的密碼,輸入密碼時(shí)不會(huì)有任何回顯,輸入完畢直接回車(chē),一切正常的情況即會(huì)連接成功。

- 現(xiàn)在已經(jīng)可以通過(guò)WebREPL客戶(hù)端對(duì)ESP8266進(jìn)行操作,主窗口中輸入python代碼進(jìn)行實(shí)時(shí)調(diào)試,右側(cè)有文件上傳與下載功能,上傳功能與MicroPython File Uploader一樣,下載功能可以直接下載ESP8266開(kāi)發(fā)板中存在的文件。
輸入
import os;os.listdir();,查看當(dāng)前開(kāi)發(fā)板中的文件名稱(chēng)
查看文件名
將文件名輸入到右側(cè)的Get a file輸入框中,點(diǎn)擊Get from device按鈕,即可將開(kāi)發(fā)板中的文件下載到本地
下載webrepl_cfg.py文件
4.webrepl_cfg.py文件中存放著我們之前設(shè)定的WebREPL密碼,明文的?!?
到此,使用WebREPL遠(yuǎn)程更新ESP8266開(kāi)發(fā)板已經(jīng)完成,不過(guò)雖然前面設(shè)置了在開(kāi)發(fā)板啟動(dòng)時(shí)自動(dòng)開(kāi)啟WebREPL服務(wù)的功能,實(shí)驗(yàn)證明,在開(kāi)發(fā)板斷電重啟后,WebREPL服務(wù)并未開(kāi)啟,經(jīng)檢查,是因?yàn)樵谠O(shè)置WebREPL服務(wù)之前,我們上傳了自定義的boot.py文件,而MicroPython在開(kāi)啟WebREPL服務(wù)時(shí),會(huì)將相關(guān)代碼直接追加在boot.py文件尾,造成了語(yǔ)法錯(cuò)誤,所以要手動(dòng)更新一下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()
再也不用把開(kāi)發(fā)板跟電腦相連啦!









