ESA2GJK1DH1K升級篇: 阿里雲物聯網平台 OTA: 關於阿里雲物聯網平台 OTA 的升級流程說明


 

 

 

前言

  鑒於有些用戶直接想使用現成的物聯網平台實現 OTA 遠程升級

  我就寫一寫這系列的文章

  首先大家需要學習完這部分

  https://www.cnblogs.com/yangfengwu/p/11828777.html

  

現在說一下具體流程

 

新增固件

 

  一,選擇物聯網平台里面的

    

 

    固件名稱: 隨意

    所屬產品: 選擇自己創建的產品

       版本號: 1.0

    簽名算法:MD5

   大家隨意上傳一個固件(文件),這節只是測試.

    

 

 

 

 

提示

  一,提示

    咱在基礎篇添加了一個產品,然后產品下添加了一個設備,然后得到的這台設備的信息

    {
    "ProductKey": "a1m7er1nJbQ",
    "DeviceName": "Mqtt",
    "DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
    }

    然后得到

 

    IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

    端口號:    1883

    Client ID: 112233445566|securemode=3,signmethod=hmacsha1|

    用戶名:    Mqtt&a1m7er1nJbQ

    密碼:       8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

    咱如果想升級呀,其實也是按照基礎篇介紹的那樣連接MQTT

    只不過呢訂閱和發布的主題有區別

 

                https://help.aliyun.com/document_detail/85700.html?spm=a2c4g.11186623.6.699.581b740dLmrTn8  說明文檔

 

  二,請求固件

    請求固件的主題:   

    /ota/device/inform/${YourProductKey}/${YourDeviceName}

    對於上面的設備而言發布的主題就是: /ota/device/inform/a1m7er1nJbQ/Mqtt

 

    設備發送的消息格式   

 

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

 

  三,阿里雲回復:

    /ota/device/upgrade/${YourProductKey}/${YourDeviceName}

    對於上面的設備而言需要訂閱主題: /ota/device/upgrade/a1m7er1nJbQ/Mqtt

 

 

    設備接收的消息格式:

{
  "code": "1000",
  "data": {
    "size": 432945,
    "version": "2.0.0",
    "url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D",
    "md5": "93230c3bde425a9d7984a594ac55ea1e",
    "sign": "93230c3bde425a9d7984a594ac55ea1e",
    "signMethod": "Md5"
  },
  "id": "1507707025",
  "message": "success"
}
 
  然后單片機提取 url 然后訪問,即可獲取到固件了.

  四,升級過程中設備上報進度或者失敗

    /ota/device/progress/${YourProductKey}/${YourDeviceName}

 

    對於上面的設備而言發布的主題就是:  /ota/device/progress/a1m7er1nJbQ/Mqtt

 

    消息格式:

{
  "id": "123",
  "params": {
    "step": "-1",
    "desc": "固件升級失敗,請求不到固件信息。"
  }
}

 

 

 

 

  五,設備升級完以后:

    阿里雲規定升級完以后,和一開始一樣上報一下版本

    /ota/device/inform/${YourProductKey}/${YourDeviceName}

    對於上面的設備而言發布的主題就是: /ota/device/inform/a1m7er1nJbQ/Mqtt

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

 

不過現在的版本 應該是上報的升級以后的版本號

然后就完成了升級

 

 

驗證固件

  一,  有了上面的提示以后咱接着說具體的步驟

    阿里雲規定,一開始先測試下固件好不好使,所以需要驗證固件

    先不要點擊...

     

  二, 咱需要先用一個設備上報一個與當前雲端固件不一樣的版本

 

    咱用調試助手模擬這台設備 我設置我這個設備當前的版本號是    0.0  

    

  三, 點擊驗證固件

    

    3.2  現在待升級里面的版本號就有了0.0

 

    

 

    

    3.3  選擇咱剛才用調試助手模擬的設備

      注: 以后咱肯定不止一台設備,阿里希望咱每次更新固件的時候,先拿一台設備做下測試

 

    

 

 

    3.4 點擊確定

 

    

 

 

    3.5  看一下調試助手

 

    

 

    {"code":"1000","data":{"size":15824,"sign":"d91b82d73681f83eb57f1f791af61563","version":"1.0","url":"https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D","signMethod":"Md5","md5":"d91b82d73681f83eb57f1f791af61563"},"id":1577368305108,"message":"success"}

    如果咱是真實的設備,咱就應該提取url  去下載程序

    https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D"

    

    3.6 咱用MQTT調試助手發送下最新的版本給阿里雲,告訴阿里雲我已經升級成功

    

    3.7 點擊查看,

    

 

 

    3.8 點擊返回

 

    

 

 

    3.9  現在就可以正常的升級設備了

      點擊批量升級

 

 

    

 

現在才是重點

  一,你會發現第一項沒有東西可選

    

 

    其實阿里呢是這個步驟:

    假設我當前所有設備的版本號是 0.0

    我重新在阿里雲OTA上傳了固件,設置了固件版本是 1.0

    我現在想讓0.0版本的設備去升級新版本

    你的設備必須通過MQTT上報當前的版本號,也就是0.0

    

    然后才會出現需要升級的版本號

 

 

    

 

 

    然后設置版本是0.0的設備的升級配置

 

    

 

 

 

 這個地方測試的有點懵逼.......

 

測試下這個讓我懵逼的地方

  一,再弄個新設備

    

 

 

  二,這個新設備只要不上報自己的版本則不會收到服務器的任何東西

 

    咱上報一下版本0.0

    我現在的設備就是 "待升級" 狀態

 

    

 

 

  三,假設現在設備不小心重啟了

    雲端主動推送升級信息來了

 

    

 

 

 

 

不過感覺阿里應該再優化的地方-1

  阿里的固件的校驗方式

  

 

 

  

 

 

  我感覺這樣有點不好.

 

  其實應該可以讓用戶自定義個參數

 

  因為很多用戶已經實現了升級,而且都有自己的程序文件校驗方式.

  這樣就給很多用戶增加了工作量....

 

 

 

 

不過感覺阿里應該再優化的地方-2

  應該很多單片機的升級都是使用的 乒乓升級

  就是說每次升級的時候兩塊內存區來回的切換升級

  這就需要兩份文件.

  列如我的升級篇使用的單片機分配情況

  

  而阿里提供的是每次訪問的時候只能是一套......

  那我們只能把原來的乒乓升級改一下

  

  用其中一塊區域專門接收程序文件,然后對程序文件做校驗

  保證了程序文件確實沒有問題以后

  再把文件拷貝過去運行......

  這樣有個問題是,,,萬一寫的程序有問題,就不能實現程序回滾了

  

  感覺最好可以上傳兩套程序文件

  然后自定義一個參數 可以訪問哪一套

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM