建立带数据库的网站,房地产公司 网站建设,郑州今天刚刚发生的新闻,设置wordpress数据库用户名ESP使用巴法云远程OTA#xff08;Platform#xff09; 什么是OTA#xff1a; OTA#xff08;Over-the-AirTechnology#xff09;即空中下载技术#xff0c;是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。OTA升级是物联网#xff08;IOTPlatform 什么是OTA OTAOver-the-AirTechnology即空中下载技术是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。OTA升级是物联网IOT产品设计的一个非常重要的部分能够实现智能设备系统漏洞修复、系统升级通过固件和软件的升级提供更好的服务。OTA固件升级功能不仅能够更新固件而且还能重新配置芯片上硬件资源。同时设备固件可通过OTA固件升级流程获得更新的补丁和更多安全算法防范病毒攻击。 ESP32集成了2.4GHzWi-Fi和蓝牙双模以其超高的射频性能、稳定性、通用性和可靠性以及超低的功耗满足不同的功耗需求适用于各种物联网应用场景受到低成本系统和制造商的欢迎。 此外使用ESP32 OTA还可以实现远程控制即通过网络来远程控制设备。例如我们可以通过网络将新的固件发送到设备实现设备的远程升级。 总之使用OTA可以提高设备的维护效率方便我们进行远程控制和升级。因此ESP32支持OTA升级是非常有用的功能。
实验环境
硬件ESP32 软件VScode 下 Platform io 平台: 巴法云
步骤
VScode 下 Platform io 创建工程编译一个准备用作OTA之后的测试用例编写支持OTA功能的代码并使用数据线完成第一次下载在巴法云平台上传测试固件bin文件测试OTA功能
实操
创建工程
)
添加串口波特率115200 编写代码测试用例 实际上测试用例和基础OTA代码是一样的只是用了不同的宏定义区分一下模块功能
//基础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 zl231231 // WIFI密码
// 固件链接在巴法云控制台复制、粘贴到这里即可
String upUrl http://bin.bemfa.com/b/3BcZjQ1ZmM3M2EwNjYyY2VhNTIzZmM4YTVkZjUwMTkwYzYlight002.bin;
/**********************************/
void updateBin();
/*** 主函数*/
void setup()
{Serial.begin(115200); // 波特率115200WiFi.begin(wifi_name, wifi_password); // 连接wifiwhile (WiFi.status() ! WL_CONNECTED){ // 等待连接wifidelay(500);Serial.print(.);}Serial.println();Serial.print(IP address: );Serial.println(WiFi.localIP());
#if defined(LED)Serial.println(LED灯测试);LED_INIT
#elseSerial.println(3s后开始升级);delay(3000);updateBin(); // 开始升级
#endif;Serial.println(setup end);
}/*** 循环函数*/
void loop()
{
#ifdef LEDSerial.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;}
}先编译一次测试用例又LED的宏定义部分然后把编译后的.bin文件传到巴法云平台上 编译好的固件在工程目录\.pio\build\esp32dev下名字是firmware.bin 将复制的链接贴回去测试代码中 编辑基础OTA代码无LED宏定义并使用数据线下载到esp32上。观察串口数据信息等待完成OTA后看到测试用例的固件被加载到esp32中说明OTA升级完成。 注意 :如果想要每次OTA完成之后可以继续下一次的OTA需要保证每次OTA的新程序里都保留着支持远程OTA的模块。