AP 接入点模式#
实验目的#
AP 模式(即 Soft-AP 模式或接入点模式),此时 ESP32 设备作为接入点,允许其他基站(如手机等其他设备)连接到 ESP32 设备。
本实验目的是如何设置 ESP32 设备为 AP 模式,并允许其他 STA 的接入。
内容详解#
设置 WiFi 接入点参数#
SoftAP 的主要参数包含:
SSID
PASSWORD
AP 所在的频段
最大可连接 STA 数量
宏定义在softap_example_main.c
中,可直接在在文件中修改,也可使用 idf.py menuconfig
中修改
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID //WiFi热点名
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD //WiFi热点密码
#define EXAMPLE_ESP_WIFI_CHANNEL CONFIG_ESP_WIFI_CHANNEL //WiFi热点频段
#define EXAMPLE_MAX_STA_CONN CONFIG_ESP_MAX_STA_CONN //能连接的最大节点数量,默认为4,最大为4
//初始化WiFi的参数
wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.channel = EXAMPLE_ESP_WIFI_CHANNEL,
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
.authmode = WIFI_AUTH_WPA_WPA2_PSK
},
这边主要用到了 wifi_config_t 这个结构体,它的内容如下所示
Ctypedef struct {
uint8_t ssid[32];//SSID
uint8_t password[64];//密码
uint8_t ssid_len;//SSID长度,若设为0则会自动查找到终止字符;否则会在规定长度处截断
uint8_t channel;//AP的通道
wifi_auth_mode_t authmode;//授权模式
uint8_t ssid_hidden;//是否广播SSID,默认为0-广播;设为1则不广播
uint8_t max_connection;//能连接的最大节点数量,默认为4,最大为4
uint16_t beacon_interval;//信标间隔,默认100ms,应设置在100-60000ms内
} wifi_ap_config_t;
API#
WIFI 的 API 定义在esp_wifi.h
头文件中,希望深入了解的同学可以自行前往该头文件进行阅读并理解 WiFi 深层次的知识。
WiFi 驱动可以看成是黑盒,它对高层代码一无所知,比如 TCPIP 栈、应用程序任务、事件任务等,它所能做的就是接收来自高层的 API 调用或将事件队列发布到指定的队列,由 API esp_wifi_init() 初始化。
事件任务是一个守护任务,它接收来自 WiFi 驱动程序或其他子系统的事件,例如作为 TCPIP 栈,事件任务在接收到事件时会调用默认的回调函数。例如在接收到事件 SYSTEM_EVENT_STA_CONNECTED 时,它会调用 tcpip_adapter_start() 来启动 DHCP 客户端在它的默认处理程序中。
应用可以通过 API esp_event_init 注册自己的事件回调函数,然后应用回调函数将在默认回调之后调用。此外,如果应用程序不想执行回调,在事件任务中,它需要做的是在应用回调函数中将相关事件发布到应用任务。
应用程序任务(代码)通常将所有这些东西混合在一起,它调用 API 来初始化系统/WiFi 和必要时处理事件。
AP 模式下的宏观场景,其中包含不同阶段的具体描述:
实验内容#
此示例说明如何使用 ESP 的 Wi-Fi 驱动程序实现softAP接入点功能。
配置项目参数#
打开项目配置菜单 ( idf.py menuconfig
)。
在 Example Configuration
菜单中:
设置 WiFi SSID。
设置 WiFi Password。
可选:如果需要,请根据您的要求更改其他选项。
构建和烧录#
构建项目并将其烧写到板上,然后运行监控工具查看串行输出,共两种方法:
在终端中进入命令行界面:
idf.py -p PORT flash monitor
(要退出串行监视器,请键入 Ctrl-]。)
Clion 界面:
选择 flash 并运行
选择 monitor 并运行
连接SoftAp
打开手机或其他设备,看是否可以接入到该AP上。
示例输出#
此示例有控制台输出:
I (917) phy: phy_version: 3960, 5211945, Jul 18 2018, 10:40:07, 0, 0
I (917) wifi: mode : softAP (30:ae:a4:80:45:69)
I (917) wifi softAP: wifi_init_softap finished.SSID:myssid password:mypassword
I (26457) wifi: n:1 0, o:1 0, ap:1 1, sta:255 255, prof:1
I (26457) wifi: station: 70:ef:00:43:96:67 join, AID=1, bg, 20
I (26467) wifi softAP: station:70:ef:00:43:96:67 join, AID=1
I (27657) tcpip_adapter: softAP assign IP to station,IP is: 192.168.4.2
源代码参考#
参见参考资料与源代码