WiFi Station+AP Mode


1.1 项目介绍

从上一课实验中我们知道ESP32有3种不同的WiFi工作模式:

Station模式(作为WiFi设备主动连接路由器,也叫做WiFi Client)

AP模式(作为一个Access Point,让其他WiFi设备来连接)即WiFi热点

Station+AP共存模式(ESP32连接路由器的同时自身也是一个热点供其他WiFi设备来连接)

所有WiFi编程项目在使用WiFi前必须配置WiFi运行模式,否则无法使用WiFi。在这节实验课程中,我们将接着学习使用ESP32的WiFi Station+AP模式。

AP+Station 模式:

ESP32除AP模式和Station模式外,还可以同时使用AP模式和Station模式。此模式包含前两种模式的功能。打开ESP32的Station模式,将其连接到路由器网络,它可以通过路由器与Internet通信。同时开启其AP模式,创建热点网络。其他WiFi设备可以选择连接路由器网络或热点网络与ESP32通信。

1.2 实验组件

ESP32 Plus主板
ESP32 Plus主板 x1
USB线
USB线 x1

1.3 模块接线图

WiFi Station+AP模式接线图

1.4 在线运行代码

在代码运行之前,需要配置ESP32的 AP名称和连接密码。当然,你也可以不修改它,使用默认的名称和连接密码。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import network #导入网络模块

ssidRouter     = 'ChinaNet_2.4G' #输入路由器名称
passwordRouter = 'ChinaNet@233' #输入路由器密码

ssidAP         = 'ESP32_WiFi'#输入AP名称
passwordAP     = '12345678' #输入AP密码

local_IP       = '192.168.4.147'
gateway        = '192.168.1.1'
subnet         = '255.255.255.0'
dns            = '8.8.8.8'

sta_if = network.WLAN(network.STA_IF)
ap_if = network.WLAN(network.AP_IF)
    
def STA_Setup(ssidRouter,passwordRouter):
    print("Setting soft-STA  ... ")
    if not sta_if.isconnected():
        print('connecting to',ssidRouter)
        sta_if.active(True)
        sta_if.connect(ssidRouter,passwordRouter)
        while not sta_if.isconnected():
            pass
    print('Connected, IP address:', sta_if.ifconfig())
    print("Setup End")
    
def AP_Setup(ssidAP,passwordAP):
    ap_if.ifconfig([local_IP,gateway,subnet,dns])
    print("Setting soft-AP  ... ")
    ap_if.config(essid=ssidAP,authmode=network.AUTH_WPA_WPA2_PSK, password=passwordAP)
    ap_if.active(True)
    print('Success, IP address:', ap_if.ifconfig())
    print("Setup End\n")

try:
    AP_Setup(ssidAP,passwordAP)    
    STA_Setup(ssidRouter,passwordRouter)
except:
    sta_if.disconnect()
    ap_if.idsconnect()

1.5 实验结果

按照接线图正确接好模块,用USB线连接到计算机上电,单击 运行按钮 来执行程序代码。代码开始执行,打开ESP32的AP功能,“Shell”窗口中打印接入点信息。

注意:如果打开串口监视器且设置好波特率,串口监视器窗口还是没有显示任何信息,可以尝试按下ESP32的RESET按键。

打开手机的 WiFi 扫描功能,可以看到ESP32的 SSID ,在本课程代码中的名称为 “ESP32_WiFi”。你可以输入密码 “12345678” 连接它,也可以通过修改程序代码来修改它的AP名称和密码。

单击 停止按钮 或按Ctrl+C退出程序。

代码说明

代码说明
import network导入网络模块,用于WiFi功能。
ssidRouter / passwordRouter设置要连接的路由器名称与密码(Station)。
ssidAP / passwordAP设置AP名称与密码(WPA/WPA2,至少8位)。
sta_if = network.WLAN(network.STA_IF)创建Station接口对象,用于连接路由器。
ap_if = network.WLAN(network.AP_IF)创建AP接口对象,用于创建热点。
def STA_Setup(...)激活Station并连接到指定路由器,等待连接成功。
sta_if.isconnected()检测是否已连接到路由器。
sta_if.ifconfig()获取Station接口的IP等网络信息。
ap_if.ifconfig([IP, GW, MASK, DNS])设置AP接口的IP、网关、子网和DNS。
ap_if.config(essid=..., authmode=..., password=...)配置AP的SSID、加密方式与密码。
ap_if.active(True)开启AP,开始对外广播热点。
try: AP_Setup(...); STA_Setup(...)依次启动AP与Station,实现共存模式。