光伏逆變器無線模塊無線收發模塊樂鑫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 欺騙。