光伏逆变器无线模块无线收发模块乐鑫WiFi模组ESP RainMaker固件更新,通过云平台完成更新是更为普遍的方案,本文将借助 ESP RainMaker 从云端向设备推送升级消息。ESP RainMaker 同样使用的是 esp_https_ota 组件,光伏逆变器无线模块无线收发模块乐鑫WiFi模组ESP RainMaker SDK 中整合OTA 升级部分的代码,通过调用 esp_rmaker_ota_enable()函数即可启用OTA 升级。需要注意的是,ESP RainMaker 提供了两种 OTA 升级方式,此处需要选择通过主题形式接收OTA 升级消息。订阅与 OTA 升级相关的主题后,可以通过这些主题接收 MQTT 消息并解析出固件的 URL,同时通过这些主题推送当前更新的进度及终状态。光伏逆变器无线模块无线收发模块乐鑫WiFi模组ESP RainMaker OTA升级功能的代码位于esp-rainmaker/components/esp rainmaker/src/ota目录下,该目录下与固件下载相关的代码位于源文件 esp_rmaker ota.c 中,下述代码也来源于此处。
1.//ESP RainMaker OTA 升级状态
2.char *esp_rmaker_ota_status_to_string(ota_status_t status)
3.{
4. switch (status) {
5. case OTA_STATUS_IN_PROGRESS:
6. return "in-progress";
7. case OTA_STATUS_SUCCESS:
8. return "success";
9. case OTA_STATUS_FAILED:
10. return "failed";
11. case OTA_STATUS_DELAYED:
12. return "delayed";
13. default:
14. return "ninvalidu";
15. }
16. esp_err_t esp_rmaker ota report status(esp_rmaker_ota_handle_t ota handle,
17. ota status t status,
18. char *additional info)
19. {
20. ......
21. if (ota->type == OTA USING PARAMS) (
22. err = esp_rmaker ota report status using_params(ota_handle, status,
23. additional info);
24. }else if (ota->type == OTA_USING_TOPICS) {
25. err = esp_rmaker_ota report status using_topics(ota_handle, status,
26. additional info);
27. }
28. ...
29. }
ESP RainMaker中OTA 升级状态有4种,分别为固件获取中(OTA_STATUS_IN_PROGRESS)、升级成功 (OTA_STATUS_SUCCESS)、升级失败 (OTA_STATUS_EAILED)、延后处理(OTA_STATUS_DELAYED)。光伏逆变器无线模块无线收发模块乐鑫WiFi模组在固件获取中,对应正在执行固件下载的状态,当调用esp_https_ota_begin()函数时应向云平台上报此状态,云平台也将更新对应的图标;升级成功与升级失败对应固件下载、校验的结果;延后处理则表示设备当前不方便处理该请求,随后可通过 esp_rmaker_ota_report_status ()函数完成OTA 升级状态的更新。
1.//固件信息校验
2.static esp_err_t validate_image_header(esp_rmaker_ota_handle_t ota_handler,
3.esp app desc t *new app info)
4.{
5.if (new app info == NULL) {
6.return ESP_ERR_INVALID_ARG;
7.}
8.
9.//获取固件状态
10.const esp_partition_t *running = esp_ota_get_running_partition()
11.esp app_desc_t running_app_info;
12.if (esp_ota_get_partition_descriptionrunning, &running app info) ==
13.ESP OK) {
14.ESP_LOGD(TAG,"Running firmware version: &s",running_app_info.version);
15.}
光伏逆变器无线模块无线收发模块乐鑫WiFi模组ESP RainMaker OTA 升级部分对回滚功能的自测部分做了封装,开发者可以通过esp_rmaker_ota_config t 结构体传入一个自测函数,该自测函数的返回值是布尔类型的。在调用 esp_rmaker_ota_enable ()函数开启OTA 升级时,一旦发现当前固件的状态为待校验固件 (ESP_OTA_IMG_PENDING_VERIEY),便会通过函数指针调用开发者传入的自测函数,通过自测函数的返回值设定当前固件的状态。光伏逆变器无线模块无线收发模块乐鑫WiFi模组esp_rmaker_ota_config t 结构体中的 server_cert 指向服务器端的证书,ESP RainMaker 使用AWS S3 存储服务,可以直接通过宏ESP_RMAKER_OTA_DEEAULT_SERVER_CERT 传入证书,在OTA升级时用于进行校验,防止 DNS 欺骗。