本文以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的退出程序。