ESP8266高階——OTA下載
- OTA簡介
- OTA怎么用
- 基本控制原理
- 燒錄代碼
- 高級用法
- 題外話
- 工程資料
OTA簡介
什么是OTA下載?空中下載(OTA)是通過移動通信的空中介面實作對移動終端設備及SIM卡資料進行遠程管理的技術,之前做的OLED網路時鐘更新代碼要反復拆裝十分不便,于是在機緣巧合下了解到了esp8266的OTA技術,show time!
OTA怎么用
在網上瘋狂的搜也沒有找到合適的、簡潔明了的示例,于是在B站找到了太極創客.,感謝UP的團隊整理了這么多的資料,他們官網也有OTA資料,可以去借鑒,以下是個人理解,有錯歡迎指正
基本控制原理
先讓8266連上WiFi,然后讓8266和PC在同一局域網下進行Over-The-Air傳輸代碼,當單片機正常運行時,收到PC發來的OTA指令,單片機要保存當前的代碼,在跳轉到OTA傳輸函式去執行傳輸新代碼,如果這時候取消傳輸了,程式還能回到原始代碼,這全靠loop里面的 ArduinoOTA.handle()函式了,具體的底層我們先不管,接下來是代碼,如下:
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>//引入OTA庫,這是關鍵
// 設定wifi接入資訊,PC也要連這個WiFi
const char* ssid = "ssid";
const char* password = "password";
void connectWifi(){
//開始連接wifi
WiFi.begin(ssid, password);
//等待WiFi連接,連接成功列印IP
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(9600);
Serial.println("");
connectWifi();
// OTA設定并啟動,以下兩行是賬戶密碼設定,使工程具有保密性,也可去除,直接下載
ArduinoOTA.setHostname("ESP8266");
ArduinoOTA.setPassword("12345678");
ArduinoOTA.begin();
Serial.println("OTA ready");
}
void loop() {
ArduinoOTA.handle();//OTA回呼函式,相當于OTA中斷處理
}
燒錄代碼
點擊 工具 選擇OTA 埠,再點擊上傳即可(一定要都在同一個WiFi下😂)

高級用法
經過幾天的搜尋,又找到了OTA的其他有趣的函式,就像下載軟體一樣,往往都會有一個進度條來顯示當前進度,那么OTA能不能做到呢?答案是肯定的,ArduinoOTA.onProgress()為我們提供了兩個引數:當前進度和總共進度,這樣我們就可以知道當前進度了,代碼如下:
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
display.drawProgressBar(4, 32, 120, 8, progress / (total / 100) );
display.display();
});
C++11 提供了對匿名函式的支持,稱為 Lambda 函式(也叫 Lambda 運算式),具體用法不多贅述,看了這么多代碼了,接下來一個視頻帶你看懂效果! B站視頻.
是不是很有意思😁
題外話
之前的OLED時鐘現在加入了OTA下載,就可以不用頻繁拆開燒錄程式了,其次加上了斷網檢測,斷網會顯示斷網圖示,連網也會顯示連網圖示,十分銀杏了,關鍵是OTA進度也能顯示出來👍👍👍



工程資料
稍后開源,,,,,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/102454.html
標籤:其他
上一篇:Java Mqtt開發必需知識點(快取、訊息服務質量、主題過濾等)小白開發筆記
下一篇:無刷有感電機測速、速度倍訓控制
