betway必威-betway必威官方网站
做最好的网站

【betway必威官方网站】由此wifi_scan学习esp32wifi程

esp_err_t``esp_wifi_init(constwifi_init_config_t*config)

 

    在ESP32的设计开发中,我们必然会需要使用到wifi或ble功能,今天就讲解下如何将WIFI功能纳入到ESP32中来。

这个WIFI初始化函数是使用所有的WIFI API之前必须调用的函数;

  对于ESP32,其作为一款集成了2.4GHz WiFi和蓝牙双模块的单芯片,所有基于wifi和蓝牙开发是学习esp32的重要一环,今天WiFi原理和网络结构 可以点击链接进行详细的了解,这里就不做详细的叙述了,本文重点讲解省电模式下的WiFi是如何连接上路由器的,重点是相关API接口和编程方法的介绍。本文源码地址在:esp-idf/examples/wifi/power_save里。源码完成了对ESP32的低功耗模式的设置,并通过menuconfig将接入点AP的名称和密码赋值给ESP32,使ESP32作为一个站点STA接入到接入点AP(即路由器)中。

初始化WiFi环境

函数的参数是一个指针,指针指向wifi_init_config_t,这个结构体的默认值是:WIFI_INIT_CONFIG_DEFAULT(这是一个宏,直接使用即可,一般不需要改动)

PART1:

   首先,WiFi子系统的初始化需要由我们自己来自行,当我们写自己的程序时,需要通过调用 esp_wifi_init() 方法 来完成 。

esp_err_t``esp_wifi_deinit(void)

定义基本参数

/*set the ssid and password via "make menuconfig"*/
#define DEFAULT_SSID CONFIG_WIFI_SSID
#define DEFAULT_PWD CONFIG_WIFI_PASSWORD

#if CONFIG_POWER_SAVE_MODEM
#define DEFAULT_PS_MODE WIFI_PS_MODEM
#elif CONFIG_POWER_SAVE_NONE
#define DEFAULT_PS_MODE WIFI_PS_NONE
#else
#define DEFAULT_PS_MODE WIFI_PS_NONE
#endif /*CONFIG_POWER_SAVE_MODEM*/

 这里首先将AP端的名称和密码赋值给ESP32,使ESP32可以连接上接入点AP,这里的CONFIG_WIFI_SSID和CONFIG_WIFI_PASSWORD即为路由器端的名称和密码,他们在源码中是看不到的,它们的定义是在Kconfig.projbuild中定义的,我们可以通过make menconfig对其进行赋值。具体操作如下:

选择Example Configuration后

betway必威官方网站 1

    在WIFI SSID和WIFI Password中分别将路由器的名称和密码赋值给ESP32。

betway必威官方网站 2

  (当然,你也可以不通过menucofig而对ESP32直接进行赋值)

  紧随其后的便是对ESP32工作模式的设置,同样,其也可以通过menuconfig进行设置。

    推荐的方式如下:

去初始化,释放所有资源

PART2:

wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&config);

esp_err_t``esp_wifi_set_mode(wifi_mode_tmode)

进程打印函数

static const char *TAG = "power_save";


static esp_err_t event_handler(void *ctx, system_event_t *event)
{
    switch(event->event_id) {
    case SYSTEM_EVENT_STA_START:
    ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START");
    ESP_ERROR_CHECK(esp_wifi_connect());
    break;
    case SYSTEM_EVENT_STA_GOT_IP:
    ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP");
    ESP_LOGI(TAG, "got ip:%sn",
        ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
        break;
    case SYSTEM_EVENT_STA_DISCONNECTED:
    ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED");
    ESP_ERROR_CHECK(esp_wifi_connect());
    break;
    default:
        break;
    }
    return ESP_OK;
}

   本部分主要是将ESP32的工作信息,打印出来,对返回的任务通知进行switch分析,如果连接上了,就打印sta_start消息,并再次执行esp_err_t ``esp_wifi_connect( void )将ESP32 WiFi站连接到AP,第二次得到返回任务通知SYSTEM_EVENT_STA_GOT_IP,并调用  ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));将数字IP地址转换为十进制点ASCII表示法。,此时显示连接到的AP的IP和MAC地址。

如果没有连接上AP,同样会一直执行esp_err_t ``esp_wifi_connect( void ),直到将ESP32 WiFi站连接到AP为止。

 

设置操作模式

typedef enum {
WIFI_MODE_NULL = 0,
WIFI_MODE_STA,
WIFI_MODE_AP,
WIFI_MODE_APSTA,
WIFI_MODE_MAX
} wifi_mode_t;
该API的参数就是上面的枚举结构体中的一个变量,可选的是中间三种变量,第一个和最后一个结构体变量用来判断输入的值是不是符合要求用的,对咱们用户没啥实际用处。

PART3:

  ESP32可以是网络中的一个站点,也可以是其他设备的接入点。 请记住,当ESP32正在一个站,它可以连接到远程一个 ACCESS点(您的WiFi中心),当作为接入点时,其他WiFi站可以连接到ESP32(想想ESP32成为WiFi集线器)。通过我们的设定,我们可以选择我们的设备执行哪些操作模式的属性(站,接入点或站点接入点)。

这里要强调的是这个API的用法:当你选用了一个模式之后,WIFI库会为你选用的模式创建一个一个接口,这个接口需要初始化才能用,初始化函数就是:

WIFI设置和耗电设置

/*init wifi as sta and set power save mode*/
static void wifi_power_save(void)
{
    tcpip_adapter_init();
    ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    wifi_config_t wifi_config = {
    .sta = {
        .ssid = DEFAULT_SSID,
        .password = DEFAULT_PWD
    },
    };
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
    ESP_ERROR_CHECK(esp_wifi_start());

    ESP_LOGI(TAG, "esp_wifi_set_ps().");
    esp_wifi_set_ps(DEFAULT_PS_MODE);
}

   wifi_power_save首先调用 tcpip_adapter_init();函数对底层库的TCP/IP协议进行调用,然后检测esp_event_loop_init是否初始化完成。

之后便是进行wifi的设置,首先用esp_wifi_init(&cfg)对WIFI的内存空间进行设置,初始化WiFi Alloc资源为WiFi驱动,如WiFi控制结构,RX / TX缓冲区,WiFi NVS结构等,此WiFi也启动WiFi任务。(注意;在调用所有其他WiFi API之前,必须先调用此API)

然后设置ESP32 STA或AP的配置。

 wifi_config_t wifi_config = {
    .sta = {                        
        .ssid = DEFAULT_SSID,              //设置要连接的AP的接入点名称和密码
        .password = DEFAULT_PWD
    },
    };

(注意
1.只有当指定的接口被启用时,才能调用这个API,否则API会失败

2.对于站配置,bssid_set需要为0; 只有当用户需要检查AP的MAC地址时,才需要1。

  1. ESP32仅限一个通道,因此在软AP 站模式下,软AP将自动调整其通道与ESP32站的通道相同。)

 通过esp_wifi_set_mode(WIFI_MODE_STA)将WiFi操作模式设置为站,软AP或站 软AP,默认模式为软AP模式。

esp_wifi_set_config设置ESP32 STA或AP的配置。

最后通过esp_wifi_start()根据当前配置启动WiFi,

并通过 esp_wifi_set_ps(DEFAULT_PS_MODE);设置当前节电类型。

  这种设定是调用函数esp_wifi_set_mode()进行设定的,wifi_mode_t 其可具有 WIFI_MODE_NULL,WIFI_MODE_STA,WIFI_MODE_AP 或 WIFI_MODE_APSTA的值。

esp_err_t esp_wifi_set_config(wifi_interface_t ifx, wifi_config_t *conf);

PART4:

  我们可以调用 esp_wifi_get_mode()来检索我们目前的模式。

esp_err_t``esp_wifi_get_mode(wifi_mode_t*mode)

APP_main函数

void app_main()
{
    // Initialize NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK( ret );

    wifi_power_save();
}

 app_main函数主要是对NVS完成基本的初始化操作(关于NVS,可以在ESP32汇总中进行详细了解),保证数据的缓存空间,然后调用 wifi_power_save();函数完成WIFI设置。

 

扫描接入点

获取当前的工作模式

PART5:

  如果ESP32将要执行一个电台的角色,我们将需要连接到一个切入点。 我们可以要求列出我们可以使用的可用接入点尝试连接。 我们该用 esp_wifi_scan_start() 函数来 完成 。

esp_err_t``esp_wifi_start(void)

实验现象

   程序烧写完成后,打开minicom,可以看到如下的打印信息

betway必威官方网站 3

打开windows的cmd(这里笔记本和ESP32接入的是同一个AP),对AP分配的ESP32的IP进行ping操作,观察能否PING通。操作结果如下:

betway必威官方网站 4

至此,基于省电模式的WIFI链接就设计完成了。

 

  WiFi扫描的结果存储在ESP32分配的动态存储器内部y,当我们调用 esp_wifi_scan_get_ap_records() 时,数据返回到我们 这也释放内部y分配的存储。我们称之为破坏性阅读。

依据当前的设置开始WIFI连接;

PART6:编程详情

   

   一旦ESP32已经设置了站点配置细节,其中包括SSID和password,我们准备好连接到目标访问点后。 功能 esp_wifi_connect() 将形成的连接。你连接了后ESP32中的任何内容都不会阻塞,同样也不会影响到这个功能。

    在一段时间以后,当其实际的连接起来后,我们会看到两个回调事件发生, 首先是 SYSTEM_EVENT_STA_CONNECTED 表明我们有连接到接入点。 第二个事件是 SYSTEM_EVENT_STA_GOT_IP 其表示我们已经被DHCP服务器分配了一个IP地址。只有这样我们才能真正参与通讯。如果我们正在使用静态IP地址,那么我们只会看到连接的事件。

   我们从接入点断开连接时,我们将看到一个SYSTEM_EVENT_STA_DISCONNECTED 事件。从先前连接的 断开接入点我们调用esp_wifi_disconnect()完成,

    关于与接入点连接的进一步考虑是自动连接的想法。 有一个布尔标志存储在闪存中指示ESP32是否应尝试自动连接到最后一个使用的接入点。 如果设置为true,那么之后在设备启动后,你无需调用任何API函数,它将尝试连接到最后使用的接入点。  这是一个

方便选项,但是我更喜欢关闭。 通常我想在我的设备中进行控制来确定是否自动连接,是否自动连接,我们可以通过调用esp_wifi_set_auto_connect()。

    另外,当我们连接到接入点时,我们的设备正在成为一个station。 连接到接入点AP不是自动的,意味着我们现在有一个IP地址。 我们坚持必须从DHCP服务器请求已建立的IP地址。 这可能需要几秒。在某些情况下,我们可以让设备请求特定的IP。 这可以更快的连接时间。 如果我们指定数据,我们也需要提供DNS信息,如果我们需要连接到DNS服务器的名字解析度。

这是分配给我们一个特定IP地址的逻辑片段:
#include <lwip / sockets.h>

//我们希望我们的设备拥有的IP地址。
#define DEVICE_IP“192.168.1.99”

//我们希望发送数据包的网关地址
//这通常是我们的接入点。
的#define DEVICE_GW “192.168.1 1”

//网络掩码规范。
#define DEVICE_NETMASK“255.255.255.0”

//我们希望连接的接入点的身份。
#define AP_TARGET_SSID“RASPI3”

//我们需要提供给接入点进行授权的密码。
#define AP_TARGET_PASSWORD“password”



esp_err_t wifiEventHandler(void * ctx,system_event_t * event)
{
返回ESP_OK;
}


//代码片段在这里...
nvs_flash_init();
tcpip_adapter_init();

tcpip_adap ter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
tcpip_adapter_ip_info_t ipInfo;

inet_pton(AF_INET,DEVICE_IP,&ipInfo.ip);
inet_pton(AF_INET,DEVICE_GW,&ipInfo.gw);
inet_pton(AF_INET,DEVICE_NETMASK,&ipInfo.netmask);
tcpip_ada pter_set_ip_info(TCPIP_ADAPTER_IF_STA,&ipInfo);

ESP_ERROR_CHECK(esp_event_loop_init(wifiEventHandler,NULL));
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_ST ORAGE_RAM));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
wifi_config_t sta_config = {
.sta = {
.ssid = AP_TARGET_SSID,
.password = AP_TARGET_PASSWORD,
.bssid_set = 0
}
};
ESP_ERROR_CHECK(esp_wifi_set_config(WI FI_IF_STA,&sta_config));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_ERROR_CHECK(esp_wifi_connect());

 

 

 

 

作为接入点AP

    到目前为止,我们只将ESP32作为了接入接入点的WiFi站

    但它也具有作为一个接入点使其他WiFi设备(站)连接的能力 。为了成为一个接入点,我们需要定义允许其他的SSID设备来区分我们的网络。 这个SSID可以被标记为为hidden, 如果我们不希望它在扫描中找到。 另外我们还要提供认证方式当台站希望与我们联系时,将使用该功能。 这是用来允许

的,实际的将ES32实例作为接入点AP请看下一篇文章

  扫描记录包含在包含 wifi_ap_record_t 结构 的一个实例 如下:

esp_err_t``esp_wifi_stop(void)

ESP32作为接入点AP

        

uint8_t bssid[6]
uint8_t ssid[32]
uint8_t primary
wifi_second_chan_t second
int8_t rssi
wifi_auth_mode_t authmode

停止wifi并且释放资源;

相关知识:wifi相关的API接口

 

该 wifi_auth_mode_t 是以下选项中的一个:

esp_err_t``esp_wifi_restore(void)

•               WIFI_AUTH_OPEN - 没有安全性。

将WIFI设置回复默认值;

•               WIFI_AUTH_WEP - WEP安全性。

esp_err_t``esp_wifi_connect(void)

•               WIFI_AUTH_WPA_PSK - WPA安全性。

连接ESP32 WIFI到热点AP;

•               WIFI_AUTH_WPA2_PSK - WPA2安全。

betway必威官方网站,esp_err_t``esp_wifi_disconnect(void)

•               WIFI_AUTH_WPA_WPA2_PSK - WPA或WPA2安全性。

断开ESP32 WIFI的热点;

在发出开始执行扫描的请求后,我们将被通知扫描。

esp_err_t``esp_wifi_scan_start(constwifi_scan_config_t*config, boolblock)

当 SYSTEM_EVENT_SCAN_DONE 事件发布 完成 。 

扫描所有可能的AP热点;

事件数据包含找到的接入点的数量,我们可以通过调用esp_wifi_scan_get_ap_num()来得到。

esp_err_t``esp_wifi_scan_stop(void)

我们希望在完成扫描之前自行取消扫描,我们可以调用esp_wifi_scan_stop()。

停止扫描WIFI AP热点;

    下面我们是一个完整的WIFI_SCAN的例子,通常,我们在事件处理程序中执行工作,当我们检测到扫描完成事件时,我们检索定位的接入点并记录其详细信息。

esp_err_t``esp_wifi_scan_get_ap_num(uint16_t *number)

 

扫描得到附近热点的数量

  1 #include "freertos/FreeRTOS.h"
  2 #include "freertos/task.h"
  3 #include "freertos/event_groups.h"
  4 #include "esp_wifi.h"
  5 #include "esp_system.h"
  6 #include "esp_event.h"
  7 #include "esp_event_loop.h"
  8 #include "esp_log.h"
  9 #include "nvs_flash.h"
 10 
 11 
 12 static EventGroupHandle_t wifi_event_group;//定义一个事件的句柄
 13 const int SCAN_DONE_BIT = BIT0;//定义事件,占用事件变量的第0位,最多可以定义32个事件。
 14 static wifi_scan_config_t scanConf  = {
 15     .ssid = NULL,
 16     .bssid = NULL,
 17     .channel = 0,
 18     .show_hidden = 1
 19 };//定义scanConf结构体,供函数esp_wifi_scan_start调用
 20 
 21 static const char *TAG = "example";
 22 
 23 esp_err_t event_handler(void *ctx, system_event_t *event)
 24 {
 25     if (event->event_id == SYSTEM_EVENT_SCAN_DONE) {
 26         xEventGroupSetBits(wifi_event_group, SCAN_DONE_BIT);        //设置事件位
 27     }
 28     return ESP_OK;
 29 }
 30 
 31 static void initialise_wifi(void)        //define a static function ,it's scope is this file
 32 {
 33     wifi_event_group = xEventGroupCreate();    //创建一个事件标志组
 34     ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));//创建事件的任务
 35     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();//设置默认的wifi栈参数
 36     ESP_ERROR_CHECK(esp_wifi_init(&cfg));    //初始化WiFi Alloc资源为WiFi驱动,如WiFi控制结构,RX / TX缓冲区,WiFi NVS结构等,此WiFi也启动WiFi任务。
 37     ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));// Set the WiFi API configuration storage type
 38     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));//Set the WiFi operating mode
 39     ESP_ERROR_CHECK(esp_wifi_start());
 40     /*
 41     *           If mode is WIFI_MODE_STA, it create station control block and start station
 42     *          If mode is WIFI_MODE_AP, it create soft-AP control block and start soft-AP
 43     *          If mode is WIFI_MODE_APSTA, it create soft-AP and station control block and start soft-AP and station
 44      */
 45 }
 46 
 47 static void scan_task(void *pvParameters)
 48 {
 49     while(1) {
 50         xEventGroupWaitBits(wifi_event_group, SCAN_DONE_BIT, 0, 1, portMAX_DELAY);    //等待事件被置位,即等待扫描完成
 51         ESP_LOGI(TAG, "WIFI scan doen");
 52         xEventGroupClearBits(wifi_event_group, SCAN_DONE_BIT);//清除事件标志位
 53 
 54         uint16_t apCount = 0;
 55         esp_wifi_scan_get_ap_num(&apCount);//Get number of APs found in last scan
 56         printf("Number of access points found: %dn", apCount);
 57         if (apCount == 0) {
 58             ESP_LOGI(TAG, "Nothing AP found");
 59             return;
 60         }//如果apCount没有受到数据,则说明没有路由器
 61         wifi_ap_record_t *list = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) * apCount);//定义一个wifi_ap_record_t的结构体的链表空间
 62         ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&apCount, list));//获取上次扫描中找到的AP列表。
 63         int i;
 64         printf("======================================================================n");
 65         printf("             SSID             |    RSSI    |           AUTH           n");
 66         printf("======================================================================n");
 67         for (i=0; i<apCount; i  ) {
 68             char *authmode;
 69             switch(list[i].authmode) {
 70             case WIFI_AUTH_OPEN:
 71                authmode = "WIFI_AUTH_OPEN";
 72                break;
 73             case WIFI_AUTH_WEP:
 74                authmode = "WIFI_AUTH_WEP";
 75                break;           
 76             case WIFI_AUTH_WPA_PSK:
 77                authmode = "WIFI_AUTH_WPA_PSK";
 78                break;           
 79             case WIFI_AUTH_WPA2_PSK:
 80                authmode = "WIFI_AUTH_WPA2_PSK";
 81                break;           
 82             case WIFI_AUTH_WPA_WPA2_PSK:
 83                authmode = "WIFI_AUTH_WPA_WPA2_PSK";
 84                break;
 85             default:
 86                authmode = "Unknown";
 87                break;
 88             }
 89             printf("&.26s    |    % 4d    |    ".22sn",list[i].ssid, list[i].rssi, authmode);
 90         }//将链表的数据信息打印出来
 91         free(list);//释放链表
 92         printf("nn");//换行
 93 
 94         // scan again
 95         vTaskDelay(2000 / portTICK_PERIOD_MS);//调用延时函数,再次扫描
 96         //The true parameter cause the function to block until the scan is done.
 97         ESP_ERROR_CHECK(esp_wifi_scan_start(&scanConf, 1));//扫描所有可用的AP。
 98     }
 99 
100 
101 }
102 
103 int app_main(void)
104 {
105     nvs_flash_init();//初始化NVS flash storage
106     tcpip_adapter_init();//初始化i本机TCP/IP协议
107     initialise_wifi();//初始化wifi
108 
109     xTaskCreate(&scan_task, "scan_task", 2048, NULL, 15, NULL);//创建扫描任务
110 
111     ESP_ERROR_CHECK(esp_wifi_scan_start(&scanConf, 1));    //The true parameter cause the function to block until
112                                                               //the scan is done.
113     return 0;
114 }

 程序运行结果如下

      betway必威官方网站 5

 

 

 

 

处理WiFi事件

   在作为WiFi设备运行的过程中,ESP32可能会发生某些事件需要知道。 这些可能对应用程序的运行很重要,我们知道不能让我们的应用程序块等待他们发​​生,因为我们不知道什么时候事情会发生,以及事件是否会发生。因此,我们应该定义一个回归函数,如果事件发生的话就被调用,该函数就是上例中的esp_event_loop_init(), 它注册一个功能当ESP32检测到某些类型的WiFi相关事件时调用。该回调函数被调用并传递一个丰富的数据结构,其中包括事件的类型和对应于该事件的关联数据。 

    导致回调发生的事件类型:

•               我们连接到接入点

•               我们 从一个接入点 断开连接

•               授权模式已更改

•               当我们处于接入点模式时,与我们连接的一个站点

•               当我们处于接入点模式时,站与我们断开连接

•               SSID扫描完成

    当ESP32 WiFi环境运行时,它会在某些情况下发布“事件”发生WiFi级别,例如新站连接。 我们可以注册一个回调发布事件时调用的函数。 

    回调识别函数是:

esp_err_t eventHandler(void *ctx, system_event_t *event) {
   // Handle event here ...
   return ESP_OK;
}

    通常我们需要include下面.h文件

•               #include <esp_event.h>

•               #include <esp_event_loop.h>

•               #include <esp_wifi.h>

•               #include <esp_err.h>

要注册回调函数,我们调用:esp_event_loop_init(eventHandler,NULL);

如果我们希望随后更改与我们的WiFi处理相关联的事件处理程序我们可以

             esp_event_loop_set_cb(eventHandler,NULL);

当事件处理程序被调用时,事件参数将被填充事件。

此参数的数据类型是一个“system_event_t”,让我们现在看看传递给system_event_t中的事件处理程序的两个属性数据结构,其中包含:

system_event_id_t event_id
system_event_info_t event_info

这里event_id描述检测事件的种类,同时event_info包含基于在 event_id标识的类型事件的具体细节 。

•               EVENT_ID - 一个枚举类型,有下列潜在价值:

    ◦ SYSTEM_EVENT_WIFI_READY - ESP32的WiFi我 已经准备好。

    ◦ SYSTEM_EVENT_SCAN_DONE - 接入点扫描完毕。 该scan_done 数据字段是有效的访问。

    ◦  SYSTEM_EVENT_STA_START - 作为一个station开始。

    ◦  SYSTEM_EVENT_STA_STOP - 停止作为一个station。

    ◦  SYSTEM_EVENT_STA_CONNECTED - 连接到的接入点作为站。所连接的数据字段是有效的,可以进行访问。

      ◦  SYSTEM_EVENT_STA_DISCONNECTED - 从ACCESS点作为一个站断开连接,断开连接的数据字段是可以有效的访问的。

    ◦SYSTEM_EVENT_STA_AUTHMODE_CHANGE - 身份验证模式已经改变。该auth_change 数据字段是可以有效的访问的。

    ◦SYSTEM_EVENT_STA_GOT_IP - 得到了 来自接入 分配的 IP地址指向我们连接到一个站点。 该 got_ip 数据字段是可以有效访问的。

    ◦  SYSTEM_EVENT_AP_START - 开始作为接入点。

本文由betway必威发布于编程开发,转载请注明出处:【betway必威官方网站】由此wifi_scan学习esp32wifi程

TAG标签: betway必威
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。