Tous les produits
Search
Centre de documentation

IoT Platform:Utilisation de la bibliothèque Paho MQTT for Embedded C pour connecter un appareil à IoT Platform

Dernière mise à jour :Aug 10, 2026

Cette rubrique explique comment utiliser le projet open source Paho MQTT for Embedded C afin de connecter un appareil à IoT Platform et d'activer la messagerie.

Remarques relatives à l'utilisation

Dans cette rubrique, les opérations sont effectuées avec les autorisations d'un utilisateur standard. Si vous devez réaliser des actions spécifiques nécessitant des droits d'administrateur, exécutez la commande sudo.

Prérequis

Un produit et un appareil ont été créés dans une instance via la console IoT Platform. Vous avez obtenu le certificat de l'appareil ainsi que un endpoint MQTT. Les informations du certificat incluent ProductKey, DeviceName et DeviceSecret. Pour plus de détails, consultez les rubriques suivantes :

Préparation de l'environnement de développement

Cet exemple s'appuie sur Ubuntu 16.04-LTS pour mettre en place l'environnement de développement. Exécutez les commandes ci-dessous pour préparer cet environnement :

sudo apt-get update
sudo apt-get install build-essential git sed cmake

Téléchargement de la bibliothèque Paho MQTT pour C

Exécutez la commande suivante pour cloner la bibliothèque Paho MQTT pour C :

git clone https://github.com/eclipse-paho/paho.mqtt.embedded-c.git
Remarque

Le code d'exemple présenté dans cette rubrique utilise la branche master. L'ID de validation correspondant est 29ab2aa29c5e47794284376d7f8386cfd54c3eed.

Le projet Paho MQTT for Embedded C comprend les sous-projets suivants :

  • MQTTPacket : fournit la sérialisation et la désérialisation des paquets de données MQTT, ainsi que certaines fonctions utilitaires.

  • MQTTClient : encapsule le programme client C++ de haut niveau généré par MQTTPacket.

  • MQTTClient-C : encapsule le programme client C de haut niveau généré par MQTTPacket.

    Le projet MQTTClient-C contient les répertoires et fichiers suivants :

    ├── CMakeLists.txt
    ├── samples
    │   ├── CMakeLists.txt
    │   ├── FreeRTOS
    │   └── linux
    ├── src
    │   ├── CMakeLists.txt
    │   ├── FreeRTOS
    │   ├── MQTTClient.c
    │   ├── MQTTClient.h
    │   ├── cc3200
    │   └── linux
    └── test
        ├── CMakeLists.txt
        └── test1.c
    • Le répertoire samples propose des exemples de code pour les systèmes FreeRTOS et Linux.

    • Le répertoire src contient le code nécessaire à l'implémentation de MQTTClient ainsi que les pilotes réseau pour le portage vers FreeRTOS, CC3200 et Linux.

    Pour plus d'informations sur l'API Paho MQTT, reportez-vous au fichier MQTTClient.h.

Connexion du client à IoT Platform

  1. Cliquez sur aiot_mqtt_sign.c et copiez le code source fourni par Alibaba Cloud afin d'obtenir les paramètres de connexion MQTT. Créez ensuite un fichier nommé aiot_mqtt_sign.c en local et collez-y le code.

    Le fichier aiot_mqtt_signal.c définit la fonction aiotMqttSign().

    • Définition :

      int aiotMqttSign(const char *productKey, const char *deviceName, const char *deviceSecret,
                       char clientId[150], char username[65], char password[65]);
    • Fonction :

      Calcule les paramètres username, password et clientID requis pour connecter un appareil à IoT Platform via MQTT.

    • Paramètres d'entrée :

      Paramètre

      Type

      Description

      productKey

      const char *

      ProductKey du produit auquel l'appareil appartient. Ce ProductKey permet d'identifier l'appareil dans la console IoT Platform.

      deviceName

      const char *

      DeviceName de l'appareil. Ce DeviceName permet d'identifier l'appareil dans la console IoT Platform.

      deviceSecret

      const char *

      DeviceSecret de l'appareil. Ce DeviceSecret permet d'identifier l'appareil dans la console IoT Platform.

    • Sortie :

      Paramètre

      Type

      Description

      username

      char *

      Nom d'utilisateur utilisé pour établir la connexion MQTT.

      password

      char *

      Mot de passe utilisé pour établir la connexion MQTT.

      clientId

      char *

      ID du client MQTT.

    • Codes de réponse

      Code de réponse

      Description

      0

      L'appel a réussi.

      -1

      L'appel a échoué.

  2. Ajoutez un fichier programme permettant de connecter un appareil à IoT Platform.

    Vous devez écrire un programme qui appelle la fonction aiotMqttSign() présente dans le fichier aiot_mqtt_sign.c afin d'obtenir les paramètres nécessaires à l'établissement d'une connexion MQTT avec IoT Platform.

    Cette section fournit les instructions de développement et le code d'exemple.

    • Appelez la fonction aiotMqttSign() pour initialiser les paramètres clientId, username et password.

      #define EXAMPLE_PRODUCT_KEY            "a11xsrW****"
      #define EXAMPLE_DEVICE_NAME            "paho_****"
      #define EXAMPLE_DEVICE_SECRET       "Y877Bgo8X5owd3lcB5wWDjryNPoB****"
      
      extern int aiotMqttSign(const char *productKey, const char *deviceName, const char *deviceSecret,
                              char clientId[150], char username[65], char password[65]);
      
      /* invoke aiotMqttSign to generate mqtt connect parameters */
      char clientId[150] = {0};
      char username[65] = {0};
      char password[65] = {0};
      
      if ((rc = aiotMqttSign(EXAMPLE_PRODUCT_KEY, EXAMPLE_DEVICE_NAME, EXAMPLE_DEVICE_SECRET, clientId, username, password) < 0)) {
          printf("aiotMqttSign -%0x4x\n", -rc);
          return -1;
      }
      printf("clientid: %s\n", clientId);
      printf("username: %s\n", username);
      printf("password: %s\n", password);
    • Connectez le client à IoT Platform.

      Effectuez les opérations suivantes :

      • Appelez les fonctions NetworkInit() et NetworkConnect() pour établir une connexion TCP.

      • Appelez la fonction MQTTClientInit() pour initialiser le client MQTT.

      • Configurez la structure MQTTPacket_connectData contenant les paramètres de connexion MQTT.

      Exemple de code :

      /* network init and establish network to aliyun IoT platform */
      NetworkInit(&n);
      rc = NetworkConnect(&n, host, port);
      printf("NetworkConnect %d\n", rc);
      
      /* init mqtt client */
      MQTTClientInit(&c, &n, 1000, buf, sizeof(buf), readbuf, sizeof(readbuf));
      
      /* set the default message handler */
      c.defaultMessageHandler = messageArrived;
      
      /* set mqtt connect parameter */
      MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
      data.willFlag = 0;
      data.MQTTVersion = 3;
      data.clientID.cstring = clientId;
      data.username.cstring = username;
      data.password.cstring = password;
      data.keepAliveInterval = 60;
      data.cleansession = 1;
      printf("Connecting to %s %d\n", host, port);
      
      rc = MQTTConnect(&c, &data);
      printf("MQTTConnect %d, Connect aliyun IoT Cloud Success!\n", rc);
    • Publiez des messages.

      Appelez la fonction MQTTPublish() pour publier des messages au format personnalisé vers la rubrique personnalisée spécifiée.

      Pour plus d'informations sur les rubriques, consultez la section Présentation des rubriques.

      char *pubTopic = "/"EXAMPLE_PRODUCT_KEY"/"EXAMPLE_DEVICE_NAME"/user/update";
      int cnt = 0;
      unsigned int msgid = 0;
      while (!toStop)
      {
          MQTTYield(&c, 1000);    
      
          if (++cnt % 5 == 0) {
              MQTTMessage msg = {
                  QOS1,
                  0,
                  0,
                  0,
                  "Hello world",
                  strlen("Hello world"),
              };
              msg.id = ++msgid;
              rc = MQTTPublish(&c, pubTopic, &msg);
              printf("MQTTPublish %d, msgid %d\n", rc, msgid);
          }
      }
    • Abonnez-vous à une rubrique pour recevoir des messages depuis IoT Platform.

      void messageArrived(MessageData* md)
      {
          MQTTMessage* message = md->message;
      
          printf("%.*s\t", md->topicName->lenstring.len, md->topicName->lenstring.data);
          printf("%.*s\n", (int)message->payloadlen, (char*)message->payload);
      }
      
      char *subTopic = "/"EXAMPLE_PRODUCT_KEY"/"EXAMPLE_DEVICE_NAME"/user/get";
      
      printf("Subscribing to %s\n", subTopic);
      rc = MQTTSubscribe(&c, subTopic, 1, messageArrived);
      printf("MQTTSubscribe %d\n", rc);

    Découvrez les modèles de communication entre les appareils et le cloud dans la rubrique Présentation des communications entre les appareils, IoT Platform et les serveurs.

  3. Copiez le fichier aiot_mqtt_signal.c ainsi que le fichier modifié à l'étape 2 dans le répertoire ../paho.mqtt.embedded-c/MQTTClient-C/samples/linux. Compilez ensuite le projet.

Exemple de code

Vous pouvez exécuter l'exemple de code pour vous connecter à IoT Platform.

  1. Téléchargez le package de démonstration et décompressez-le.

    Les fichiers suivants sont obtenus :

    Fichier de certificat

    Description

    aiot_mqtt_sign.c

    Ce fichier contient le code utilisé pour obtenir les paramètres de connexion MQTT. Lors de l'exécution du fichier aiot_c_demo.c, la fonction aiotMqttSign() est appelée pour récupérer les valeurs des paramètres username, password et clientId.

    aiot_c_demo.c

    Ce fichier contient la logique de connexion et de communication avec IoT Platform.

  2. Dans le fichier aiot_c_demo.c, remplacez les informations de l'appareil par vos propres informations.

    • Remplacez les valeurs des paramètres EXAMPLE_PRODUCT_KEY, EXAMPLE_DEVICE_NAME et EXAMPLE_DEVICE_SECRET par les informations de certificat de votre appareil.

      #define EXAMPLE_PRODUCT_KEY            "The ProductKey of the product" 
      #define EXAMPLE_DEVICE_NAME            "The DeviceName of the device" 
      #define EXAMPLE_DEVICE_SECRET          "The DeviceSecret of the device"
    • Modifiez l'endpoint dans char *host = EXAMPLE_PRODUCT_KEY".iot-as-mqtt.cn-shanghai.aliyuncs.com".

      Pour plus d'informations sur les endpoints des instances publiques et des instances Enterprise Edition, ainsi que sur leur format, consultez la section Afficher l'endpoint d'une instance.

  3. Déplacez les fichiers aiot_mqtt_signal.c et aiot_c_demo.c vers le répertoire ../paho.mqtt.embedded-c/MQTTClient-C/samples/linux du projet Paho.

  4. Compilez le projet et exécutez le programme.

    Vous pouvez compiler le projet en utilisant l'une des méthodes suivantes :

    • Utilisez l'outil CMake.

      1. Ajoutez les fichiers aiot_c_demo.c et aiot_mqtt_signal.c au fichier CMakeLists.txt situé dans le répertoire /paho.mqtt.embedded-c/MQTTClient-C/samples/linux.

        L'extrait de code suivant montre comment modifier le fichier CMakeLists.txt.

        add_executable(
          stdoutsubc
          stdoutsub.c
        )
        
        add_executable(
          aiot_c_demo
          aiot_c_demo.c
          aiot_mqtt_sign.c
        )
        
        target_link_libraries(stdoutsubc paho-embed-mqtt3cc paho-embed-mqtt3c)
        target_include_directories(stdoutsubc PRIVATE "../../src" "../../src/linux")
        target_compile_definitions(stdoutsubc PRIVATE MQTTCLIENT_PLATFORM_HEADER=MQTTLinux.h)
        
        target_link_libraries(aiot_c_demo paho-embed-mqtt3cc paho-embed-mqtt3c)
        target_include_directories(aiot_c_demo PRIVATE "../../src" "../../src/linux")
        target_compile_definitions(aiot_c_demo PRIVATE MQTTCLIENT_PLATFORM_HEADER=MQTTLinux.h)
      2. Revenez au répertoire /paho.mqtt.embedded-c et exécutez la commande suivante pour compiler le projet.

        mkdir build.paho
        cd build.paho
        cmake ..
        make
      3. Accédez au répertoire /paho.mqtt.embedded-c/build.paho et exécutez la commande suivante pour lancer le programme :

        ./MQTTClient-C/samples/linux/aiot_c_demo
    • Utilisez le fichier build.sh.

      1. Ouvrez le fichier build.sh situé dans le répertoire /paho.mqtt.embedded-c/MQTTClient-C/samples/linux.

      2. Dans le fichier build.sh, remplacez stdoutsub.c par aiot_mqtt_sign.c aiot_c_demo.c, et -o stdoutsub par -o aiot_c_demo. Enregistrez ensuite le fichier build.sh.

      3. Accédez au répertoire /paho.mqtt.embedded-c/MQTTClient-C/samples/linux et exécutez la commande ./build.sh.

        Après la compilation, le fichier exécutable aiot_c_demo est généré.

      4. Exécutez la commande ./aiot_c_demo pour lancer le fichier.

    Après l'exécution du fichier, les journaux locaux suivants sont générés :

    clientid: paho_mqtt&a11xsrW****|timestamp=2524608000000,_v=sdk-c-1.0.0,securemode=3,signmethod=hmacsha256,lan=C|
    username: paho_mqtt&a11xsrW****
    password: 36E955DC3D9D012EF62C80657A29328B1CFAE6186C611A17DC7939FAB637****
    NetworkConnect 0
    Connecting to a11xsrW****.iot-as-mqtt.cn-shanghai.aliyuncs.com 443
    MQTTConnect 0, Connect aliyun IoT Cloud Success!
    Subscribing to /a11xsrW****/paho_mqtt/user/get
    MQTTSubscribe 0
    MQTTPublish 0, msgid 1
    MQTTPublish 0, msgid 2
    MQTTPublish 0, msgid 3
    MQTTPublish 0, msgid 4
    MQTTPublish 0, msgid 5
    ...

    Connectez-vous à la console IoT Platform pour consulter l'état de l'appareil et les journaux dans votre instance.

    • Dans le volet de navigation de gauche, choisissez Device Management > Devices. Vous constatez que l'état de l'appareil est Online.

    • Sélectionnez Maintenance > Device Log. Cliquez ensuite sur l'onglet Cloud run log ou Device local log pour afficher les journaux. Pour plus de détails, consultez les rubriques Journaux IoT Platform et Journaux des appareils locaux.

Codes d'erreur

Si un appareil ne parvient pas à établir une connexion MQTT avec IoT Platform, vous pouvez résoudre le problème en vous basant sur le code d'erreur. Pour plus d'informations, consultez la rubrique Dépannage.