查看: 495|回复: 1

[进阶教程] ESP32 IDF教程:设置软AP

[复制链接]

简介

ESP32教程旨在解释如何使用ESP32 和IDF创建软AP。对于这个简单示例,我们只需设置软AP,并确认它将出现在可用WiFi连接列表中即可。

本教程基于此优秀示例lucadentella,它功能丰富,值得一试。
本ESP32教程的测试是使用集成在ESP32开发板中的DFRobot的ESP32 模块设备进行的。

代码

我们首先需要做的就是加入[esp_wifi.h](https://github.com/espressif/esp ... /include/esp_wifi.h)库。这里我们将可以访问启动软AP所需的功能。

[AppleScript] 纯文本查看 复制代码
    #include "esp_wifi.h"


在设置软AP前,我们需要定义一个SSID,以便其他设备能够发现它。因此,我们将定义一个后续会用到的字符串。我将其称为“ESP32AP”,但是您也可以根据自己的喜好命名。

[AppleScript] 纯文本查看 复制代码
    #define SSID "ESP32AP"


转到主代码,我们首先要做的是通过调用esp_wifi_init函数初始化WiFi。请注意,此调用需要在对WiFi API [1]的其它任何调用之前予以执行。

作为输入,此函数接收类型为[wifi_init_config_t](http://esp-idf.readthedocs.io/en ... fi__init__config__t)的参数地址,该参数将包含WiFi堆栈配置。幸运的是,通过这个简单示例,我们无需担心这些低级配置,通过调用[WIFI_INIT_CONFIG_DEFAULT](https://github.com/espressif/esp ... ude/esp_wifi.h#L144)宏,它将返回WiFi的一组默认配置。

[AppleScript] 纯文本查看 复制代码
    wifi_init_config_t wifiInitializationConfig = WIFI_INIT_CONFIG_DEFAULT();
     
    esp_wifi_init(&wifiInitializationConfig);


接下来我们需要设置WiFi存储配置,并调用esp_wifi_set_storage函数。此函数接收类型为wifi_storage_t的变量作为输入参数。默认情况下,该值为WIFI_STORAGE_FLASH [2],这意味着配置将存储在内存和闪存中[3]。

在我们的示例中,我们将传递输入值WIFI_STORAGE_RAM,它指定所有配置将存储在RAM [3]中。

[AppleScript] 纯文本查看 复制代码
    esp_wifi_set_storage(WIFI_STORAGE_RAM);


接下来,我们将通过调用esp_wifi_set_mode函数设置WiFi操作模式。此函数允许将WiFi设置为在站模式、软AP或两者中运行[4]。默认情况下,运行模式为软AP [4]。

作为输入,此函数接收类型为wifi_mode_t的变量。虽然我们前面提及默认值,但是我们将通过传递输入值WIFI_MODE_AP将模式明确设置为软AP。
[AppleScript] 纯文本查看 复制代码
    esp_wifi_set_mode(WIFI_MODE_AP);

除设置模式外,我们还需要指定剩余的软AP配置。为此,我们需要创建一个类型为[wifi_config_t](https://github.com/espressif/esp ... p_wifi_types.h#L169)的变量。由于我们将ESP32设置为工作站,因此我们需要配置wifi_ap_config_t结构,后者属于wifi_config_t联合体的重要内容。

我们将设置的首个值是SSID,这会用到我们在代码开头定义的值。此项配置的结构成员称为ssid。

在这个简单示例中,我们将保持AP处于开放状态,因此我们无需输入密码。为此,我们将authmode成员设置为WIFI_AUTH_OPEN。请注意,这是一个类型为wifi_auth_t的变量,它支持其它许多数值。

我们还需设置的其他成员是一些通道,我们将其设置为0,我们将ssid_hidden设置为0以便广播SSID,我们将beacon_interval设置为100 ms,此外我们还将max_connection设置为1。

请注意,max_connection结构成员与能够连接到AP的最大站数相关,其允许的最大值为4。

我们将在调用[esp_wifi_set_config函数](http://esp-idf.readthedocs.io/en ... e_tP13wifi_config_t)时传递此配置参数。该函数还接收[wifi_interface_t](https://github.com/espressif/esp ... sp_wifi_types.h#L37)类型变量作为参数。由于我们希望ESP32作为软AP运行,因此我们为此参数传递值WIFI_IF_AP。

[AppleScript] 纯文本查看 复制代码
    wifi_config_t ap_config = {
            .ap = {
                .ssid = SSID,
            .channel = 0,
            .authmode = WIFI_AUTH_OPEN,
            .ssid_hidden = 0,
            .max_connection = 1,
            .beacon_interval = 100
            }
    };
     
    esp_wifi_set_config(WIFI_IF_AP, &ap_config);


最后,我们调用esp_wifi_start函数启动ESP32 WiFi到先前定义的对应配置。此函数不带参数。
[AppleScript] 纯文本查看 复制代码

    esp_wifi_start();


最终代码如下所述。

  
[AppleScript] 纯文本查看 复制代码
  #include "esp_wifi.h"
     
    #define SSID "ESP32AP"
     
    void app_main()
    {   
     
        wifi_init_config_t wifiInitializationConfig = WIFI_INIT_CONFIG_DEFAULT();
     
        esp_wifi_init(&wifiInitializationConfig);
     
        esp_wifi_set_storage(WIFI_STORAGE_RAM);
     
        esp_wifi_set_mode(WIFI_MODE_AP);
     
        wifi_config_t ap_config = {
              .ap = {
                .ssid = SSID,
                .channel = 0,
                .authmode = WIFI_AUTH_OPEN,
                .ssid_hidden = 0,
                .max_connection = 1,
                .beacon_interval = 100
              }
            };
     
        esp_wifi_set_config(WIFI_IF_AP, &ap_config);
     
        esp_wifi_start();
     
    }



测试代码

如需测试代码,只需使用IDF命令行工具将其闪存到ESP32即可。上传代码后,打开计算机的可用网络列表。我们在代码中定义名称的新网络应该会显示为可用状态,如图1所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019 ... ess=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5MzM4MjQz,size_16,color_FFFFFF,t_70)



图片1.png
图1 – Windows中WiFi连接列表提供的ESP32软AP。

注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
他写了200多篇有关ESP32、ESP8266的有用的教程和项目。

查看更多ESP32/ESP8266教程和项目:
中文版教程 : ESP32教程  合集
英文版教程 :ESP32 tutorial 合集



gada888  版主

发表于 2019-6-6 10:48:15

学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail