目的
OTA Updates
,简单来说就是通过无线网进行固件的升级功能,类似于我们手机系统的更新,作为后期需要持续维护升级的产品来说该功能也是比较重要的。
参考说明
Arduino for esp8266中共有三种OTA Updates
方式,一种通过Arduino IDE进行、一种通过浏览器进行,还有一种通过ESP8266模块自己去访问放在网络上的固件实现升级。其本质实现都一样,就是把新的固件数据下载放到闪存中,然后将闪存中的新固件数据移动到程序区域,相当于新固件覆盖了旧固件。
官方说明:https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#
https://github.com/esp8266/Arduino/tree/master/libraries/ArduinoOTA
https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer/examples/WebUpdate
https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266httpUpdate
使用示例
这里仅演示通过浏览器升级的方式,先用串口将下面代码上传到ESP8266模块中:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
const char *ssid = "********"; //你要连接的网络
const char *password = "********"; //连接的网络密码
ESP8266WebServer webServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void)
{
Serial.begin(115200);
Serial.println();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
httpUpdater.setup(&webServer); //httpUpdater绑定到webServer上
webServer.begin(); //启用WebServer
Serial.println("first time");
}
void loop(void)
{
webServer.handleClient(); //处理http事务
}
上传结束后将Serial.println("first time");
一行改为Serial.println("second time");
,然后Arduino IDE中选择项目->导出已编译的二进制文件
,等待导出完成就可以进行测试了:
在第一次使用Arduino IDE上传结束后需要重启模块,不然会出现上图中的error提示;
总结
使用OTA Updates
可以不需要物理连接线对设备固件进行更新,方便了产品的后期维护升级。