Connectez un appareil à Alibaba Cloud IoT Platform et échangez des messages en utilisant la bibliothèque Paho MQTT pour Go.
Remarques sur l'utilisation
Toutes les opérations décrites dans cette rubrique utilisent des autorisations utilisateur standard. Exécutez la commande sudo si une opération requiert des privilèges administrateur.
Prérequis
Un produit et un appareil doivent être créés dans la console IoT Platform, et les informations de certificat de l'appareil (ProductKey, DeviceName et DeviceSecret) doivent être obtenues. Instructions de configuration :
Préparation de l'environnement de développement
Installez Go :
-
Sous macOS, exécutez la commande suivante :
brew install go -
Sous Ubuntu, exécutez la commande suivante :
sudo apt-get install golang-go -
Sous Windows, téléchargez et installez Go depuis le site officiel de Go.
RemarqueLes utilisateurs situés en Chine continentale doivent utiliser un VPN pour accéder au site officiel de Go.
Téléchargement de la bibliothèque Paho MQTT pour Go
Le projet Paho prend en charge plusieurs langages de programmation. Les liens de téléchargement sont disponibles sur la page Eclipse Paho Downloads.
Exécutez les commandes suivantes pour installer la bibliothèque Paho MQTT et ses dépendances :
go get github.com/eclipse/paho.mqtt.golang
go get github.com/gorilla/websocket
go get golang.org/x/net/proxy
Connexion d'un appareil à IoT Platform
-
Téléchargez le fichier MqttSign.go fourni par Alibaba Cloud. Ce fichier contient le code source nécessaire pour obtenir les paramètres de connexion MQTT.
Le fichier MqttSign.go définit une fonction qui génère les paramètres de connexion MQTT. Appelez cette fonction pour connecter votre appareil à IoT Platform.
-
Définition :
type AuthInfo struct { password, username, mqttClientId string; } func calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp string) AuthInfo; -
Description :
Renvoie les paramètres de connexion MQTT : username, password et mqttClientId.
-
Paramètres d'entrée :
Paramètre
Type
Description
productKey
String
ProductKey du produit auquel l'appareil appartient.
deviceName
String
DeviceName de l'appareil.
deviceSecret
String
DeviceSecret de l'appareil.
clientId
String
ID de l'appareil. Jusqu'à 64 caractères. Il est recommandé d'utiliser l'adresse MAC ou le numéro de série (SN) de l'appareil.
timeStamp
String
Horodatage de l'heure actuelle. Unité : millisecondes.
-
Paramètres de sortie :
Cette fonction renvoie une structure
AuthInfocontenant les champs suivants :Paramètre
Type
Description
username
String
Nom d'utilisateur pour la connexion MQTT.
password
String
Mot de passe pour la connexion MQTT.
mqttClientId
String
ID du client MQTT.
-
-
Ajoutez un fichier programme pour connecter un appareil à IoT Platform.
Écrivez un programme qui appelle la fonction située dans le fichier MqttSign.go afin d'obtenir les paramètres de connexion MQTT.
Les sections suivantes décrivent comment développer le programme de l'appareil à l'aide d'exemples de code.
-
Spécifiez les informations de l'appareil.
// set the device info, include product key, device name, and device secret var productKey string = "a1Zd7n5***" var deviceName string = "testdevice" var deviceSecret string = "UrwclDV33NaFSmk0JaBxNTqgSrJW****" // set timestamp, clientid, subscribe topic and publish topic var timeStamp string = "1528018257135" var clientId string = "192.168.****" var subTopic string = "/" + productKey + "/" + deviceName + "/user/get"; var pubTopic string = "/" + productKey + "/" + deviceName + "/user/update"; -
Spécifiez les informations de connexion MQTT.
Appelez la fonction calculate_sign() du fichier MqttSign.go. Cette fonction renvoie les paramètres username, password et mqttClientId en fonction des entrées clientId, productKey, deviceName, deviceSecret et timeStamp. Ajoutez le résultat à la structure opts.
// set the login broker url var raw_broker bytes.Buffer raw_broker.WriteString("tls://") raw_broker.WriteString(productKey) raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883") opts := MQTT.NewClientOptions().AddBroker(raw_broker.String()); // calculate the login auth info, and set it into the connection options auth := calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp) opts.SetClientID(auth.mqttClientId) opts.SetUsername(auth.username) opts.SetPassword(auth.password) opts.SetKeepAlive(60 * 2 * time.Second) opts.SetDefaultPublishHandler(f)ImportantSi vous utilisez une instance publique de l'ancienne version, remplacez cn-shanghai dans
raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883")par l'ID de la région où se trouve votre appareil. Pour obtenir la liste des ID de région, consultez la page Liste des régions.-
Si vous utilisez une instance Enterprise Edition ou une instance publique de la nouvelle version, remplacez
raw_broker.String()dansopts := MQTT.NewClientOptions().AddBroker(raw_broker.String());par$<MQTT endpoint>:1833. Exemple :opts := MQTT.NewClientOptions().AddBroker("iot-***.mqtt.iothub.aliyuncs.com:1883");.Pour savoir comment obtenir les points de terminaison MQTT, consultez la page Afficher les points de terminaison des instances publiques et Enterprise Edition.
Pour plus d'informations sur les instances IoT Platform, consultez la page Présentation des instances.
-
Appelez la fonction Connect() de la bibliothèque Paho MQTT pour Go afin de connecter l'appareil à IoT Platform.
// create and start a client using the above ClientOptions c := MQTT.NewClient(opts) if token := c.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } fmt.Print("Connect aliyun IoT Cloud Success\n"); -
Appelez Publish() pour publier des messages. Spécifiez la rubrique cible et la charge utile du message.
// publish 5 messages to pubTopic("/a1Zd7n5****/deng/user/update") for i := 0; i < 5; i++ { fmt.Println("publish msg:", i) text := fmt.Sprintf("ABC #%d", i) token := c.Publish(pubTopic, 0, false, text) fmt.Println("publish msg: ", text) token.Wait() time.Sleep(2 * time.Second) }Pour en savoir plus sur les rubriques, consultez la page Qu'est-ce qu'une rubrique ?
-
Appelez Subscribe() pour s'abonner à une rubrique et recevoir des messages provenant d'IoT Platform.
// subscribe to subTopic("/a1Zd7n5***/deng/user/get") and request messages to be delivered if token := c.Subscribe(subTopic, 0, nil); token.Wait() && token.Error() != nil { fmt.Println(token.Error()) os.Exit(1) } fmt.Print("Subscribe topic " + subTopic + " success\n");
Pour en savoir plus sur les modèles de communication entre l'appareil et le cloud, consultez la page Présentation des communications entre les appareils, IoT Platform et les serveurs.
-
Compilez le projet.
Exemple de code
Connectez un appareil à IoT Platform en utilisant l'exemple de code fourni.
-
Téléchargez et décompressez le package de démonstration.
Le package aiot-go-demo contient les fichiers suivants :
Fichier
Description
MqttSign.go
Contient le code permettant de générer les paramètres de connexion MQTT. Lorsque le fichier iot.go s'exécute, il appelle calculate_sign() pour obtenir les paramètres username, password et mqttClientId.
iot.go
Contient la logique de connexion d'un appareil à IoT Platform et d'activation de la communication.
x509
Certificat racine d'IoT Platform, requis pour les connexions des appareils.
RemarqueSi vous connectez un appareil à IoT Platform via une passerelle cloud MQTT, vous pouvez utiliser un certificat personnalisé pour vérifier l'identité de l'appareil. Pour plus d'informations, consultez l'Étape 1 : Générer des certificats personnalisés.
-
Remplacez les informations de l'appareil dans le fichier iot.go par vos propres informations.
Utilisez un éditeur de texte pour modifier le fichier iot.go :
Remplacez les valeurs des paramètres productKey, deviceName et deviceSecret par les informations de certificat de votre appareil.
-
Facultatif : configurez les paramètres timeStamp et clientId. Vous pouvez remplacer la valeur du paramètre clientId par l'adresse MAC ou le numéro de série (SN) de votre appareil.
Ces paramètres sont facultatifs pour la connectivité, mais il est recommandé de les définir avec des valeurs réelles.
Modifiez les paramètres de connexion MQTT utilisés pour connecter l'appareil à IoT Platform. Pour plus d'informations, reportez-vous à l'étape 2 de la section « Connexion d'un appareil à IoT Platform » de cette rubrique.
-
Exécutez la commande suivante dans l'invite de commandes pour lancer le fichier iot.go :
go run iot.go MqttSign.goAprès l'exécution, les journaux locaux suivants sont générés :
clientId192.168.****deviceNametestdeviceproductKeya1Zd7n5****timestamp1528018257135 1b865320fc183cc747041c9faffc9055fc45**** Connect aliyun IoT Cloud Success Subscribe topic /a1Zd7n5****/testdevice/user/get success publish msg: 0 publish msg: ABC #0 publish msg: 1 publish msg: ABC #1 publish msg: 2 publish msg: ABC #2 publish msg: 3 publish msg: ABC #3 publish msg: 4 publish msg: ABC #4 publish msg: 5 publish msg: ABC #5Connectez-vous à la console IoT Platform pour afficher l'état de l'appareil et les journaux de votre instance.
Dans le volet de navigation de gauche, choisissez . Vous constaterez que l'état de l'appareil est Online.
Choisissez . Vous pouvez consulter les IoT Platform logs et les on-premises device logs. Pour plus d'informations, consultez les pages Journaux IoT Platform et Journaux des appareils locaux.
Codes d'erreur
Si l'appareil ne parvient pas à se connecter à IoT Platform via MQTT, utilisez les codes d'erreur pour résoudre le problème. Pour plus d'informations sur les codes d'erreur côté serveur, consultez la page Dépannage.