ESP系列的smartconfig配置模块WIFI很方便,说说如何配置和重启后自动重连。
#include <WiFi.h>
简单配置:
void SmartConfig()
{
WiFi.mode(WIFI_AP_STA);
Serial.println("WIFI Wait for Smartconfig");
WiFi.beginSmartConfig();
while (1)
{
Serial.print(".");
if (WiFi.smartConfigDone())
{
Serial.println("WIFI SmartConfig Success");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
Serial.print("LocalIP:");
Serial.print(WiFi.localIP());
Serial.print(" ,GateIP:");
Serial.println(WiFi.gatewayIP());
WiFi.setAutoConnect(true); // 设置自动连接
break;
}
delay(1000);
}
}
自动重连:
bool AutoConfig()
{
WiFi.begin();
for (int i = 0; i < 20; i++)
{
int wstatus = WiFi.status();
if (wstatus == WL_CONNECTED)
{
Serial.println("WIFI SmartConfig Success");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.printf(", PSW:%s\r\n", WiFi.psk().c_str());
Serial.print("LocalIP:");
Serial.print(WiFi.localIP());
Serial.print(" ,GateIP:");
Serial.println(WiFi.gatewayIP());
return true;
}
else
{
Serial.print("WIFI AutoConfig Waiting......");
Serial.println(wstatus);
delay(1000);
}
}
Serial.println("WIFI AutoConfig Faild!" );
return false;
}
在setup( )函数中启用:
void setup() {
Serial.begin(115200);
delay(100);
if (!AutoConfig())
{
SmartConfig();
}
}
WiFi 的配置默认是会存储在 NVS 的,具体参看 esp_wifi_set_storage 的 API 介绍,如果希望不存储,可以调用该接口,参数为 WIFI_STORAGE_RAM。
有以下两种方式清除参数:
- 如果想清除 NVS 中的数据,可以用命令 make erase_flash 做整片擦除。
- 如果想在应用中清除 WiFi 配置,如通过按键触发恢复参数,可调用 esp_wifi_restore 接口,会清除相关 WiFi 配置,具体请看 API 介绍。
1、使用esptool.py工具 将Flash整片擦除。
python esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash
2、将WiFi堆栈永久设置恢复为默认值。
#include <esp_wifi.h>
esp_err_t esp_wifi_restore(void)
此功能将重置使用以下API进行的设置:
- esp_wifi_get_auto_connect
- esp_wifi_set_protocol
- esp_wifi_set_config
- esp_wifi_set_mode
返回
- ESP_OK:成功 ESP_ERR_WIFI_NOT_INIT:
- esp_wifi_init未初始化WiFi