ESP使用巴法云远程OTA(VScode + Platform io)
//基础OTA就取消LED的宏定义,定义LED是用来测试OTA升级之后的程序,
#include <Arduino.h>
#include <WiFi.h>
#include <httpUpdate.h>
#define LED
#ifdef LED
#define led_pin 2
#define LED_INIT \
do \
{ \
Serial.println("LED灯初始化"); \
pinMode(led_pin, OUTPUT); \
} while (0)
#define LED_ON \
do \
{ \
Serial.println("LED on"); \
digitalWrite(led_pin, HIGH); \
} while (0)
#define LED_OFF \
do \
{ \
Serial.println("LED off"); \
digitalWrite(led_pin, LOW); \
} while (0)
#endif
/******需要修改的地方****************/
#define wifi_name "TP-LINK_FB01" // WIFI名称,区分大小写,不要写错
#define wifi_password "zl&231231" // WIFI密码
// 固件链接,在巴法云控制台复制、粘贴到这里即可
String upUrl = "http://bin.bemfa.com/b/3BcZjQ1ZmM3M2EwNjYyY2VhNTIzZmM4YTVkZjUwMTkwYzY=light002.bin";
/**********************************/
void updateBin();
/**
* 主函数
*/
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("");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
#if defined(LED)
Serial.println("LED灯测试");
LED_INIT
#else
Serial.println("3s后开始升级");
delay(3000);
updateBin(); // 开始升级
#endif
;
Serial.println("setup end");
}
/**
* 循环函数
*/
void loop()
{
#ifdef LED
Serial.println("Testing LED...");
LED_ON;
delay(1000);
LED_OFF;
delay(1000);
#endif
}
// 当升级开始时,打印日志
void update_started()
{
Serial.println("CALLBACK: HTTP update process started");
}
// 当升级结束时,打印日志
void update_finished()
{
Serial.println("CALLBACK: HTTP update process finished");
}
// 当升级中,打印日志
void update_progress(int cur, int total)
{
Serial.printf("CALLBACK: HTTP update process at %d of %d bytes...\n", cur, total);
}
// 当升级失败时,打印日志
void update_error(int err)
{
Serial.printf("CALLBACK: HTTP update fatal error code %d\n", err);
}
/**
* 固件升级函数
* 在需要升级的地方,加上这个函数即可,例如setup中加的updateBin();
* 原理:通过http请求获取远程固件,实现升级
*/
void updateBin()
{
Serial.println("start update");
WiFiClient UpdateClient;
httpUpdate.onStart(update_started); // 当升级开始时
httpUpdate.onEnd(update_finished); // 当升级结束时
httpUpdate.onProgress(update_progress); // 当升级中
httpUpdate.onError(update_error); // 当升级失败时
t_httpUpdate_return ret = httpUpdate.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;
}
}