本文以C Link SDK中的Demo文件./demos/mqtt_broadcast_demo.c为例,介绍如何调用Link SDK的API,展示设备的广播通信功能。

背景信息

  • 广播消息功能的更多信息,请参见概述
  • 广播消息功能基于MQTT接入,开发过程中涉及MQTT接入的代码说明,请参见MQTT接入

配置流程

  1. 初始化。
    详细内容,请参见MQTT接入的初始化
  2. 配置功能。
    详细内容,请参见MQTT接入的配置功能。
  3. 请求连接。
    详细内容,请参见MQTT接入的请求连接。
  4. 可选:如果要向指定产品下所有设备发送广播消息,设备需调用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

  5. 接收广播消息。
    1. 设备与物联网平台建立连接后,您可以调用物联网平台云端APIPubBroadcast),向设备广播消息。
      注意

      广播消息发送频率建议不超过1次/分钟,以免被限流。

      具体操作,请参见广播通信

    2. 设备端调用aiot_mqtt_recv,接收到信息。广播消息触发回调函数,设备执行对应处理。
      本文示例代码中,回调函数为demo_mqtt_default_recv_handler
    3. 定义广播消息的回调函数,编写处理逻辑。
      通过收到消息的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: {
      
              }
          }
      }
  6. 断开连接。
    详细内容,请参见MQTT的断开连接
  7. 退出程序。
    详细内容,请参见MQTT的退出程序

后续步骤

  • 例程文件配置完成后,需进行编译,生成可执行文件demos/mqtt-broadcast-demo

    更多信息,请参见编译与运行

  • 关于运行结果的详细说明,请参见运行日志