一、報錯?
報錯信息如下:
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)觸發重啟。
問題分析:
- 純空循環會占用全部CPU資源
- 沒有給系統處理網絡事件的時間
- 看門狗定時器會因此觸發硬件復位
void setup() {.........省略部份代碼while (WiFi.status() != WL_CONNECTED) {}.........省略部份代碼}
三、解決辦法
- 必須加入延時函數讓出CPU時間
- 建議設置超時機制
- 最好添加重連計數和狀態顯示
修正后的代碼如下:?
void setup() {.........省略部份代碼while (WiFi.status() != WL_CONNECTED) {delay(500);?????????????????????????// 關鍵延時!Serial.print(".");}.........省略部份代碼}