法律网站建设实施方案,适合30岁女人的培训班,网站建设服务承诺,搬家公司收费价格表目录
背景知识
wifi的基本连接使用
WiFi篇—— WiFi两种模式文章中二、WiFi 的启动#xff08;STA 及 AP 模式#xff09;
输出现象
通过websocket控制LED
实践验证
实验现象 背景知识
WIFI是ESP32非常重要的一个功能#xff0c;想要使用一下IDF的API实现将ESP32连…目录
背景知识
wifi的基本连接使用
WiFi篇—— WiFi两种模式文章中二、WiFi 的启动STA 及 AP 模式
输出现象
通过websocket控制LED
实践验证
实验现象 背景知识
WIFI是ESP32非常重要的一个功能想要使用一下IDF的API实现将ESP32连接到AP节点中正好idf的example中有提供一个叫做fast scan的demo。在此之前可以阅读一下下面这篇文章ESP32 WIFI的背景知识介绍的非常详细并且提供了一些参考代码可以进行学习一下
WiFi两种模式 wifi的基本连接使用
WiFi篇—— WiFi两种模式文章中二、WiFi 的启动STA 及 AP 模式
文章的这个小节对STA模式的连接过程及API调用有很详细的描述而在demo中也正如文章所描述的一致。 #include freertos/FreeRTOS.h
#include freertos/event_groups.h
#include esp_wifi.h
#include esp_log.h
#include esp_event.h
#include nvs_flash.h// ......
//以上这一堆是通过Kconfig进行配置的参数包括设置需要连接AP的名称密码以及信号强度。static const char *TAG scan;static void event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data)
{if (event_base WIFI_EVENT event_id WIFI_EVENT_STA_START) {esp_wifi_connect();} else if (event_base WIFI_EVENT event_id WIFI_EVENT_STA_DISCONNECTED) {esp_wifi_connect();} else if (event_base IP_EVENT event_id IP_EVENT_STA_GOT_IP) {ip_event_got_ip_t* event (ip_event_got_ip_t*) event_data;ESP_LOGI(TAG, got ip: IPSTR, IP2STR(event-ip_info.ip));}
}/* Initialize Wi-Fi as sta and set scan method */
static void fast_scan(void)
{ESP_ERROR_CHECK(esp_netif_init());ESP_ERROR_CHECK(esp_event_loop_create_default());wifi_init_config_t cfg WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(cfg));ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, event_handler, NULL, NULL));ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, event_handler, NULL, NULL));// Initialize default station as network interface instance (esp-netif)esp_netif_t *sta_netif esp_netif_create_default_wifi_sta();assert(sta_netif);// Initialize and start WiFiwifi_config_t wifi_config {.sta {.ssid DEFAULT_SSID,.password DEFAULT_PWD,.scan_method DEFAULT_SCAN_METHOD,.sort_method DEFAULT_SORT_METHOD,.threshold.rssi DEFAULT_RSSI,.threshold.authmode DEFAULT_AUTHMODE,},};ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, wifi_config));ESP_ERROR_CHECK(esp_wifi_start());
}void app_main(void)
{// Initialize NVSesp_err_t ret nvs_flash_init();if (ret ESP_ERR_NVS_NO_FREE_PAGES || ret ESP_ERR_NVS_NEW_VERSION_FOUND) {ESP_ERROR_CHECK(nvs_flash_erase());ret nvs_flash_init();}ESP_ERROR_CHECK( ret );fast_scan();
}其中调用nvs_flash_init和esp_netif_init进行初始化是为了设置和配置与网络相关的两个重要组件NVSNon-Volatile Storage和网络接口esp_netifnvs_flash是ESP32中用于非易失性存储的组件我以为初始化它是为了后面保存wifi的配置信息但是我屏蔽这段esp_wifi_init初始化会提示错误 应该是有一些初始化参数还是存在NVS中也有可能是NVS的使能导致的所以避免出错还是要按照demo中的流程进行配置。 输出现象
这里设置了RSSI的阈值如果小于设定值那么wifi连接会失败 通过websocket控制LED
通过网页控制LED灯的亮灭一般的ESP32开发板都可以实现下面这篇文章是国外开发者提供的一个通过websocket控制LED的实例 文章对如何实现有非常详细的描述但是需要魔法才能访问如下连接
esp32-esp-idf-websocket-web-server
对应的工程源码在github可以找到
ESP32-ESP-IDF-WebSocket-Web-Server 实践验证
我这里是在ubuntu 22.04中使用了v5.1.1-dirty的idf版本进行编译由于idf版本的问题我这里需要将main.c中修改下面的接口为gpio_reset_pin 其次我这里根据我使用的ESP32修改了csv文件,需要的可以参考一下: # Name, Type, SubType, Offset, Size, Flags # Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild nvs, data, nvs, , 0x6000, phy_init, data, phy, , 0x1000, factory, app, factory, , 0x100000, storage, data, spiffs, , 0x80000, 实验现象
获得ESP32的wifi ip 通过浏览器访问该ip点击按键可以观察到led的亮灭状态 小结
使用ESP32 IDF还是需要一些背景知识比如说最基本的编译和烧录还有menuconfig没接触过的可能还是会比较懵如果是这样那就得多花些时间去填充知识的盲区。