Todos los productos
Search
Centro de documentos

IoT Platform:Ejemplo de uso

Última actualización: Sep 03, 2026

Llame a las operaciones de API de Link SDK for C para distribuir dispositivos mediante el archivo de código de ejemplo ./demos/bootstrap_posix_demo.c.

Contexto

  • Para obtener más información sobre la función de distribución de dispositivos, consulte Overview.

  • Una vez que obtenga la información de conexión del dispositivo mediante la distribución de dispositivos, conecte el dispositivo a IoT Platform. Para obtener más información sobre las conexiones MQTT, consulte MQTT connection.

Paso 1: Inicialización

  1. Agregue el archivo de encabezado.

    ……
    ……
    
    #include "aiot_bootstrap_api.h"
  2. Configure las dependencias subyacentes y la salida de registros.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Llame a aiot_bootstrap_init para crear una instancia de cliente Bootstrap.

        bootstrap_handle =  aiot_bootstrap_init();
        if (bootstrap_handle == NULL) {
            printf("aiot_bootstrap_init failed\n");
            return -1;
        }

Paso 2: Configurar funciones

Llame a aiot_bootstrap_setopt para configurar las siguientes funciones.

  1. Importante

    El tipo de conexión segura para la capa Transport Layer Security (TLS) debe basarse en certificados (AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA).

    •     int32_t res = STATE_SUCCESS;
          void *bootstrap_handle = NULL, *mqtt_handle = NULL;
          aiot_sysdep_network_cred_t cred;
          demo_info_t demo_info;
      
          /* TODO: Replace with your device's productKey and deviceName. */
          char *product_key       = "a18wP******";
          char *device_name       = "LightSwitch";
          char *device_secret     = "uwMTmVAMnGGHaAkqmeDY6cHxxB******";
          ……
          ……
          memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t));
          cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA;  /* Use an RSA certificate to authenticate the MQTT server. */
          cred.max_tls_fragment = 16384; /* The maximum shard length is 16 KB. Other valid values are 4 KB, 2 KB, 1 KB, and 0.5 KB. */
          cred.sni_enabled = 1;                               /* Support Server Name Indicator (SNI) during TLS connection establishment. */
          cred.x509_server_cert = ali_ca_cert;                 /* The RSA root certificate used to authenticate the MQTT server. */
          cred.x509_server_cert_len = strlen(ali_ca_cert);     /* The length of the RSA root certificate used to authenticate the MQTT server. */
          ……
          ……
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_HOST, (void *)host);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_PORT, (void *)&port);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_PRODUCT_KEY, (void *)product_key);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_DEVICE_NAME, (void *)device_name);
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_NETWORK_CRED, (void *)&cred);
      
          ……
          ……
    • Parámetro

      Ejemplo

      Descripción

      product_key

      a18wP

      Información de autenticación del dispositivo. Para obtener más información, consulte Obtain device verification information.

      En este ejemplo se utiliza el método de autenticación de certificado único por dispositivo.

      El parámetro device_secret se usa cuando el dispositivo establece una conexión MQTT después de obtener el nombre de dominio de conexión y el número de puerto.

      device_name

      LightSwitch

      device_secret

      uwMTmVAMnGGHaAkqmeDY6cHxxB

  2. Configure las devoluciones de llamada de mensajes.

    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_RECV_HANDLER, (void *)demo_bootstrap_recv_handler); 
          aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_USERDATA, (void *)&demo_info);
    • Elemento de configuración

      Valor de ejemplo

      Descripción

      AIOT_BOOTSTRAPOPT_RECV_HANDLER

      demo_bootstrap_recv_handler

      Esta función se llama cuando se recibe un mensaje de distribución de dispositivos.

      AIOT_BOOTSTRAPOPT_USERDATA

      demo_info

      Establece el contexto de usuario. Cuando se activa demo_bootstrap_recv_handler, se devuelve userdata. Convierta los datos devueltos al tipo adecuado antes de usarlos.

  3. Configure el monitoreo de estado.

    1. Defina la devolución de llamada para monitorear el estado.

      void demo_bootstrap_event_handler(void *handle, const aiot_bootstrap_event_t *event, void *userdata)
      {
          switch (event->type) {
              case AIOT_BOOTSTRAPEVT_INVALID_RESPONSE: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_RESPONSE\n");
              }
              break;
              case AIOT_BOOTSTRAPEVT_INVALID_CMD: {
                  printf("AIOT_BOOTSTRAPEVT_INVALID_CMD\n");
              }
              break;
              default: {
      
              }
              break;
          }
      }
    2. Especifique las devoluciones de llamada para monitorear el estado.

      • Código de ejemplo:

            aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_EVENT_HANDLER, (void *)demo_bootstrap_event_handler);
      • Parámetros:

        Elemento de configuración

        Valor de ejemplo

        Descripción

        AIOT_BOOTSTRAPOPT_EVENT_HANDLER

        demo_bootstrap_event_handler

        Cuando cambia el estado de conexión del dispositivo, se ejecuta la lógica de procesamiento correspondiente definida en esta función de devolución de llamada.

Paso 3: Enviar una solicitud

Importante

Antes de enviar una solicitud de distribución de dispositivos, asegúrese de que la operación de distribución de dispositivos esté configurada en la consola de IoT Platform. De lo contrario, el nombre de dominio y el puerto devueltos corresponderán a la conexión actual del dispositivo.

Llame a aiot_bootstrap_send_request para enviar una solicitud HTTPS de distribución de dispositivos al servidor según los parámetros configurados en previous step.

Para obtener más información sobre la solicitud HTTPS, consulte Request data format for device distribution.

    res = aiot_bootstrap_send_request(bootstrap_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_bootstrap_send_request failed, res: -0x%04X\n", -res);
        return -1;
    }

Paso 4: Recibir una confirmación

  1. Después de enviar el mensaje, IoT Platform devuelve una respuesta. El dispositivo llama a aiot_bootstrap_recv para recibir los datos de respuesta y procesarlos mediante la devolución de llamada de mensajes.

        res = aiot_bootstrap_recv(bootstrap_handle);
        if (res < STATE_SUCCESS) {
            printf("aiot_bootstrap_recv failed, res: -0x%04X\n", -res);
            return -1;
        }
  2. Escriba la lógica de la función de devolución de llamada.

    Escriba la lógica de la función de devolución de llamada con base en la siguiente información:

    Tipo de mensaje

    Descripción

    AIOT_BOOTSTRAPRECV_STATUS_CODE

    Código de estado HTTP devuelto por el servidor. Para obtener más información, consulte Códigos de estado HTTP.

    El código de ejemplo no procesa el código de estado recibido. Agregue su propia lógica de procesamiento según sea necesario.

    AIOT_BOOTSTRAPRECV_CONNECTION_INFO

    Mensaje de confirmación que devuelve IoT Platform después de iniciar la distribución de dispositivos.

    El mensaje recibido es del tipo aiot_bootstrap_recv_t. Guarde los valores de host y port, que corresponden al nombre de dominio y al número de puerto para la conexión del dispositivo, en su dispositivo local.

    El código de ejemplo solo imprime el mensaje de distribución de dispositivos recibido.

    AIOT_BOOTSTRAPRECV_NOTIFY

    Mensaje de notificación de distribución de dispositivos enviado por IoT Platform.

    Después de realizar la operación de distribución de dispositivos en IoT Platform, se envía un mensaje de distribución al dispositivo. Para obtener más información, consulte Device distribution in IoT Platform.

    El código de ejemplo solo imprime el mensaje. Agregue lógica para desconectar el dispositivo, enviar una nueva solicitud de distribución de dispositivos y luego restablecer la conexión.

    void demo_bootstrap_recv_handler(void *handle, const aiot_bootstrap_recv_t *packet, void *userdata)
    {
        demo_info_t *demo_info = (demo_info_t *)userdata;
    
        switch (packet->type) {
            case AIOT_BOOTSTRAPRECV_STATUS_CODE: {
                demo_info->code = packet->data.status_code.code;
            }
            break;
            case AIOT_BOOTSTRAPRECV_CONNECTION_INFO: {
                demo_info->host = malloc(strlen(packet->data.connection_info.host) + 1);
                if (demo_info->host != NULL) {
                    memset(demo_info->host, 0, strlen(packet->data.connection_info.host) + 1);
                    /* TODO: In the callback, store the device distribution message content in a specified location. This space will then be released by the SDK. */
                    memcpy(demo_info->host, packet->data.connection_info.host, strlen(packet->data.connection_info.host));
                    demo_info->port = packet->data.connection_info.port;
                }
            }
            break;
            case AIOT_BOOTSTRAPRECV_NOTIFY: {
                printf("AIOT_BOOTSTRAPRECV_NOTIFY, cmd: %d\n", packet->data.notify.cmd);
    
            }
            default: {
    
            }
            break;
        }
    }

(Opcional) Paso 5: Establecer una conexión MQTT

Una vez que obtenga el nombre de dominio y el puerto necesarios para el dispositivo, establezca una conexión MQTT entre el dispositivo e IoT Platform. Para obtener más información sobre las conexiones MQTT, consulte MQTT connection.

Después de establecer la conexión MQTT, realice los siguientes pasos para iniciar nuevamente la distribución de dispositivos.

  1. Llame a aiot_bootstrap_setopt para asociar el identificador de conexión MQTT.

    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);
    • Elemento de configuración

      Ejemplo

      Descripción

      AIOT_BOOTSTRAPOPT_MQTT_HANDLE

      mqtt_handle

      Esta función de devolución de llamada se activa cuando el dispositivo recibe un mensaje de distribución de dispositivos enviado por IoT Platform.

  2. Inicie sesión en la consola de IoT Platform y realice la operación de distribución de dispositivos.

    Para obtener más información, consulte Device distribution in IoT Platform.

  3. Cuando el dispositivo recibe el mensaje de distribución de dispositivos enviado, se desconecta. A continuación, repita del Paso 1 al Paso 4 para obtener el nuevo nombre de dominio de conexión del dispositivo y volver a conectarlo a IoT Platform.

Paso 6: Salir del programa

Llame a aiot_bootstrap_deinit para destruir la instancia de cliente bootstrap y liberar recursos.

    res = aiot_bootstrap_deinit(&bootstrap_handle);
    if (res < 0) {
        printf("demo_start_stop failed\n");
        return -1;
    }

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/bootstrap-posix-demo.

    Para obtener más información, consulte Compile and run.

  • Para obtener más información sobre los resultados de ejecución, consulte Runtime logs.