MQTT基於TCP,發布訂閱模式,一對多,多對一,TCP需要client主動建立connect,server發送connectack
CoAP基於UDP,請求/應答模式,數據量也相對HTTP要小
HTTP基於TCP,請求應答模式,數據量較大
1. MQTT協議
- Message Queuing Telemetry Transport消息隊列遙測傳輸
- 輕量級協議
- 服務器/客戶端模式,樁-Cloud-手機,樁和手機不直接通信,Cloud為數據轉發,叫Broker
- 發布/訂閱,Publish/Subscribe, 端端不直接指定通信,而是通過主題Topic,一端只會像server發布主題,另一端只會訂閱主題,如溫度
- Publish/Puback, Subscribe/Suback
- Example, 典型的Connect/Connack控制報文,Publish/Puback控制報文,Subscribe/Suback控制報文
- 開源:服務器Mosquito, 客戶端Paho,百度雲/阿里雲的SDK就是運行於MCU的客戶端,也參考了Paho,在Paho基礎上又封裝了一層
1.1. 名詞解釋
- Qos:服務質量等級
- Clean session: 持久會話的概念,0為服務器保存之前的消息,1為服務器會丟掉消息,緩存的概念
- Retain: 保留消息
- Willxxx: 遺囑消息:發生異常時,通知其他客戶端
1.2. MQTT服務結構圖
1.3. 幀格式1
1.4. 幀格式2
1.5. MQTT通信
1.6. MQTT和TLS
建立TLS,設備端認證服務器,服務器認證設備端。前者常用,服務器生成根證書,設備端需要放置證書,通過證書來驗證服務器的連接信息。通過TCP建立連接的消息都是通過TLS加密。
過程
建立TCP->握手加密->非對稱到對稱的過程->產生對稱加密密鑰->客戶端先sayhello,支持xxxx, 隨機數1->服務器sayhello,支持xxx,隨機數2->證書發給客戶端->客戶端使用根證書驗證服務器的證書->驗證通過,從證書中拿到公鑰,生成隨機數3->利用公鑰+3個隨機數,生成對稱密鑰。
安全等級要求不是特別高,一般只會在設備端下載相同的根證書,用來驗證服務器,不會用服務器再來驗證設備端,如果需要驗證,則每個設備端都需要不同的證書,也就是工廠燒寫不同的信息
2. FOTA升級:firmware over the air
- 雲端推送
- 設備端接收和升級邏輯
- 原位升級/pingpong升級
- 文件:加密,壓縮,差分patch
- 原有程序打斷,續傳,觸發更新
- 安全,傳輸過程
2.1. 三種升級方式(ST使用固件冗余方式,應用程序下載完,通知Bootloader更新)
2.2. ST FOTA Demo:STM32F7,HTTP負責下載,按下按鍵跳到Bootloader更新固件
2.3. 存儲空間划分
2.4. FOTA流程
2.5. FOTA升級軟件架構
2.6. 下載文件格式*.bin
下載過程
FOTA說明
- 終端實現MQTT客戶端和HTTP客戶端,MQTT負責客戶端/服務器通信,HTTP負責文件傳輸
- 下載文件,bin文件,插入特定信息,對數據塊進行校驗
- QSPIflash中建立一個結構體,存放下載的一些信息,如版本,大小,地址,斷點續傳等等
- HTTP和HTTPS,HTTPS需要更多的驗證過程