EPS32实现WIFI自动重连的两种方法

一:定时检查连接

要在连接丢失后重新连接到 Wi-Fi,您可以使用 WiFi.reconnect() 尝试重新连接到之前连接的接入点:

WiFi.reconnect()

或者,您可以使用 WiFi.disconnect() WiFi.begin(ssid,password).

WiFi.disconnect();//断开连接
WiFi.begin(ssid, password);//重新连接

或者,您也可以尝试使用以下命令重新启动 ESP32 ESP.restart() 当连接丢失时。
您可以将类似于下面的代码段的内容添加到 loop() 定时时检查电路板是否已连接,并在失去连接时尝试重新连接。

unsigned long currentMillis = millis();
// 定时检查WIFI是否连接,如果无连接则重连
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
  Serial.print(millis());
  Serial.println("Reconnecting to WiFi...");
  WiFi.disconnect();
  WiFi.reconnect();
  previousMillis = currentMillis;
}

完整示例:

#include <WiFi.h>

// Replace with your network credentials (STATION)
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

unsigned long previousMillis = 0;
unsigned long interval = 30000;

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  initWiFi();
  Serial.print("RRSI: ");
  Serial.println(WiFi.RSSI());
}

void loop() {
  unsigned long currentMillis = millis();
  // 定时重连
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.reconnect();
    previousMillis = currentMillis;
  }
}

二:WIFI事件自动连接

ESP32 能够处理不同的 Wi-Fi 事件。使用 Wi-Fi 事件,您无需经常检查 Wi-Fi 状态。当某个事件发生时,它会自动调用相应的处理函数。

SYSTEM_EVENT_STA_CONNECTED:ESP32 以站模式连接到接入点/热点(您的路由器);
SYSTEM_EVENT_STA_DISCONNECTED:ESP32 站与接入点断开连接。

转到下一部分以查看应用示例。
失去连接后重新连接到 Wi-Fi 网络(Wi-Fi 事件)
Wi-Fi 事件可用于检测连接丢失并在之后立即尝试重新连接(使用SYSTEM_EVENT_AP_STADISCONNECTED事件)。这是一个示例代码:

#include <WiFi.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

//连接事件
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Connected to AP successfully!");
}

//获取IP事件
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

//断开连接事件
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
  Serial.println("Disconnected from WiFi access point");
  Serial.print("WiFi lost connection. Reason: ");
  Serial.println(info.disconnected.reason);
  Serial.println("Trying to Reconnect");

联系我们

扫码或者点这里加群了解更多!
在这里插入图片描述
敲门板砖:‘齐护’
Created by qdprobot

### Arduino ESP32 连接到 WiFi方法 以下是关于如何使用 Arduino ESP32 单片机连接到 WiFi 网络的详细说明以及示例代码。 #### 一、准备工作 为了使 ESP32 能够正常工作并连接至 WiFi,需完成以下准备事项: - 安装适用于 ESP32 的开发环境。可以通过添加开发板管理地址来实现此操作[^2]。 - 使用 `WiFi` 库中的函数进行网络配置和状态监控。 #### 二、示例代码解析 下面提供了一个完整的示例程序用于展示 ESP32 如何自动配置 WiFi 功能: ```cpp #include "WiFi.h" void setup() { // 初始化串口通信 Serial.begin(9600); // 设置 Wi-Fi 模式为 AP 和 Station 同时启用 WiFi.mode(WIFI_AP_STA); // 开始智能配置过程 WiFi.beginSmartConfig(); Serial.println("等待 SmartConfig 配置..."); // 循环检测直到 SmartConfig 配置完成 while (!WiFi.smartConfigDone()) { delay(500); Serial.print("."); } Serial.println("\nSmartConfig 已接收."); Serial.println("正在尝试连接到 Wi-Fi..."); // 等待设备成功连接到指定的 Wi-Fi 热点 while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWi-Fi 已连接!"); Serial.print("本地 IP 地址: "); Serial.println(WiFi.localIP()); } void loop() { // 主循环为空,无需额外逻辑处理 } ``` 上述代码实现了以下几个主要功能: 1. **初始化串口**:设置波特率为 9600bps,以便于调试信息输出。 2. **设定 Wi-Fi 模式**:调用 `WiFi.mode()` 函数将模式设为同时支持接入点(AP)与客户端(STA),从而允许其他设备向其发送配置数据[^1]。 3. **启动 SmartConfig 流程**:利用 `beginSmartConfig()` 方法开启智能化无线网参数传递机制;随后不断轮询直至确认收到有效配置为止。 4. **建立实际链接**:持续监测当前联网状况 (`WiFi.status()`) ,一旦发现已连上目标热点,则打印对应分配给本装置之内部局域网 IPv4 数字表示形式。 #### 三、注意事项 - 如果遇到无法顺利完成 smart config 的情况,请确保手机或其他工具正确广播加密密钥等相关资料包。 - 对于某些特殊场景下可能还需要手动输入 SSID 及密码替代自动化流程部分。 #### 四、扩展应用方向 当基本的 WiFi 接入完成后,可以进一步探索更多高级特性比如 MQTT 协议通讯等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值