所谓OTA,就是Over-The-Air的缩写。有人将其翻译为“空中下载”,也有翻译为“隔空传输”。无论如何翻译,对于ESP2866来说,通过OTA我们无需将ESP8266与电脑连接,而仅仅通过WiFi就可以用向ESP8266上传程序。当然,可以通过使用Arduino IDE,但是我更喜欢使用platformio,使用如下:
一、使用自带的OTA升级固件
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
const int ESP_BUILTIN_LED = D0;
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());
pinMode(ESP_BUILTIN_LED, OUTPUT);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("");
connectWifi();
// OTA设置并启动
ArduinoOTA.setHostname("ESP8266");
ArduinoOTA.begin();
Serial.println("OTA ready");
}
void loop() {
// put your main code here, to run repeatedly:
ArduinoOTA.handle();
//Todo
}
将这个程序中的wifi名称和密码替换即可,然后将你要的事情,添加到Todo中即可。按照这个模板esp8266即可满足ota更新固件。
platformio配置文件platformio.ini如下:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
upload_protocol = espota
upload_port = 192.168.1.152
其中upload_protocol是固定的,upload_port请替换成esp8266的本地ip地址即可。platformio便可以通过wifi来升级固件了。
二、使用AsyncElegantOTA 来升级固件
上面的方法有个弊端,就是升级太复杂,需要通过platformio或者Arduino IDE来升级固件。这个 库AsyncElegantOTA ,通过在esp8266上启动一个webserver来上传bin文件,从而起到升级固件的目的。
首先,先安装AsyncElegantOTA 库,同时还需要ESPAsyncWebServer和ESPAsyncTCP这两个库。
代码如下:
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
AsyncWebServer server(80);
void setup(void) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(200, "text/plain", "Hi! I am ESP8266.");
});
AsyncElegantOTA.begin(&server); // Start ElegantOTA
server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
AsyncElegantOTA.loop();
//Todo
}
将这个程序中的wifi名称和密码替换即可,然后将你要的事情,添加到Todo中即可。按照这个模板esp8266即可满足ota更新固件。
platformio配置文件platformio.ini如下:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
; upload_protocol = espota
; upload_port = 192.168.1.152
lib_deps =
ayushsharma82/AsyncElegantOTA@^2.2.6
me-no-dev/ESPAsyncTCP@^1.2.2
me-no-dev/ESP Async WebServer@^1.2.3
在浏览器输入esp8266的本地地址+/update,即可到达更新固件界面:(选择bin文件上传即可)