ESP32使用MicroPython:WiFi

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()

函數說明:返回無線連接的當前狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章