天天看點

OpenHarmony Neptune開發闆-MQTT連接配接華為IoT平台

前言:

之前有發過Neptune開發闆-MQTT連接配接華為IoT平台文章,但發現寫的程式有很大BUG,導緻程式運作到開發闆經常發生CPU異常(直接不能運作)和平台指令下發錯誤,在此和之前使用我寫的程式發生問題的人說一句抱歉,本次我修改程式,解決了CPU異常(直接不能運作)和平台指令下發錯誤問題,并測試20~30分鐘,確定穩定運作,并将一些遇到問題做相關介紹。

介紹:

本示例将示範如何在Neptune開發闆上使用MQTT協定連接配接華為IoT平台,使用的是ATH20溫濕度傳感器子產品與Neptune開發闆

本示例實作AHT20溫濕度資料上報華為IoT平台,IoT平台下發指令控制LED燈的開關

使用W800 SDK功能包中libemqtt來實作連接配接華為IoT平台

void mqtt_init(mqtt_broker_handle_t broker, const char clientid);

初始化要連接配接到代理的資訊

參數

描述

broker

代理資料結構,包含與代理的連接配接資訊

clientId

clientId辨別用戶端ID

傳回

void mqtt_init_auth(mqtt_broker_handle_t broker, const char username, const char* password);

啟用身份驗證以連接配接到代理。

username

使用者名

password

密碼

編寫TCP連接配接函數,代碼示例如下:

int mqtt_connect(mqtt_broker_handle_t* broker);

1

成功

連接配接錯誤

-1

輸入輸出錯誤

編寫訂閱MQTT主題函數,代碼示例如下:

采用cJSON封包與解包(使用W800 SDK功能包中cJSON實作),共有兩個封包(一個裝置屬性上報,一個指令應答上報),一個解包解析IoT平台指令,其他不過多贅述具體詳見華為IoTDA 裝置接入文檔: 裝置接入 IoTDA 文檔

例如裝置屬性上報,代碼示例如下:

按照華為雲IoT裝置平台指令下發文檔需要将

下行中的request_id={request_id} 複制到上行中,隻有這樣下行與上行request_id相同才能保證平台指令資料下發成功任務

這裡展示一小段代碼:

這裡我出的問題就在->strncpy(request_id,topic+63,47);在我之前是topic+62 而且再我之前建立demo平台下發成功,就沒想了,但在這幾天測試時就發現這問題故說明。

由于定時器使用不當,導緻CPU中斷異常,緻程式崩潰(以更改)

請參考:BearPi-HM_Nano開發闆WiFi程式設計開發——MQTT連接配接華為IoT平台(Demo我以導出模型)

添加華為雲IoT參數:(這隻是示例,無法使用)

在wifi_connecter.h修改wifi熱點資訊

示例代碼編譯燒錄代碼後,按下開發闆的RESET按鍵:

OpenHarmony Neptune開發闆-MQTT連接配接華為IoT平台

點選裝置右側的“檢視”,進入裝置詳情頁面,可看到上報的資料

OpenHarmony Neptune開發闆-MQTT連接配接華為IoT平台

在華為雲平台裝置詳情頁,單擊“指令”,選擇同步指令下發,選中建立的指令屬性,單擊“确定”,即可發送下發指令控制裝置

OpenHarmony Neptune開發闆-MQTT連接配接華為IoT平台

現以解決經常發生CPU異常(直接不能運作)和平台指令下發錯誤,同時建立使用兩個定時器,一個20秒上報AHT20資料,一個1分鐘ping一次(用以保活),使之穩定運作,支援1.0版本與1.1版本。

相關說明:

本程式部分參考基于聯盛德w600的mqtt用戶端程式示例

想了解更多關于鴻蒙的内容,請通路:

51CTO和華為官方戰略合作共建的鴻蒙技術社群

https://harmonyos.51cto.com/#bkwz

::: hljs-center

OpenHarmony Neptune開發闆-MQTT連接配接華為IoT平台

:::

繼續閱讀