#include <ESP8266WiFi.h> #include <ESP8266httpUpdate.h> #include <Ticker.h> /******需要修改的地方****************/ #define wifi_name "GT-2G" //WIFI名称,区分大小写,不要写错 #define wifi_password "gt#@10000" //WIFI密码 String upUrl = "http://192.168.0.138:6501/file/test.bin"; /**********************************/ Ticker wdtTicker; void hardwareWatchdog() { ESP.wdtFeed(); // 喂狗 } /** * 主函数 */ void setup() { ESP.wdtEnable(8000); // 8秒看门狗 wdtTicker.attach_ms(5000, hardwareWatchdog); Serial.begin(9600); Serial.println(""); Serial.println("MCU RUN"); // 再输出信息 WiFi.begin(wifi_name, wifi_password); //连接wifi // 增加WiFi连接超时处理 int wifiRetry = 0; while (WiFi.status() != WL_CONNECTED && wifiRetry < 15) { delay(500); Serial.print("."); wifiRetry++; } if (WiFi.status() != WL_CONNECTED) { Serial.println("\nWiFi连接失败"); ESP.deepSleep(30e6); // 进入深度睡眠30秒后重试 return; } // 增加版本号校验 Serial.print("当前版本:"); Serial.println(ESP.getSketchMD5()); Serial.println("start update,version:1.3"); updateBin(); //开始升级 } /** * 循环函数 */ void loop() { } /** * 固件升级函数 */ void updateBin(){ // 增加升级前校验 ESPhttpUpdate.rebootOnUpdate(false); // 禁用自动重启 // 增加升级失败重试机制 for(int i=0; i<3; i++){ WiFiClient UpdateClient; t_httpUpdate_return ret = ESPhttpUpdate.update(UpdateClient, upUrl); switch(ret) { case HTTP_UPDATE_FAILED: Serial.printf("升级失败原因: %s\n", ESPhttpUpdate.getLastErrorString().c_str()); delay(5000); break; case HTTP_UPDATE_NO_UPDATES: Serial.println("无可用更新"); return; case HTTP_UPDATE_OK: Serial.println("升级成功,即将重启"); delay(1000); ESP.restart(); return; } } }