esp8266 OTA遠程無線升級,巴法雲


第一步、編譯生成.bin升級固件

本教程需要用到 arduino IDE的esp8266開發環境,關於arduino IDE 的ESP8266環境配置可參考:環境配置: 點擊跳轉

如果已安裝好esp8266 開發環境,繼續:

使用arduino IDE軟件,打開隨便一個需要升級的程序,點擊「項目」-「導出已編譯的二進制文件」即可生成.bin固件,如下圖。

生成的固件在程序所在文件夾中如下圖所示:

第二步、上傳.bin固件到巴法雲

在巴法雲控制台 ,點擊跳轉,隨便新建個主題,例如 主題 light002,如下圖所示:

然后點擊OTA,如下圖所示:

進去后,點擊上傳固件,找到剛剛生成的固件上傳即可,上傳后復制固件鏈接,如下圖:

第三步、遠程升級

唯一的要求:等待升級的esp8266有網就行。

示例一:

最簡單測試版本:
程序流程講解:開機-->等待聯網-->成功聯網-->升級。
如下:

#include <ESP8266WiFi.h>
#include <ESP8266httpUpdate.h>


/******需要修改的地方****************/

#define wifi_name       "newhtc"     //WIFI名稱,區分大小寫,不要寫錯
#define wifi_password   "qq123456"   //WIFI密碼
                                     //固件鏈接,在巴法雲控制台復制、粘貼到這里即可
String upUrl = "http://bin.bemfa.com/b/3BcN2Q1NGY4NWFmNDI5NzZlZTNjMjY5M2U2OTJhNmJiNTk=light002.bin";

/**********************************/

/**
 * 主函數
 */
void setup() {
  Serial.begin(115200);                     //波特率115200
  WiFi.begin(wifi_name, wifi_password);     //連接wifi
  while (WiFi.status() != WL_CONNECTED) {   //等待連接wifi
    delay(500);
    Serial.print(".");
  }
  Serial.println("start update");    
  updateBin();                              //開始升級
}

/**
 * 循環函數
 */
void loop() {

}

/**
 * 固件升級函數
 * 在需要升級的地方,加上這個函數即可,例如setup中加的updateBin(); 
 * 原理:通過http請求獲取遠程固件,實現升級
 */
void updateBin(){
  WiFiClient UpdateClient;
  t_httpUpdate_return ret = ESPhttpUpdate.update(UpdateClient, upUrl);
  switch(ret) {
    case HTTP_UPDATE_FAILED:      //當升級失敗
        Serial.println("[update] Update failed.");
        break;
    case HTTP_UPDATE_NO_UPDATES:  //當無升級
        Serial.println("[update] Update no Update.");
        break;
    case HTTP_UPDATE_OK:         //當升級成功
        Serial.println("[update] Update ok.");
        break;
  }
}

示例二:

采用遠程指令控制是否升級,可先了解遠程控制燈的程序,

例如通過app控制esp8266開關燈:點擊跳轉

app采用發送on、off的指令,當esp8266收到on,執行開燈,當esp8266收到off,執行關燈。如果開關燈沒問題,我們當然也可以發生其他指令,我們可以隨便假設個指令,讓esp8266收到該指令,執行固件升級即可。

例如收到指令update,執行升級函數

   if(getMsg  == "on"){       //如果收到指令on==打開燈
     turnOnLed();
   }else if(getMsg == "off"){ //如果收到指令off==關閉燈
      turnOffLed();
    }else if(getMsg == "update"){  //如果收到指令update
      updateBin();//執行升級函數
    }

示例二完整程序下載:點擊下載

由於固件鏈接地址是不變的,所以就算重新上傳了固件,也可以一直持續向上升級。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM