摘要:本文主要講述使用MQTT方式對接華為雲IoT平台的具體過程。
使用的方案:目標板為STM32L431BearPI(帶E53擴展板); TCPIP功能由開發板的ESP8266提供;MQTT使用Paho-Client-Embeded;IoT對接接口采用V5版本接口;Demo選擇target的MQTTdemo。
整個開發分為兩個部分:雲端開發、設備側開發。雲端開發包括創建產品、創建設備;設備側開發包括根據方案配置功能、編譯燒錄、調試。
雲端開發
創建產品模型
產品模型其實就是用戶設備的抽象。用編程術語來解釋就是產品模型是Class,設備是對象。關於產品模型的介紹以及如何創建產品模型可以參考創建產品。
本文最后創建的產品模型如下:
設備屬性包括:溫度、濕度、光照強度、LED狀態、Motor狀態。設備命令包括兩條:控制LED ON/OFF,控制Motor ON/OFF。
創建設備
當產品模型創建完畢之后,我們可以創建基於該產品模型的設備。設備-->注冊設備。根據對話框填寫對應的信息。本文為了方便創建的設備標識為demoTest,秘鑰為012345678(該設備已經刪除,請勿連接)。結果如下:
注冊成功之后如下:
至此,我們已經注冊了端側設備,並可以在我們的設備-->所有設備中看到我們新注冊的設備。
設備端開發
設備端的開發主要包括配置工程、編譯燒錄、調試幾個步驟。下文基於此逐一進行介紹。
工程配置
由於SDK是一個全棧的軟件,包含所有的代碼,因此我們需要告知編譯器哪些文件需要編譯、怎么編譯這些文件,這個工作主要是由menuconfig完成。關於工程配置指導可以參考工工程配置示范。
進入到target/STM32L431_BearPi目錄下,輸入menuconfig(macos或者linux輸入menuconfig.py)即可進入到配置界面。
確認進入SDK的配置。
開發板的串口以及DEMO選擇
設置AT串口波特率和模組匹配;設置設備ID和秘鑰,其和在IoT平台上創建設備時候的設置一致。
TCPIP配置
在Network下,選擇TCPIP功能,並設置esp8266模式,並設置熱點的SSID和PWD。
配置SSL
配置MBEDTLS的主要原因是,IoT平台生成MQTT的三元組的時候需要使用到HMAC算法。使能TLS並選擇mbedtls並配置為CERT模式。
配置MQTT協議
在Network菜單下使能MQTT。此處配置的MQTT為標准MQTT協議。
配置IoT MQTT接入服務
在OC菜單下,使能OC MQTT(可以選擇關閉OC COAP以及OC LWM2M)。
此處我們配置的為MQTT 接入IOT的流程;沒有使能標准DEMO是因為我們使用target下的demo.
輸入Q並保存退出,會發現我們剛才的配置會保存在.config文件中。
再輸入genconfig(genconfig.py)會生成或者更新iot_config.h文件。Makefile依據.config文件選擇哪些組件編譯;編譯器會根據iot_config.h文件決定怎么編譯這個組件。
至此我們對於工程的配置已經完成。
編譯燒錄調試
編譯
功能源碼采用的是Makefile進行組織,理論上你有Make工具以及對應的交叉編譯器都可以進行編譯。本文使用的是AC6公司的SW4ST這個工具(基於Eclipse的一款工具)。其使用可以參考SW4ST使用
在SW4ST的菜單Project-->Clean下勾選清除后編譯即可編譯,並可以在Console下看到編譯結果。
如果出現FLASH溢出行為,可以將不需要的組件(stime shell)通過配置禁用;或者在Makefile中修改優化等級從-O0 -g修改為-Os。
燒錄
在SW4ST的菜單中Run-->Debug Configurations。
創建一個Ac6 STM32Debugging(使用的stlink)。
只需要保證MCU的型號一致即可。
對於BearPI而言,還需要設置重啟模式,設置為軟模式即可。
點擊apply並debug,可以看到燒錄完畢並進入調試界面。
調試
進入debug頁面之后,我們可以像其他的IDE一樣step into/step over/step out/run等調試。
同時可以接入串口,設置正確的波特率,會看到系統的輸出信息。(wifi連接上並獲取IP,向IoT平台訂閱主題成功)。
聯合調試
設備在線並上報信息
當端側顯示連接OK時候,我們在IoT平台可以看到對應的設備應該已經在線,並接收到對應數據。
IoT平台下發命令
在命令中選擇同步命令下發,可以觀測到端側設備可以接收到相關的命令。
至此,我們將設備端和IoT平台的數據交互通道打通。