ESP32自帶了WiFi模塊,因此我們可以很容易的讓ESP32接入網絡。
在MicroPython下,我們可以使用 network
模塊來配置ESP32的網絡模式:
-
STA
作爲站點接入WiFi網絡 -
AP
作爲熱點,允許其他設備接入ESP32
本篇我們分別講解這兩種模式。
熱點模式(AP)¶
熱點模式允許用戶將自己的ESP32配置爲熱點,這讓多個ESP32芯片之間的無線連接在不借助外部路由器網絡的情況下成爲可能。
import network ap = network.wifi(network.AP_IF) # 創建一個熱點 ap.active(True) # 激活熱點 ap.config(essid='ESP-AP') # 爲熱點配置essid(即熱點名稱)
以上三行代碼,就簡單的將你的ESP32配置成了一個開放的AP熱點:
你現在可以在你手機或電腦的WiFi列表中找到它了。
站點模式(STA)¶
更多的情況下,我們會想要將ESP32連接到WiFi網絡。
import network wifi = network.wifi(network.STA_IF) # 創建一個Wifi站點 wifi.active(True) # 激活該站點 wifi.scan() # 掃描周圍的可用網絡
獲取當前esp32的mac地址
>>> wifi.config('mac') b'0\xae\xa4\x84"d'
檢查你是否已經連接到網絡
>>> wifi.isconnected() False
連接到某個WiFi,essid
指WiFi名稱,password
指WiFi密碼
>>> wifi.connect('essid', 'password')
PS: 上圖中
How_Router_Home
是筆者家中WiFi的名稱,how@home
是該WiFi的密碼
獲取當前WiFi連接的信息
IP/子網掩碼/網關/DNS
>>> wifi.ifconfig() ('192.168.0.117', '255.255.255.0', '192.168.0.1', '192.168.0.1')
輸出數據從左至右分別對應於:
-
內外IP
-
子網掩碼
-
網關
-
DNS
封裝一個連接WiFi的函數¶
你可以將WiFi連接的步驟按照官網這樣,寫成一個函數:
def do_connect(): import network wifi = network.WLAN(network.STA_IF) wifi.active(True) if not wifi.isconnected(): print('connecting to network...') wifi.connect('essid', 'password') while not wifi.isconnected(): pass print('network config:', wifi.ifconfig())
更好的WiFi連接方法¶
EMP項目¶
emp-1zlab
中封裝了emp_wifi模塊, 它可以幫助你記住已有的wifi連接,更方便的爲大家連接wifi
以上的代碼,是ESP 8266的micropython文檔中,官方所提及的一段代碼,用於連接wifi,但是他的功能過於簡陋,無法滿足諸多迫切需求(記住密碼,切換網絡,自動連接),對於WiFi的連接,筆者曾寫過一篇文章詳細的講述wifi連接的正確姿勢。具體內容請閱讀1Z實驗室-簡書專題
network模塊 API文檔¶
類
class network.WLAN(mode)¶
mode
:模式
-
network.STA_IF
站點模式,連接到上游WiFi接入點 -
network.AP_IF
熱點模式,允許其他WiFi客戶端連接
定義WLAN¶
import network wlan = network.WLAN(network.STA_IF) #創建WLAN對象
函數¶
wlan.active(is_active)¶
函數說明:帶有參數時,爲是否激活WiFi,不帶參數爲查詢當前狀態。
is_active
:是否激活
-
True
激活網絡接口 -
False
停用網絡接口
wlan.scan()¶
函數說明:掃描可用的無線網絡(僅在STA接口上進行掃描),返回有關WiFi接入點信息的元組列表。
(ssid,bssid,channel,RSSI,authmode,hidden)
bssid
:接入點的硬件地址,以二進制形式返回爲字節對象。可以使用ubinascii.hexlify()
將其轉換爲ASCII格式
authmode
:
-
AUTH_OPEN = 0
-
AUTH_WEP = 1
-
AUTH_WPA_PSK = 2
-
AUTH_WPA2_PSK = 3
-
AUTH_WPA_WPA2_PSK = 4
-
AUTH_MAX = 6
hidden
:
-
False
可見 -
True
隱藏
wlan.isconnected()¶
函數說明:檢查站點是否連接到AP。
在STA模式下,如果連接到WiFi接入點並具有有效的IP地址則返回True,否則返回False。
在AP模式下,當站點連接時返回True,否則返回False。
wlan.connect(essid, password)¶
函數說明:連接到無線網絡。
essid
:WiFi名稱
password
:WiFi密碼
wlan.config(essid, channel)¶
函數說明: 獲取接口的MAC adddress或者設置WiFi接入點名稱和WiFi通道。
essid
:WiFi賬戶名
channel
:WiFi通道
wlan.ifconfig([(ip,mask, gateway, dns)])¶
函數說明:
不帶參數時,返回一個4元組(ip, subnet_mask, gateway, DNS_server)。
ip
:IP地址
mask
:子網掩碼
gateway
:網關
帶參數時,配置靜態IP。例如:
wlan.ifconfig(config = ('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')
wlan.disconnect()¶
函數說明:斷開與當前連接的無線網絡的連接。
wlan.status()¶
函數說明:返回無線連接的當前狀態。