项目场景
硬件:ESP32-LyraT-Mini V1.2开发板,使用的是ESP32-WROVER-E 模组。
程序:基于smart_config示例程序测试
问题描述
烧录程序后,debug打印“smartconfig_example: Scan done”信息后,打开手机app“EspTouch”进行配网,如果密码输入正确,正常的debug信息如下:
从程序上看,配网成功后,开发板联网成功后会注销smartconfig
任务,因此无法重复配网,需重启开发板。后续根据实际应用需求再考虑做调整。
重启开发板,再次进行配网,密码输入错误,点击确认进行配网,则ESP32程序会进入一个循环(等待了近5分钟),debug信息如下图所示:
当密码错误程序进入上述循环后,此时用“EspTouch”再次进行配网时也无反应,无任何相关信息打印。
原因分析
wifi封装底层密码错误时会一直尝试连接,而程序应用层面上没有针对wifi连接超时的处理。
解决方案:
通过调整程序逻辑和流程,在应用层面上实现对wifi联网超时的处理。
原先程序流程:
从“EspTouch”app获取wifi名称和密码后,程序会产生SC_EVENT_GOT_SSID_PSWD
事件,断开wifi连接esp_wifi_disconnect
,重新配置wifi名称和密码esp_wifi_set_config
,调用esp_wifi_connect
启动wifi连接。
修改程序流程:
增加变量用于标记状态。
增加一个EspTouch事件标志位:ESPTOUCH_FAIL_BIT
static const int CONNECTED_BIT = BIT0;
static const int ESPTOUCH_DONE_BIT = BIT1;
static const int ESPTOUCH_FAIL_BIT = BIT2;
static int wifiConnectedflg=0; // =0 已连接;=1 未连接
static int truepassword=0;// 如果wifi密码正确可以连接成功则truepassword=1,否则truepassword=0表示密码异常,此时断开wifi后不再进行重连
增加计时器,从“EspTouch”app获取wifi名称和密码后,断开wifi连接,重新配置wifi后,启动计时器(1s中断),启动wifi连接。
如果密码正确则wifi可以连接成功wifiConnectedflg=1
计时器中断时判断是否wifi连接成功,如果连接成功则停止计时器,删除计时器;如果20s后wifi依旧没有连接成功停止计时器,但不删除计时器,设置wifi事件组内"ESPTOUCH配网失败"标志位
smartconfig_example_task
中增加对配网失败标志位(ESPTOUCH_FAIL_BIT
)的判断,如果配网失败则停止smartconfig
,再重新启动smartconfig
修改后debug信息:
错误密码无法联网,重新设置正确密码,联网成功
源码链接:https://download.csdn.net/download/u013534357/89744047
欢迎关注并留言
🌹==欢迎关注、订阅、收藏专辑《ESP32从0到1》==🌹