上篇:EC600S連接阿里雲
在完成連接阿里雲之后,此時阿里雲物聯網平台下對應的設備處於在線狀態。
之后我們上傳升級包BIN文件到阿里雲,參考:https://blog.csdn.net/zrh565309720/article/details/117225444
這些基礎操作百度一大堆,我直接跳過,我后面要記錄的是我這幾天多方查找,終於完成從連接->下載BIN文件到stm32單片機的全過程。
十分感謝up主 阿正啷個哩個啷(https://www.bilibili.com/video/BV1zv411t71G),他的三期視頻給了我特別大的幫助,而且還有源碼參考,省大力氣了。
1 //連接到物聯網平台,上傳升級包后,我們就需要讓我們的設備獲取到升級包的下載地址 2 3 //在產品->TOPIC類列表->基礎通信TOPIC中可以看到OTA升級需要 4 //訂閱固件升級信息下行, 5 /ota/device/upgrade/a1KAGfJc50T/${deviceName} 6 7 AT+QMTSUB=0,1,"/ota/device/upgrade/a1KAGfJc50T/EC600DYU",1 8 9 //按照我上面的修改一下就可以了。 10 此時只要重新連接一下MQTT,就可以獲取到升級包信息,前提是你上傳升級包時勾選了主動推送升級包。 11 12 //自動推送的升級包信息 13 +QMTRECV: 0,0,"/ota/device/upgrade/a1KAGfJc50T/EC600DYU","{"code":"1000","data":{"size":73508,"extData":{"_package_udi":"ceshi"},"module":"test","sign":"a66f220bd0473d78837db3a80c57caee","version":"1","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/e7d904164660d3eda03979d924446a27/cks89kmbh0000268gea470gvx.BIN?Expires=1628821879&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=3my%2FcbeaWr9eEl0bkOhYu6wAzU4%3D","signMethod":"Md5","md5":"a66f220bd0473d78837db3a80c57caee"},"id":1628735479846,"message":"success"}"
"size":73508 表示升級包的大小,單位字節
"module":"test" 你創建升級包時有個module的選擇,不創建的話,默認default,這個重要,在后面主動獲取升級包時需要用到
"version":"1", 版本信息
"url": 這后面一大串就是升級包下載鏈接
獲取到升級包鏈接后就可以開始下載了,下載之前我先講一個困擾我新手小白兩天,搜尋,試驗N次無果,最后求助阿里雲工程師搞定的操作。
如何主動獲取阿里雲上傳的升級包信息。
前面我們說每次自動連接時,在成功訂閱/ota/device/upgrade/a1KAGfJc50T/${deviceName}后,都會給我們自動發一個省級包,那如果一直連接,升級包又沒有更新,那就不能收到升級包信息了
這時候就需要主動獲取。
打開基礎通信TOPIC可以看到:設備主動拉取固件升級信息 是使用請求TOPIC:/sys/a1KAGfJc50T/${deviceName}/thing/ota/firmware/get
在發送請求TOPIC前,我們需要先訂閱響應TOPIC:/sys/a1KAGfJc50T/${deviceName}/thing/ota/firmware/get_reply
1 //第一步,訂閱響應TOPIC 2 3 AT+QMTSUB=0,1,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get_reply",1 4 5 OK 6 7 +QMTSUB: 0,1,0,1 8 9 //第二步,主動查詢升級包 10 AT+QMTPUB=0,1,1,0,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get" 11 12 > {"id":"3","version":"2","params":{"moudle":"default"},"method":"thing.ota.firmware.get"} 13 14 15 //說一下這個升級包ALINK格式注意事項: 16 //1.ID:數字,每次發送更改一下,別重復 17 //版本號:如果版本號是最新的,可能就不回復url了,不確定,自己試試 18 //"moudle":如果你設置了"moudle"的名稱,就寫你的名稱,沒有就default,或者不寫 19 //"method":固定不變 20 OK 21 22 +QMTPUB: 0,1,0 23 24 //這里多了一個+QMTRECV:,可以取消,取消訂閱這個topic/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get 25 26 +QMTRECV: 0,2598,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get","{"id":"3","version":"2","params":{"moudle":"default"},"method":"thing.ota.firmware.get"} 27 " 28 //查到的升級包 29 +QMTRECV: 0,0,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get_reply","{"code":200,"data":{"size":73508,"sign":"a66f220bd0473d78837db3a80c57caee","version":"3","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/e7d904164660d3eda03979d924446a27/cks8cwez00004268gzggi5ru8.BIN?Expires=1628828407&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=5iOqKf2u7Hlrk%2B7TE9rqzLY5WQI%3D","signMethod":"Md5","md5":"a66f220bd0473d78837db3a80c57caee"},"id":"3"}"
下面先直接發重要的AT指令,后面重要位置另外解釋。防止自己遺忘。
1 //HTTP網絡連接配置 步驟1 2 AT+QHTTPCFG="contextid",1 3 4 OK 5 //HTTP網絡連接配置 步驟2 6 AT+QHTTPCFG="responseheader",1 7 8 OK 9 //HTTP網絡連接配置 步驟3 10 //移動:CMNET ,聯通;UNINET,電信:自己百度 11 AT+QICSGP=1,1,"CMNET","","" ,1 12 13 OK 14 //發起網絡連接 15 //首先輸入升級包的長度:212(可以用strlen()快速獲得),超時時間:80S 16 AT+QHTTPURL=212,80 17 18 CONNECT 19 //出現connect后快速輸入url地址 20 OK 21 //發送 GET 請求到 HTTP(S)服務器 22 AT+QHTTPGET=80 23 24 OK 25 26 +QHTTPGET: 0,200,73508 //73508:表示升級包內的字節數 27 28 29 //下面獲取升級包,緩存到4G模塊內, 30 //UFS:存儲的位置在4G模塊內, 31 //OTA.bin:給接收到的文件命名, 80:等待時間 32 AT+QHTTPREADFILE="UFS:OTA.bin",80 33 34 OK 35 36 +QHTTPREADFILE: 0 37 38 //打開文件:如果報錯426,表示文件已經打開,這個在移遠的FILE_應用指導可以查 39 AT+QFOPEN="OTA.bin",2 40 41 +QFOPEN: 1 42 43 OK 44 45 46 //因為模塊一次最多只能向外面讀出1024個字節,所以要配置指針一次次讀,直至讀完 47 //AT+QFSEEK=<filehandle>,<offset>[,<position>] 設置文件指針位置 48 //filehandle=文件句柄,和下面QFREAD的首個參數要確保一樣,具體沒研究清楚 49 //<offset>指針 50 //<position>文件指針移動模式 51 //詳細介紹請看文檔 52 53 AT+QFSEEK=1,0,0 54 55 OK 56 //讀取文件 57 //AT+QFREAD=<filehandle>[,<length>] 58 //filehandle:和前面的QFSEEK的值要一樣 59 //length:讀取的長度,最大1024 60 AT+QFREAD=1,1024 61 62 CONNECT 1024 63 8y 絀?????譏譏M=譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏?;る?る$??k[?k態8??;延pGF麋 64 OK 65 66 //增加文件指針的值,一直讀取,直到最后 67 AT+QFSEEK=1,1024,0 68 69 OK 70 AT+QFREAD=1,1024 71 72 CONNECT 1024 73 F 74 F裱lH`絧齇 75 OK 76 AT+QFSEEK=1,2048,0 77 78 OK 79 AT+QFREAD=1,1024 80 81 CONNECT 1024 82 /H鷯?(餻?饊 83 OK
記錄一下這段時間的資料查詢成果,防止自己遺忘,也方便后面需要的人。
最后我想說:阿里雲的文檔真小白不友好!!!響應TOPIC是用來訂閱的,加一句話能死嗎?