如要上傳程式或透過直譯的方式下指令給 NodeMCU/ESP32,我常用的工具是 uPyCraft IDE,可是必須將 USB 線一直接在電腦上。有沒有辦法開機就可以執行特定程式?只要將要執行程式寫在 boot.py 或 main.py中,開機就會優先執行這兩個程式。另一個要實做的是直接經由 Web 控制 NodeMCU/ESP32 的工具 WebREPL。
MicroPytho 系統下有兩個程式是 NodeMCU/ESP32 在一接上電源的時候就會馬上被執行的程式,依序是 boot.py 及 main.py,如果希望在開機時,就要執行的程式,可以寫在 main.py 中,
boot.py 執行一些系統設定,執行一次就結束,接著執行 main.py,通常將無限迴圈放在 main.py中。這樣 NodeMCU/ESP32 就可以不需要一直接在電腦上,由使用者按下執行按鈕,只需要接上電源就可以運作了。
在上圖第一個提示時,輸入:E,讓 NodeMCU/ESP32 接上電源後就會自動啟動 WebREPL 功能。按下Enter後,還要輸入一組密碼兩次,這是透過瀏覽器連接 WebREPL 需要進行驗證的密碼,密碼長度為4-9個字符。最後輸入 y 重新起動 ESP8266/ESP32。如果再執行一次 import webrepl_setup,就會看到以下已經 Enable 的畫面:
只做這個設定還不夠,僅完成 WebREPL 的遠程更新而已。將開發板重開機後,開啟 uPyCraft IDE,設定好連接埠,可以看到左方 device 的資料夾內有兩個 .py 檔案,除了原有的 boot.py 外多了一個 webrepl_cfg.py,這個檔案內放著先前設定的 WebREPL 密碼,是明文沒有加密的。如下圖:
上述作業完成後,要透過 WebREPL 連接開發板,可以使用瀏覽器(Chrome或Firefox)開啟用戶端,用戶端是一個網頁程式,可以直接連線至 http://micropython.org/webrepl ,或是從 GitHub 下載程式 執行。
左上角預設連線 IP 為 192,168.4.1 Port 8266,當按下 Connect 後沒有反應,如果將開發板斷電再重新上電啟動後,WebREPL 服務也不能正常執行,主要原因是沒有連接無線網路,也就是無法使用瀏覽器進行連線。
要解決上述問題,可以在開機時執行無線網路連線,需要修改 boot.py ,內容如下:
重新啟動開發板就會自動連線至無線網路,如果不知道連線的 IP,可以在 uPyCraft IDE 開啟 boot.py,按下執行按鍵,可以看到下方列出開發板取得的 IP。
使用瀏覽器開啟用戶端 WebREPL,修改IP:ws://192.168.1.119:8266,按下 Connect 按鍵,可以看到輸入密碼的畫面,輸入密碼後,就可以使用互動式的指令操控 NodeMCU/ESP32 的開發板了。
輸入以下指令測試一下,可以正常回應。
在 MicroPython 要先使用 import network 指令匯入 network 模組,接著使用active()啟動連線,並依據登入無線基地台的SSID跟密碼來進行連線。如果要把 NodeMCU/ESP32作為 station,請執行:
[範例]
實做 WebREPL 後,發現這並不是一個很理想的工具,主要是要先設定好無線網路的環境後,才可以透過瀏覽器進行控制,可是對於初學者要設定無線網路還是有一點點難度,但好處是擺脫 USB 線的束縛。
[AI-Thinker ESP32S Layout]
[開機自動執行程式]
MicroPytho 系統下有兩個程式是 NodeMCU/ESP32 在一接上電源的時候就會馬上被執行的程式,依序是 boot.py 及 main.py,如果希望在開機時,就要執行的程式,可以寫在 main.py 中,boot.py 執行一些系統設定,執行一次就結束,接著執行 main.py,通常將無限迴圈放在 main.py中。這樣 NodeMCU/ESP32 就可以不需要一直接在電腦上,由使用者按下執行按鈕,只需要接上電源就可以運作了。
[WebREPL]
所謂 REPL是 Read Evaluate Print Loop的簡稱,意為讀取-求值-列印-循環,也就是交互式提示的名稱。可以透過 UART 串列埠進行有線連接或經由 WiFi無線網路,經由瀏覽器連接 WebREPL 使用 MicroPython 指令進行控制 NodeMCU/ESP32 的交互式終端。使用 WebREPL前,需先進行設定,在提示列>>>執行:import webrepl_setup出現以下畫面:
在上圖第一個提示時,輸入:E,讓 NodeMCU/ESP32 接上電源後就會自動啟動 WebREPL 功能。按下Enter後,還要輸入一組密碼兩次,這是透過瀏覽器連接 WebREPL 需要進行驗證的密碼,密碼長度為4-9個字符。最後輸入 y 重新起動 ESP8266/ESP32。如果再執行一次 import webrepl_setup,就會看到以下已經 Enable 的畫面:
只做這個設定還不夠,僅完成 WebREPL 的遠程更新而已。將開發板重開機後,開啟 uPyCraft IDE,設定好連接埠,可以看到左方 device 的資料夾內有兩個 .py 檔案,除了原有的 boot.py 外多了一個 webrepl_cfg.py,這個檔案內放著先前設定的 WebREPL 密碼,是明文沒有加密的。如下圖:
上述作業完成後,要透過 WebREPL 連接開發板,可以使用瀏覽器(Chrome或Firefox)開啟用戶端,用戶端是一個網頁程式,可以直接連線至 http://micropython.org/webrepl ,或是從 GitHub 下載程式 執行。
左上角預設連線 IP 為 192,168.4.1 Port 8266,當按下 Connect 後沒有反應,如果將開發板斷電再重新上電啟動後,WebREPL 服務也不能正常執行,主要原因是沒有連接無線網路,也就是無法使用瀏覽器進行連線。
要解決上述問題,可以在開機時執行無線網路連線,需要修改 boot.py ,內容如下:
import network, webrepl wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('MyHome', '12345678') print('network config:', wlan.ifconfig()) webrepl.start()
重新啟動開發板就會自動連線至無線網路,如果不知道連線的 IP,可以在 uPyCraft IDE 開啟 boot.py,按下執行按鍵,可以看到下方列出開發板取得的 IP。
使用瀏覽器開啟用戶端 WebREPL,修改IP:ws://192.168.1.119:8266,按下 Connect 按鍵,可以看到輸入密碼的畫面,輸入密碼後,就可以使用互動式的指令操控 NodeMCU/ESP32 的開發板了。
輸入以下指令測試一下,可以正常回應。
import os os.listdir()
[network模組]
ESP8266/ESP32 內建 WiFi 功能,可以當做 station 模式用來連線基地台,而 AP(Access Point) 模式是把自己當作無線基地台,提供他人連線到這個開發板。在 MicroPython 要先使用 import network 指令匯入 network 模組,接著使用active()啟動連線,並依據登入無線基地台的SSID跟密碼來進行連線。如果要把 NodeMCU/ESP32作為 station,請執行:
wlan = network.WLAN(network.STA_IF)如果要把 ESP8266/ESP32 當作為基地台,可執行以下的指令:
wlan = network.WLAN(network.AP_IF)要使用無線網路指令前,需先將 network 模組匯入
import network一旦建立了網路,就可以像往常一樣用於創建和使用 TCP / UDP 通訊端。有關network模組指令,請參考下表:
指令 | 說明 |
---|---|
wlan = network.WLAN(network.STA_IF) | 建立無線AP介面 |
wlan.active(True) | 啟動無線網路 |
wlan.scan() | 掃描可以存取的無線網路 |
wlan.connect('ssid', 'password') | 連接無線 AP |
wlan.isconnected() | 檢查是否連線成功 結果:True |
wlan.config('mac') | 取得介面的 MAC 位址 結果:b'\xccP\xe3H\xc4\xe1' |
wlan.ifconfig() | 取得介面的 IP/netmask/gw/DNS 位址 結果:('192.168.1.119', '255.255.255.0', '192.168.1.1', '192.168.1.1') |
[範例]
def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('ssid', 'password') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig())
實做 WebREPL 後,發現這並不是一個很理想的工具,主要是要先設定好無線網路的環境後,才可以透過瀏覽器進行控制,可是對於初學者要設定無線網路還是有一點點難度,但好處是擺脫 USB 線的束縛。
張貼留言