Todos os produtos
Search
Central de documentação

IoT Platform:Exemplo de uso

Última atualização: Jun 26, 2026

Use as operações da API do Link SDK for C para distribuir dispositivos com o arquivo de código de exemplo ./demos/bootstrap_posix_demo.c.

Informações básicas

  • Para obter mais informações sobre o recurso de distribuição de dispositivos, consulte Visão geral.

  • Após obter as informações de conexão por meio da distribuição de dispositivos, conecte o dispositivo ao IoT Platform. Para mais detalhes sobre conexões MQTT, consulte Conexão MQTT.

Etapa 1: Inicialização

  1. Adicione o arquivo de cabeçalho.

    ……
    ……
    
    #include "aiot_bootstrap_api.h"
  2. Configure as dependências subjacentes e a saída de log.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Chame aiot_bootstrap_init para crie uma instância Bootstrap.

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

Etapa 2: Configure recursos

Chame aiot_bootstrap_setopt para configure os seguintes recursos:

  1. Importante

    O tipo de conexão segura para a camada Transport Layer Security (TLS) deve ser baseado em certificado (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

      Exemplo

      Descrição

      product_key

      a18wP

      Informações de autenticação do dispositivo. Para mais informações, consulte Obter informações de verificação do dispositivo.

      Este exemplo usa o método de autenticação de certificado único por dispositivo.

      O parâmetro device_secret é usado quando o dispositivo estabelece uma conexão MQTT após obter o nome de domínio e o número da porta de conexão.

      device_name

      LightSwitch

      device_secret

      uwMTmVAMnGGHaAkqmeDY6cHxxB

  2. Configure os callbacks de mensagem.

    •     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);
    • Item de configuração

      Valor de exemplo

      Descrição

      AIOT_BOOTSTRAPOPT_RECV_HANDLER

      demo_bootstrap_recv_handler

      Função chamada ao receber uma mensagem de distribuição de dispositivo.

      AIOT_BOOTSTRAPOPT_USERDATA

      demo_info

      Define o contexto do usuário. Quando demo_bootstrap_recv_handler é acionado, userdata é retornado. Faça o cast dos dados retornados para o tipo apropriado antes do uso.

  3. Configure o monitoramento de status.

    1. Defina o callback para monitorar o status.

      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 os callbacks para monitorar o status.

      • Código de exemplo:

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

        Item de configuração

        Valor de exemplo

        Descrição

        AIOT_BOOTSTRAPOPT_EVENT_HANDLER

        demo_bootstrap_event_handler

        Executa a lógica de processamento definida nesta função de callback quando o status da conexão do dispositivo muda.

Etapa 3: Enviar uma solicitação

Importante

Antes de enviar uma solicitação de distribuição de dispositivo, certifique-se de que a operação de distribuição esteja configurada no console do IoT Platform. Caso contrário, o nome de domínio e a porta retornados serão referentes à conexão atual do dispositivo.

Chame aiot_bootstrap_send_request para enviar uma solicitação HTTPS de distribuição de dispositivo ao servidor, com base nos parâmetros configurados na etapa anterior.

Para mais informações sobre a solicitação HTTPS, consulte Formato de dados da solicitação para distribuição de dispositivos.

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

Etapa 4: Receber um reconhecimento

  1. Após o envio da mensagem, o IoT Platform retorna uma resposta. O dispositivo chama aiot_bootstrap_recv para receber os dados de resposta e processá-los por meio do callback de mensagem.

        res = aiot_bootstrap_recv(bootstrap_handle);
        if (res < STATE_SUCCESS) {
            printf("aiot_bootstrap_recv failed, res: -0x%04X\n", -res);
            return -1;
        }
  2. Escreva a lógica da função de callback.

    Escreva a lógica da função de callback com base nas seguintes informações:

    Tipo de mensagem

    Descrição

    AIOT_BOOTSTRAPRECV_STATUS_CODE

    Código de status HTTP retornado pelo servidor. Para mais informações, consulte Códigos de status HTTP.

    O código de exemplo não processa o código de status recebido. Adicione sua própria lógica de processamento conforme necessário.

    AIOT_BOOTSTRAPRECV_CONNECTION_INFO

    Mensagem de reconhecimento que o IoT Platform retorna após o início da distribuição do dispositivo.

    A mensagem recebida é do tipo aiot_bootstrap_recv_t. Salve os valores host e port, correspondentes ao nome de domínio e ao número da porta para conexão do dispositivo, no seu dispositivo local.

    O código de exemplo apenas imprime a mensagem de distribuição de dispositivo recebida.

    AIOT_BOOTSTRAPRECV_NOTIFY

    Mensagem de notificação de distribuição enviada pelo IoT Platform.

    Ao realizar a operação de distribuição no IoT Platform, uma mensagem é enviada ao dispositivo. Para mais informações, consulte Distribuição de dispositivos no IoT Platform.

    O código de exemplo apenas imprime a mensagem. Adicione lógica para desconectar o dispositivo, enviar uma nova solicitação de distribuição e restabelecer a conexão.

    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) Etapa 5: Estabelecer uma conexão MQTT

Após obter o nome de domínio e a porta necessários para o dispositivo, estabeleça uma conexão MQTT entre o dispositivo e o IoT Platform. Para mais detalhes sobre conexões MQTT, consulte Conexão MQTT.

Depois de estabelecer a conexão MQTT, execute as etapas a seguir para iniciar a distribuição do dispositivo novamente.

  1. Chame aiot_bootstrap_setopt para associar o handle de conexão MQTT.

    •     aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle);
    • Item de configuração

      Exemplo

      Descrição

      AIOT_BOOTSTRAPOPT_MQTT_HANDLE

      mqtt_handle

      Função de callback acionada quando o dispositivo recebe uma mensagem de distribuição enviada pelo IoT Platform.

  2. Faça login no console do IoT Platform e realize a operação de distribuição do dispositivo.

    Para mais informações, consulte Distribuição de dispositivos no IoT Platform.

  3. Quando o dispositivo receber a mensagem de distribuição enviada, ele ficará offline. Em seguida, repita da Etapa 1 à Etapa 4 para obter o novo nome de domínio de conexão do dispositivo e reconectá-lo ao IoT Platform.

Etapa 6: Sair do programa

Chame aiot_bootstrap_deinit para destruir a instância do cliente bootstrap e liberar recursos.

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

Próximos passos

  • Após configure o arquivo de código de exemplo, compile-o para gerar um arquivo executável. Neste exemplo, o arquivo executável ./demos/bootstrap-posix-demo é gerado.

    Para mais informações, consulte Compilar e execute.

  • Para obter mais informações sobre os resultados da execução, consulte Logs de tempo de execução.