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 模式下的宏观场景,其中包含不同阶段的具体描述:

image-20220729105646806

实验内容#

此示例说明如何使用 ESP 的 Wi-Fi 驱动程序实现softAP接入点功能。

配置项目参数#

打开项目配置菜单 ( idf.py menuconfig)。

Example Configuration 菜单中:

  • 设置 WiFi SSID。

  • 设置 WiFi Password。

可选:如果需要,请根据您的要求更改其他选项。

构建和烧录#

构建项目并将其烧写到板上,然后运行监控工具查看串行输出,共两种方法:

  1. 在终端中进入命令行界面:

idf.py -p PORT flash monitor

(要退出串行监视器,请键入 Ctrl-]。)

  1. 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

源代码参考#

参见参考资料与源代码