ESP32-WROOM-32E,WIFI基本功能实现,采坑经验

news/2024/11/16 10:28:07/

ESP32-WROOM-32E,WIFI基本功能实现,采坑经验

用的示例代码,路径 D:\esp-idf\examples\wifi\getting_started\station
看官网教程,路径https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/get-started/index.html#get-started-connect

问题

在这里插入图片描述
1、没有很好的解决。尝试过换其他工程的build.ninjia,用了会报错。
2、最后重新将代码拷贝的新的工程才解决。

问题

路由如果断开,WIFI不会自动重连

ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler));
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler));
vEventGroupDelete(s_wifi_event_group);

主要是上面一段程序,注销WIFI事件、注销后路由断开后再上线不会重连。屏蔽掉就好了。

问题

连上wifi同时,获取wifi信号强度
主要是参考–>链接:esp32 采集某个路由器信号强度.
加工变成自己的连上wif实时获取信号强度。应用的idf版本不同,其函数也会不同,如最新版本的wifi初始化过程就没有tcpip_adapter_init();对照找example修改一下就行。
程序如下:

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_event_loop.h"
#include "nvs_flash.h"#define DEFAULT_SCAN_LIST_SIZE CONFIG_EXAMPLE_SCAN_LIST_SIZE
#define EXAMPLE_ESP_WIFI_SSID      "esp32"
#define EXAMPLE_ESP_WIFI_PASS      "12345678"const int SCAN_DONE_BIT = BIT0;    
static EventGroupHandle_t wifi_event_group;static wifi_scan_config_t  wifi_config = {                                                                                    .ssid = (uint8_t*)"esp32",          .bssid = NULL,           };static esp_err_t event_handler(void *ctx, system_event_t *event)                                         
{switch(event->event_id) {case SYSTEM_EVENT_SCAN_DONE:got_scan_done_event = true;xEventGroupSetBits(wifi_event_group,SCAN_DONE_BIT);break;default:break;}return ESP_OK;}
static void init_wifi(void)
{tcpip_adapter_init();wifi_event_group = xEventGroupCreate();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 s_wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,.password = EXAMPLE_ESP_WIFI_PASS,  },};ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &s_wifi_config) );ESP_ERROR_CHECK(esp_wifi_start());esp_wifi_connect();vTaskDelay(5000 /portTICK_PERIOD_MS);//这边加延时是为了让wifi连接,//如果没有延时会程序会一直重启。最好写一个wifi连接上的判断。实例代码example都有.for(int i=0;i<30;i++){   ESP_ERROR_CHECK(esp_wifi_scan_start(&wifi_config,1));xEventGroupClearBits(wifi_event_group,SCAN_DONE_BIT);uint16_t apCount=0;esp_wifi_scan_get_ap_num(&apCount);                 printf("Nuber of access points found:%d\n",apCount);if(apCount==0){ESP_LOGI(TAG,"NOting ap found");return;}wifi_ap_record_t *list = (wifi_ap_record_t *)malloc(sizeof(wifi_ap_record_t) *apCount);ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&apCount,list));printf("signal:%4d\n",list[0].rssi);free(list);printf("\n\n");vTaskDelay(200 /portTICK_PERIOD_MS);  //延时200毫秒ESP_ERROR_CHECK(esp_wifi_scan_start(&wifi_config,1));}
}
void app_main()                                                                                          
{// 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 );init_wifi();
}

问题

ESP32的AP和STA共存。


http://www.ppmy.cn/news/892707.html

相关文章

platformio中arduino框架下esp32 flash信息修改问题

问题描述&#xff1a; 购买的esp32-wroom-32E的flash明明是16MB&#xff0c;但是为什么在烧录的时候只能显示1MB? 回答&#xff1a; 在platformio中选择板子的时候&#xff0c;给的模板默认是4MB的模板。4MB又会被分成5个区。下图是flash的一个分区表&#xff0c;用arduino…

ESP32 Arduino框架入门(二)外部中断和TouchPad(电容触摸引脚)

接ESP32 Arduino框架入门&#xff08;一&#xff09;介绍和工程创建(8条消息) ESP32 Arduino框架入门&#xff08;一&#xff09;介绍和工程创建_长谷深风灯盏的博客-CSDN博客_arduino的esp32软件系统架构 接下来继续介绍ESP32-Wroom-32E的外部引脚、中断、定时器等部分…

ESP32-WROOM-32E,MQTT报错mqtt_message_receive:transport_read() error:errno=128

ESP32-WROOM-32E,MQTT使用采坑经验之transport_read() error:errno128 配置MQTT的是 esp_mqtt_client_config_t 结构体&#xff0c;里面包含了MQTT的信息&#xff0c;可根据具体场景配置。 问题 使用MQTT建立连接后&#xff0c;不收发数据&#xff0c;每隔35秒会有如下报错&…

【Intel Parallel编译器(icc icpc ifort)Linux-centos7系统安装配置】

(toc) Intel Parallel编译器(icc icpc ifort)Linux系统安装配置 本篇文章主要讲解在linux系统centos7.5/centos7.9版本中&#xff0c;Intel编译器的安装、环境导入、并行库调用以及在不同centos版本中安装时缺少32位库的解决方案等内容。 一、★Intel编译器定义 Intel Paralle…

x64保护模式_IA-32e

IA-32e 内核x64位&#xff0c;内核是64位的&#xff0c;用户可以是64也可以是32位。但是内核一定是64位的。 强制平坦段&#xff0c;段基址必须是0&#xff0c;不支持TSS段切换了。把32位硬件不用的给删了。 MSR寄存器 这是x64独有的。 MSR寄存器c0000080如果位81&#xf…

【操作系统】X86架构的64位操作系统探索

背景 8086 系列芯片的成功带领英特尔 IA-32 指令集架构占据芯片市场的主导地位。20 世纪末&#xff0c;英特尔与惠普一同针对 64 位芯片展开研究&#xff0c;并推出 IA-64 指令集架构。然而&#xff0c;该架构与已经流行的 IA-32 架构不兼容&#xff0c;这导致它的发展受到阻碍…

启明云端分享|乐鑫ESP32-WROOM-32E和ESP32-WROOM-32UE两款模组的区别

提示&#xff1a;ESP32-WROOM-32E 和 ESP32-WROOM-32UE 是两款通用型 Wi-FiBTBLE MCU 模组&#xff0c;功能强大&#xff0c;用途广 泛&#xff0c;可以用于低功耗传感器网络和要求极高的任务&#xff0c;例如语音编码、音频流和 MP3 解码等。 这两款模组在应用中&#xff0c;有…

import错误:undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_32E

在使用DCN_V2时遇到了这个错误&#xff0c; 发现还是这个包没装好得原因&#xff0c;所以解决办法就是&#xff0c;cd进入这个包的文件夹 然后依次操作这两句 cd /root/data/snake-master/lib/csrc/extreme_utils rm -r build python setup.py develop 问题解决&#xff01;…