最近在測試 Google 的 Gemini 與 OpenAI 的 GPT API 時想說是否能在 ESP8266/ESP32 的 MicroPython 上串接這些 LLM 呢? 於是把塵封已久的開發板拿出來, 複習去年整理的筆記後將韌體刷新到最新版, 過程摘要整理如下, 參考前年底重新整理的筆記索引 :
1. 下載與燒錄 MicroPython 韌體 :
目前最新為 v1.23 版, 參考下面這篇下載韌體與燒錄 :
ESP8266/ESP32 開發板很多, 我常用的是 Witty Cloud (ESP8266), 此板內建按鈕 (GPIO4), 光敏電阻 (A0), 與一顆彩色 LED (GPIO12, 13, 15), 可以馬上進行 I/O 實驗 (露天大約 100 元).
2. 上傳 xtools 函式庫 :
此函式庫是我從陳會安老師寫的 "超簡單 Python/MicroPython 物聯網應用" 這本書中的範例增修而來的, 模組名稱照舊. 它包含三個 Python 程式與一個連線設定檔 config.py :
- config.py : 儲存 WiFi 連線資訊與 Line Notify 權杖
SSID ='基地台 SSID'
PASSWORD ='連線密碼'
LINE_NOTIFY_TOKEN = 'Line Notify 權杖' - xtools.py : 連線基地台, 提出 HTTP 請求, 送出 Line 訊息等
- xrequests.py : 有帶參數功能的 requests 模組, xtools 的 HTTP 請求會用.
- urlencode.py : 將查詢參數 query 字典轉成 URL 查詢字串, xrequests.py 會用到.
- ESP8266WebServer.py : 在 ESP8266/ESP32 上建立網頁伺服器
這些 Python 模組以 xtools.py 為主 (API 函式都放在這裡), xrequests.py 為副 (供 xtools.py 呼叫), 而 urlencode.py 為輔助模組 (供 xrequests.py 呼叫). xtools.py 中的函式如下表 :
xtools.py 函式 | 說明 |
get_id() | 傳回開發板的 MAC 位址字串 |
get_mac() | 傳回開發板的 MAC 位址字串 |
get_num(x) | 傳回字串 x 中的數字 (含浮點數) |
random_in_range(low, high) | 傳回 low~high 之間的整數亂數 (預設 0~1000) |
map_range(x, in_min, in_max, out_min, out_max) | 將數值 x 從 [in_min, in_max] 映射至 [out_min, out_max] 區間 |
conect_wifi_led(ssid, passwd, timeout=15) | 以密碼 passwd 連線 ssid 基地台 (15 秒內閃 LED), 成功 LED 恆亮並傳回所獲取之 IP |
show_error(final_state=0) | 閃爍板載 LED 3 秒以表示錯誤 (預設結束後恆亮) |
webhook_post(url, value) | 利用 xrequests.py 模組送出 POST 請求, 失敗呼叫 show_error() |
webhook_get(value) | 利用 urequests.py 模組送出 GET 請求, 失敗呼叫 show_error() |
line_msg(token, message) | 使用 xrequests.py 模組送出 LINE 訊息 (POST) |
format_datetime(localtime) | 將元組 localtime 轉成日期時間字串 'YYYY-MM-DD HH:mm:SS' |
scan_ssid() | 掃描附近之熱點 (基地台), 印出其 SSID 與信號強度 |
tw_now() | 傳回現在台灣的日期與時間 |
set_ap() | 開啟 AP 模式並建立伺服器 192.168.4.1 以便設定要連線之熱點 |
其中 scan_ssid(), tw_now(), 與 set_ap() 是我加寫的函式, 呼叫 set_ap() 會開啟 AP 模式 (SSID 為 MicroPython-xxxxxx) 並建立一個網頁伺服器 (192.168.4.1), 可用手機或電腦連線至此網頁來設定 ESP8266/ESP32 要連線的熱點之 SSID 與密碼, 這樣就不需要 config.py 檔, 可以在案場動態設置 WiFi 連線, 15 秒內連線成功傳回 IP, 失敗傳回 None.
將上面五個檔案壓縮成 lib.zip :
注意, 解壓縮後要去改 config.py 裡面的 SSID 與 PASSWORD 這兩個變數之值.
可以使用 Thonny 將這五個檔案一次上傳到開發板, 但首先要在 "選項" 中更改直譯器為 ESP8266/ESP32 的 MicroPython :
這樣就可以在左邊的檔案管理框選取這四個 Python 檔案上傳到開發板根目錄下 :
上傳完成後左下角的 "MicroPython 設備" 檔案管理框就會出現這 4 個檔案了 (新版的 Thonny 已經可以一次上傳多個檔案到開發板) :
Windows 環境也可以用 AmpyGUI 軟體上傳, 參考 :
3. 匯入函式庫測試 WiFi 連線 :
在 Thonny 下方的互動視窗中匯入 config 與 xtools 這兩個模組, 呼叫 xtools 的 connect_wifi_led() 函式連線 WiFi 基地台 :
MicroPython v1.23.0 on 2024-06-02; ESP module with ESP8266
Type "help()" for more information.
>>> import xtools
>>> import config
>>> ip=xtools.connect_wifi_led(config.SSID, config.PASSWORD)
#4 ets_task(4020f540, 28, 3fffa050, 10)
Connecting to network...
network config: ('192.168.192.248', '255.255.255.0', '192.168.192.92', '192.168.192.92')
傳回 IP 表示連線成功.
測試其它 xtools 函式 :
>>> xtools.get_id()
'14f5a800'
>>> xtools.get_mac()
'e8:db:84:a8:f5:14'
>>> xtools.scan_ssid()
7N8F-1 b4:f2:67:13:36:5a -87dBm
HOME bc:f6:85:ff:a0:e0 -75dBm
ASUS_RT_AC52 10:7c:61:9d:30:18 -93dBm
ASUS_RT_AC52-Plus 5c:27:d4:f3:82:22 -54dBm
客廳 2.ynm, fa:8f:ca:5d:f0:ec -79dBm
>>> xtools.tw_now()
Querying NTP server and set RTC time ... OK.
'2024-09-19 22:48:21'
2024-09-21 補充 :
沒有留言:
張貼留言