给公司做个网站多少钱,云南旅游网站建设公司,义乌免费做网站,排行榜123网ESP32-S3 WIFI_Driver
引言
ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分#xff0c;其实内容比我想象的要多得多。所以通常来说#xff0c;如果你想要编写自己的Wi-Fi应用程序#xff0c;最快捷的方法就是先找一个类似的示例应用#xff0c;然后将它的相…ESP32-S3 WIFI_Driver
引言
ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分其实内容比我想象的要多得多。所以通常来说如果你想要编写自己的Wi-Fi应用程序最快捷的方法就是先找一个类似的示例应用然后将它的相关部分搬移到你的项目中强烈建议在开始项目前先阅读ESP-IDF-Wi-Fi 驱动程序编程指南
ESP32-S3 Wi-Fi概述
ESP32-S3的Wi-Fi库提供了配置和监控ESP32-S3 Wi-Fi网络功能的支持。这包括以下配置
Station模式 (也称为STA模式或Wi-Fi客户端模式)ESP32-S3连接到一个接入点。AP模式 (也称为Soft-AP模式或接入点模式)站点连接到ESP32-S3。Station/AP共存模式 (ESP32-S3同时作为一个接入点和一个连接到另一个接入点的站点)。
ESP32-S3 Wi-Fi STA模式扫描 AP流程
初始化Wi-Fi、设置Wi-Fi模式、启动Wi-Fi 1. Wi-Fi/LwIP 初始化阶段 s1.1主任务通过调用函数 esp_netif_init() 创建一个 LwIP 核心任务并初始化 LwIP 相关工作。 s1.2主任务通过调用函数 esp_event_loop_create() 创建一个系统事件任务并初始化应用程序事件的回调函数。在此情况下该回调函数唯一的动作就是将事件中继到应用程序任务中。 s1.3主任务通过调用函数 esp_netif_create_default_wifi_ap() 或 esp_netif_create_default_wifi_sta() 创建有 TCP/IP 堆栈的默认网络接口实例绑定 station 或 AP。 s1.4主任务通过调用函数 esp_wifi_init() 创建 Wi-Fi 驱动程序任务并初始化 Wi-Fi 驱动程序。
2. Wi-Fi 配置阶段
Wi-Fi 驱动程序初始化成功后可以进入到配置阶段。该场景下Wi-Fi 驱动程序处于 station 模式。因此首先你需调用函数 esp_wifi_set_mode() (WIFI_MODE_STA) 将 Wi-Fi 模式配置为 station 模式。可通过调用其它 esp_wifi_set_xxx API 进行更多设置例如协议模式、国家代码、带宽等。
3. Wi-Fi 启动阶段
s3.1调用函数 esp_wifi_start() 启动 Wi-Fi 驱动程序。
配置扫描信息、获取扫描的AP数量和获取具体的AP信息 4. WIFI 扫描配置阶段 s1.1如果默认的国家信息有误调用函数 esp_wifi_set_country() 进行配置。请参阅 Wi-Fi 国家/地区代码。 s1.2调用函数 esp_wifi_scan_start() 配置扫描信息可参阅 扫描配置。该场景为全信道扫描将 SSID/BSSID/channel 设置为 0 即可。
5. 扫描完成后事件处理阶段
调用函数 esp_wifi_scan_get_ap_num() 获取在本次扫描中找到的 AP 数量。然后分配出足够的事物槽并调用函数 esp_wifi_scan_get_ap_records() 获取 AP 记录
ESP32-S3 Wi-Fi扫描程序
在ESP32-S3上进行Wi-Fi扫描的主要步骤包括初始化NVS存储、初始化Wi-Fi、设置Wi-Fi模式、启动Wi-Fi、配置扫描信息、获取扫描的AP数量和获取具体的AP信息。
#include stdio.h
#include string.h
#include esp_log.h
#include nvs_flash.h
#include esp_wifi.hvoid app_main(void)
{ESP_LOGI(WIFI, 0. 初始化NVS存储);ESP_ERROR_CHECK(nvs_flash_init()); // 对NVS默认的区域进行初始化ESP_LOGI(WIFI, 1. WIFI 初始化阶段);esp_netif_init(); // 1.1 创建一个 LwIP 核心任务esp_event_loop_create_default(); // 1.2 创建一个系统事件任务esp_netif_create_default_wifi_sta(); // 1.3.1 创建有 TCP/IP 堆栈的默认网络接口实例wifi_init_config_t wifi_config WIFI_INIT_CONFIG_DEFAULT();esp_wifi_init(wifi_config); // 1.3.2 创建 Wi-Fi 驱动程序任务ESP_LOGI(WIFI, 2. WIFI 配置阶段);esp_wifi_set_mode(WIFI_MODE_STA); // 2 将 Wi-Fi 模式配置为 stationESP_LOGI(WIFI, 3. WIFI 启动阶段);esp_wifi_start(); // 3.1 启动 Wi-Fi 驱动程序ESP_LOGI(WIFI, 4. WIFI 扫描);//在所有信道中扫描全部 AP前端wifi_country_t country_config {.cc CN,.schan 1,.nchan 13,};esp_wifi_set_country(country_config); // 4.1 扫描配置国家代码wifi_scan_config_t scan_config {.show_hidden true // 显示隐藏};esp_wifi_scan_start(scan_config,true); // 4.2 配置扫描信息 true表示当这个任务执行的时候回进入阻塞状态等待扫描//得到扫描的AP数量uint16_t ap_num 0;ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(ap_num)); ESP_LOGI(WIFI,AP Count : %d,ap_num);//获取具体的AP信息uint16_t max_aps20;wifi_ap_record_t ap_records[max_aps];memset(ap_records,0,sizeof(ap_records));uint16_t aps_count max_aps;ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(aps_count,ap_records));//打印信息ESP_LOGI(WIFI,AP Count: %d,aps_count);printf(%30s %3s %3s %3s\n,SSID,频道,强度,MAC地址);for(int i0;iaps_count;i){printf(%30s %4d %4d %02X-%02X-%02X-%02X-%02X-%02X\n, ap_records[i].ssid, ap_records[i].primary, ap_records[i].rssi, ap_records[i].bssid[0], ap_records[i].bssid[1], ap_records[i].bssid[2], ap_records[i].bssid[3], ap_records[i].bssid[4], ap_records[i].bssid[5]);}
}
效果如下
参考资料
ESP-IDF编程指南