跳转至

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

函数说明:返回无线连接的当前状态。