Utilice el archivo de código de ejemplo ./demos/mqtt_broadcast_demo.c en Link SDK for C para implementar la comunicación de difusión en un dispositivo.
Contexto
Procedimiento
-
Inicialice un cliente.
Para obtener más información, consulte Step 1: Initialization.
-
Configure las funciones obligatorias.
Para obtener más información, consulte Step 2: Configure features.
-
Establezca una conexión.
Para obtener más información, consulte Step 3: Request a connection.
-
Opcional. Si desea enviar un mensaje de difusión a todos los dispositivos de un producto, los dispositivos deben llamar a la función aiot_mqtt_sub para suscribirse a un tema específico.
-
Código de ejemplo:
{ 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; } } -
Parámetros:
Parámetro
Ejemplo
Descripción
sub_topic
/broadcast/a18wP/test
El tema al que se envía el mensaje de difusión. Formato:
/broadcast/${productKey}/<custom field>. Parámetros en este ejemplo:-
a18wPes la ProductKey del dispositivo. -
test indica un campo personalizado.
Para obtener más información sobre los temas, consulte What is a topic?.
-
-
-
Reciba el mensaje de difusión.
-
Una vez que el dispositivo se conecta a IoT Platform, puede llamar a la operación PubBroadcast de IoT Platform para enviar un mensaje de difusión al dispositivo.
ImportanteSe recomienda enviar como máximo un mensaje de difusión por minuto para evitar limitaciones de velocidad.
Para obtener más información, consulte Broadcast messages.
-
El dispositivo llama a la función aiot_mqtt_recv para recibir el mensaje de difusión. A continuación, se invoca una función callback para ejecutar las operaciones necesarias.
En este ejemplo, se utiliza la función callback demo_mqtt_default_recv_handler
. -
Defina una función callback para procesar el mensaje de difusión.
Compruebe si el mensaje es de difusión según el formato del tema.
Si desea enviar el mensaje de difusión a todos los dispositivos en línea de un producto, los dispositivos no necesitan suscribirse a un tema de difusión. Después de que cada dispositivo reciba el mensaje, puede comprobar si es un mensaje de difusión basándose en el formato del tema correspondiente. El formato de un tema de difusión es
/sys/${productKey}/${deviceName}/broadcast/request/${MessageId}.Si desea enviar el mensaje de difusión a todos los dispositivos suscritos a un tema de difusión personalizado, los dispositivos deben suscribirse a dicho tema. El formato de un tema de difusión personalizado es
/broadcast/${productKey}/<custom field>.
Puede especificar la lógica de procesamiento del callback según sus requisitos empresariales. En este ejemplo, se imprime el mensaje de difusión.
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: Print the broadcast message */ } break; …… …… default: { } } }
-
-
Cierre la conexión.
Para obtener más información, consulte Step 8: Disconnect.
-
Salga del programa.
Para obtener más información, consulte Step 9: Exit the program.
Siguientes pasos
-
Después de configurar el archivo de código de ejemplo, compílelo para generar un archivo ejecutable. En este ejemplo, se genera el archivo ejecutable
demos/mqtt-broadcast-demo.Para obtener más información, consulte Compile and run.
Para obtener más información sobre el resultado de la ejecución, consulte View logs.