Arduino-Esp8266 OTA升级

 

复制代码
#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;
    }
  }
}
复制代码

 

posted @   CHHC  阅读(4)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示