WIFI原因造成ESP8266不断重启的解决办法

一、报错

报错信息如下:

bash 复制代码
21:37:21.799 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,7)
21:37:21.799 -> 
21:37:21.799 -> load 0x4010f000, len 3424, room 16 
21:37:21.799 -> tail 0
21:37:21.799 -> chksum 0x2e
21:37:21.799 -> load 0x3fff20b8, len 40, room 8 
21:37:21.799 -> tail 0
21:37:21.799 -> chksum 0x2b
21:37:21.799 -> csum 0x2b
21:37:21.799 -> v00043720
21:37:21.799 -> ~ld

二、成因

由于ESP8266在WiFi连接循环中没有加入适当的延时或处理机制,导致看门狗定时器(WDT)触发重启。

问题分析:
  1. 纯空循环会占用全部CPU资源
  2. 没有给系统处理网络事件的时间
  3. 看门狗定时器会因此触发硬件复位
cpp 复制代码
void setup() {

    .........省略部份代码


    
    while (WiFi.status() != WL_CONNECTED) {

    }



    .........省略部份代码

}

三、解决办法

  1. 必须加入延时函数让出CPU时间
  2. 建议设置超时机制
  3. 最好添加重连计数和状态显示

修正后的代码如下:

cpp 复制代码
void setup() {

    .........省略部份代码



    while (WiFi.status() != WL_CONNECTED) {

        delay(500);                         // 关键延时!
        Serial.print(".");

    }



    .........省略部份代码

}