Utilisez les opérations API du Link SDK for C pour distribuer des périphériques à l'aide du fichier d'exemple de code ./demos/bootstrap_posix_demo.c.
Informations générales
Pour en savoir plus sur la fonctionnalité de distribution de périphériques, consultez la rubrique Présentation.
Une fois les informations de connexion du périphérique obtenues via la distribution, connectez-le à IoT Platform. Pour en savoir plus sur les connexions MQTT, consultez la rubrique Connexion MQTT.
Étape 1 : Initialisation
-
Ajoutez le fichier d'en-tête.
…… …… #include "aiot_bootstrap_api.h" -
Configurez les dépendances sous-jacentes et la journalisation.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb); -
Appelez aiot_bootstrap_init pour créer un handle
Bootstrapbootstrap_handle = aiot_bootstrap_init(); if (bootstrap_handle == NULL) { printf("aiot_bootstrap_init failed\n"); return -1; }
Étape 2 : Configuration des fonctionnalités
Appelez aiot_bootstrap_setopt pour configurer les fonctionnalités suivantes.
-
Important
Le type de connexion sécurisée pour la couche TLS (Transport Layer Security) doit être basé sur un certificat (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); …… …… -
Paramètre
Exemple
Description
product_key
a18wP******
Les informations d'authentification du périphérique. Pour en savoir plus, consultez la rubrique Obtenir les informations de vérification du périphérique.
Cet exemple utilise la méthode d'authentification par certificat unique par périphérique.
Le paramètre device_secret est utilisé lorsque le périphérique établit une connexion MQTT après avoir obtenu le nom de domaine et le numéro de port de connexion.
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
-
-
Configurez les callbacks de messages.
-
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); -
Élément de configuration
Valeur d'exemple
Description
AIOT_BOOTSTRAPOPT_RECV_HANDLER
demo_bootstrap_recv_handler
Cette fonction est appelée lors de la réception d'un message de distribution de périphérique.
AIOT_BOOTSTRAPOPT_USERDATA
demo_info
Définit le contexte utilisateur. Lorsque
demo_bootstrap_recv_handlerest déclenché,userdataest renvoyé. Convertissez les données renvoyées dans le type approprié avant utilisation.
-
-
Configurez la surveillance d'état.
-
Définissez le callback de surveillance d'état.
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; } } -
Spécifiez les callbacks de surveillance d'état.
-
Exemple de code :
aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_EVENT_HANDLER, (void *)demo_bootstrap_event_handler); -
Paramètres :
Élément de configuration
Valeur d'exemple
Description
AIOT_BOOTSTRAPOPT_EVENT_HANDLER
demo_bootstrap_event_handler
When the device connection status changes, the corresponding processing logic defined in this callback function is executed.
-
-
Étape 3 : Envoi d'une requête
Avant d'envoyer une requête de distribution de périphérique, assurez-vous que l'opération est configurée dans la console IoT Platform. Sinon, le nom de domaine et le port renvoyés correspondront à la connexion actuelle du périphérique.
Appelez aiot_bootstrap_send_request pour envoyer une requête HTTPS de distribution de périphérique au serveur, en utilisant les paramètres configurés à l'étape précédente.
Pour en savoir plus sur la requête HTTPS, consultez la rubrique Format des données de requête pour la distribution de périphériques.
res = aiot_bootstrap_send_request(bootstrap_handle);
if (res < STATE_SUCCESS) {
printf("aiot_bootstrap_send_request failed, res: -0x%04X\n", -res);
return -1;
}
Étape 4 : Réception d'un accusé de réception
-
Après l'envoi du message, IoT Platform renvoie une réponse. Le périphérique appelle
aiot_bootstrap_recvpour recevoir les données de réponse et les traiter via le callback de message.res = aiot_bootstrap_recv(bootstrap_handle); if (res < STATE_SUCCESS) { printf("aiot_bootstrap_recv failed, res: -0x%04X\n", -res); return -1; } -
Implémentez la logique de la fonction de callback.
Implémentez la logique de la fonction de callback selon les informations suivantes :
Type de message
Description
AIOT_BOOTSTRAPRECV_STATUS_CODE
Code d'état HTTP renvoyé par le serveur. Pour en savoir plus, consultez les codes d'état HTTP.
L'exemple de code ne traite pas le code d'état reçu. Ajoutez votre propre logique de traitement si nécessaire.
AIOT_BOOTSTRAPRECV_CONNECTION_INFO
Message d'accusé de réception renvoyé par IoT Platform après le lancement de la distribution de périphériques.
Le message reçu est de type aiot_bootstrap_recv_t. Enregistrez localement sur votre périphérique les valeurs host et port, qui correspondent au nom de domaine et au numéro de port pour la connexion du périphérique.
L'exemple de code se contente d'afficher le message de distribution de périphérique reçu.
AIOT_BOOTSTRAPRECV_NOTIFY
Message de notification de distribution de périphérique envoyé par IoT Platform.
Après avoir effectué l'opération de distribution de périphérique dans IoT Platform, un message de distribution est envoyé au périphérique. Pour en savoir plus, consultez la rubrique Distribution de périphériques dans IoT Platform.
L'exemple de code se contente d'afficher le message. Ajoutez une logique pour déconnecter le périphérique, envoyer une nouvelle requête de distribution, puis rétablir la connexion.
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; } }
(Facultatif) Étape 5 : Établissement d'une connexion MQTT
Une fois le nom de domaine et le port requis pour le périphérique obtenus, établissez une connexion MQTT entre le périphérique et IoT Platform. Pour en savoir plus sur les connexions MQTT, consultez la rubrique Connexion MQTT.
Une fois la connexion MQTT établie, suivez les étapes ci-dessous pour lancer à nouveau la distribution de périphériques.
-
Appelez aiot_bootstrap_setopt pour associer le handle de connexion MQTT.
-
aiot_bootstrap_setopt(bootstrap_handle, AIOT_BOOTSTRAPOPT_MQTT_HANDLE, (void *)mqtt_handle); -
Élément de configuration
Exemple
Description
AIOT_BOOTSTRAPOPT_MQTT_HANDLE
mqtt_handle
Cette fonction de callback est déclenchée lorsque le périphérique reçoit un message de distribution de périphérique envoyé par IoT Platform.
-
-
Connectez-vous à la console IoT Platform et effectuez l'opération de distribution de périphériques.
Pour en savoir plus, consultez la rubrique Distribution de périphériques dans IoT Platform.
Lorsque le périphérique reçoit le message de distribution envoyé, il se déconnecte. Répétez ensuite les étapes 1 à 4 pour obtenir le nouveau nom de domaine de connexion et reconnecter le périphérique à IoT Platform.
Étape 6 : Quitter le programme
Appelez aiot_bootstrap_deinit pour détruire l'instance client bootstrap et libérer les ressources.
res = aiot_bootstrap_deinit(&bootstrap_handle);
if (res < 0) {
printf("demo_start_stop failed\n");
return -1;
}
Étapes suivantes
-
Après avoir configuré le fichier d'exemple de code, compilez-le pour générer un fichier exécutable. Dans cet exemple, le fichier exécutable ./demos/bootstrap-posix-demo est généré.
Pour en savoir plus, consultez la rubrique Compiler et exécuter.
Pour en savoir plus sur les résultats d'exécution, consultez la rubrique Journaux d'exécution.