管理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()¶
函数说明:返回无线连接的当前状态。