自訂MQTT Topic通訊

更新時間:
Copy as MD

使用者可以直接通過SDK提供的MQTT API與阿里雲物聯網平台通訊,即可以通過向指定的Topic發送訊息的方式將資料發送到阿里雲物聯網平台,也可以通過訂閱指定的Topic從阿里雲物聯網平台接收資料,這些Topic都是使用者自訂的。

通訊流程圖

使用MQTT Topic與物聯網平台通訊的流程示意圖如下:image

  1. 通過調用IOT_MQTT_Construct()介面調用, 建立裝置和雲平台之間的長串連 。

    • 該介面用來向雲平台發起串連請求,需要的“簽名資訊”可以通過dev_sign功能中的IOT_Sign_MQTT()獲得。

    • 串連成功後,會返回一個handle參數,這是串連的控制代碼,可用作之後所有MQTT網路介面的輸入參數。

  2. 通過IOT_MQTT_Subscribe()介面調用,可以向雲平台表達裝置將接收哪些Topic上的報文。

  3. 進入業務主迴圈 。

    • 通過IOT_MQTT_Publish()IOT_MQTT_Publish_Simple(),可將訊息上報到雲端。

    • IOT_MQTT_Yield()用於接收雲端下發的訊息,並調用使用者在IOT_MQTT_Subscribe()時指定的回呼函數,用於對資料進行處理。

功能API介面

函數名

說明

IOT_MQTT_CheckStateNormal

MQTT串連後,調用此函數檢查長串連是否正常。

IOT_MQTT_Construct

MQTT執行個體的建構函式,入參為iotx_mqtt_param_t結構體,串連MQTT伺服器,並返回被建立的控制代碼。

IOT_MQTT_Destroy

MQTT執行個體的摧毀函數,入參為 IOT_MQTT_Construct建立的控制代碼。

IOT_MQTT_Publish

MQTT會話階段,組織一個完整的MQTT Publish報文,向服務端發送訊息發布報文。

IOT_MQTT_Publish_Simple

MQTT會話階段,組織一個完整的MQTT Publish報文,向服務端發送訊息發布報文,參數中不含結構體等複雜資料類型。

IOT_MQTT_Subscribe

MQTT會話階段,組織一個完整的MQTT Subscribe報文,向服務端發送訂閱請求。

IOT_MQTT_Subscribe_Sync

MQTT會話階段,組織一個完整的MQTT Subscribe報文,向服務端發送訂閱請求,並等待應答。

IOT_MQTT_Unsubscribe

MQTT會話階段,組織一個完整的MQTT UnSubscribe報文,向服務端發送取消訂閱請求。

IOT_MQTT_Yield

MQTT會話階段,MQTT主迴圈函數,內含了心跳的維持,伺服器下行報文的收取等。

需要實現的HAL介面

以下函數為可選實現,如果希望SDK提供MQTT通道功能,則需要使用者對接。

函數名

說明

HAL_SSL_Destroy

銷毀一個TLS串連,用於MQTT功能,加密串連的情況

HAL_SSL_Establish

建立一個TLS串連,用於MQTT功能,加密串連的情況

HAL_SSL_Read

從一個TLS串連中讀資料,用於MQTT功能,加密串連的情況

HAL_SSL_Write

向一個TLS串連中寫資料,用於MQTT功能,加密串連的情況

HAL_TCP_Destroy

銷毀一個TLS串連,用於MQTT功能

HAL_TCP_Establish

建立一個TCP串連,包含了網域名稱解析的動作和TCP串連的建立

HAL_TCP_Read

在指定時間內,從TCP串連讀取流資料,並返回讀到的位元組數

HAL_TCP_Write

在指定時間內,向TCP串連發送流資料,並返回傳送的位元組數

說明

SDK提供的使用者API介面都列在src/mqtt/mqtt_api.h,可能需要對接的HAL函數都列在src/mqtt/mqtt_wrapper.h,具體以代碼為準。