ESP8266的瀏覽器更新的過程是這樣的
- 用ESP8266先建立一個Web服務器然后提供一個更新界面(
ESP8266HTTPUpdateServer) - 通過Arduino將源文件編譯為*.bin的二進制文件
- 通過mDNS功能在瀏覽器中訪問ESP8266的服務器頁面(如:http://esp8266.local/update)
- 通過Web界面將本地編譯好的*.bin二進制固件文件上傳到ESP8266中
- 上傳完成編譯文件后ESP8266將固件寫入Sketch中
先刷入以下代碼
/**
/*
To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
const char* host = "esp8266-webupdate";
const char* ssid = "........";
const char* password = "........";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void) {
Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
MDNS.begin(host);
httpUpdater.setup(&httpServer);
httpServer.begin();
MDNS.addService("http", "tcp", 80);
Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
}
void loop(void){
httpServer.handleClient();
}
然后在偏好設置中的Show verbose output dump選項中選中"Complation"

當固件刷新后,打開串口調(diào)試器就可以看到OTA的更新頁面的地址:

直接在瀏覽器打開該地址:

是不是很丑?而且你是無法進行任何的美化的!
對代碼進行編譯,在最后就會出現(xiàn)便宜后的二進制格式的固件更新文件:

回到瀏覽器點擊"Choose file" 按鈕就可以將固件上傳到ESP8266中去:

更新結(jié)束。
結(jié)論
這種更新模式其實只適用于在開發(fā)期的一些應急的場景,例如:ESP8266已安裝到原型機或者產(chǎn)品內(nèi)且
- 無法與電腦相連進行直接的固件刷新。
- 無法直接連接更新服務器進行固件更件
這種更新界面是無法提供給最終用戶使用的,因為要進行固件更新的話用戶得先獲得固件的文件,然后還得通過一個非常丑的Web頁面將文件上傳上去。所以說這種方式只能給開發(fā)人員在應急的情況下將就地用一下。