本文以C Link SDK中的Demo檔案./demos/mqtt_broadcast_demo.c
為例,介紹如何調用Link SDK的API,展示裝置的廣播通訊功能。
背景資訊
配置流程
初始化。
詳細內容,請參見MQTT接入的初始化。
配置功能。
詳細內容,請參見MQTT接入的配置功能。
請求串連。
詳細內容,請參見MQTT接入的請求串連。
可選:如果要向指定產品下所有裝置發送廣播訊息,裝置需調用aiot_mqtt_sub,訂閱指定Topic。
範例程式碼:
{ char *sub_topic = "/broadcast/a18wP******/test"; res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }
相關參數:
參數
樣本
說明
sub_topic
/broadcast/a18wP******/test
指定產品下的所有裝置接收廣播訊息的Topic。格式為:
/broadcast/${productKey}/自訂欄位
。樣本中:a18wP******
為裝置的ProductKey。test
為自訂欄位。
關於Topic的更多資訊,請參見什麼是Topic。
接收廣播訊息。
裝置與物聯網平台建立串連後,您可以調用物聯網平台雲端API(PubBroadcast),向裝置廣播訊息。
重要廣播訊息發送頻率建議不超過1次/分鐘,以免被限流。
具體操作,請參見廣播通訊。
裝置端調用aiot_mqtt_recv,接收到資訊。廣播訊息觸發回呼函數,裝置執行對應處理。
本文範例程式碼中,回呼函數為
demo_mqtt_default_recv_handler
。定義廣播訊息的回呼函數,編寫處理邏輯。
通過收到訊息的Topic格式,辨別訊息是否為廣播訊息。
如果需全量線上裝置接收廣播訊息,無需訂閱Topic。當裝置收到訊息後,您可通過訊息的Topic格式,確認訊息是否為廣播訊息。該類型訊息的Topic格式為
/sys/${productKey}/${deviceName}/broadcast/request/${MessageId}
。如果需指定Topic的所有裝置接收廣播訊息,需訂閱該Topic。廣播通訊的Topic格式為:
/broadcast/${productKey}/自訂欄位
。
您可根據業務需要,編寫回呼函數的處理邏輯。範例程式碼對廣播訊息僅做列印處理。
void demo_mqtt_default_recv_handler(void *handle, const aiot_mqtt_recv_t *packet, void *userdata) { switch (packet->type) { …… …… case AIOT_MQTTRECV_PUB: { printf("pub, qos: %d, topic: %.*s\n", packet->data.pub.qos, packet->data.pub.topic_len, packet->data.pub.topic); printf("pub, payload: %.*s\n", packet->data.pub.payload_len, packet->data.pub.payload); /* TODO: 列印廣播的報文 */ } break; …… …… default: { } } }
中斷連線。
詳細內容,請參見MQTT的中斷連線。
退出程式。
詳細內容,請參見MQTT的退出程式。