2023年5月25日 星期四

ESP8266 MicroPython 無線基地台連線

本 ESP8266 實作系列是以 Thonny 為程式開發工具,並以 MicroPython 程式碼來控制 ESP8266 開發板(Wemos D1 Mini)與延伸附加的硬體裝置。 

建置物聯網裝置時通常需要設定WiFi連線到本地的無線路由器(WiFi分享器)。ESP8266開發板整合WiFi網路晶片,所以可以使用三種工作模式連接WiFi。 

  •  AP模式: Access Point,提供無線接入服務,允許其它無線裝置接入,提供資料訪問,一般的無線路由/網橋工作在該模式下。AP和AP之間允許相互連線。ESP8266工作在AP模式下,手機、PAD、電腦等裝置可以直接連上模組,可以很方便對使用者裝置進行控制。 
  • STA模式: Station, 類似於無線終端,STA本身並不接受無線的接入,它可以連線到AP,一般無線網絡卡即工作在該模式。任何一個接入無線AP的裝置都可以稱為一個站點。 
  • AP+STA模式:就是既可以連接到其它的WIFI路由,也可以讓其他的無限終端設備聯入。
以 MicroPython 程式碼來控制 ESP8266 開發板(Wemos D1 Mini)網路功能需要用到 network 模組來建立WLAN物件。

另外,因為ESP8266 開發板所掃描到基地台MAC 為二進制值,為了轉圜成常見的16進制表示法,所以需再程式中再匯入 ubinascii 模組。
撰寫程式碼如下:
import network
import ubinascii

sta = network.WLAN(network.STA_IF)
sta.active(True)

#掃描列表基地台
stas = sta.scan()
print("列表無線基地台")
for ap in stas:
    ssid = ap[0].decode()
    mac = ubinascii.hexlify(ap[1], ":").decode()
    print(ssid, mac)
print("無線基地台列表完成")

#中斷既有連線
sta.disconnect()

#連線指定的基地台
if not sta.isconnected():
    print("無線基地台連線中...")
    sta.connect('SSID名稱', '連線密碼')
    while not sta.isconnected():
        pass

#基地台連線成功後顯示連線資訊
if sta.isconnected():
    print("連線成功!!")
    print("network config:", sta.ifconfig())
#sta.disconnect()
以上程式碼完成三件事: 
  1. 掃描附近可用之WiFi無線基地台 
  2. 連線指定的WiFi無線基地台 
  3. 基地台連線成功後顯示連線資訊