Dusun Les passerelles prennent en charge la plupart des protocoles et permettent aux utilisateurs de créer leurs propres programmes qui utilisent ces protocoles tels que MQTT pour envoyer des données aux nuages.
Cet article montre comment utiliser Paho qui contient des bibliothèques client MQTT open source pour communiquer avec un courtier MQTT.
Introduction
Une passerelle/hub IoT agrège les données des capteurs, les traduit entre les protocoles des capteurs, traite les données des capteurs avant de les envoyer vers les clouds. Il existe plusieurs protocoles utilisés par l'IoT pour les passerelles communiquant avec les clouds, y compris Message Queuing Telemetry Transport (MQTT), Constrained Application Protocol (CoAP), etc. MQTT est un protocole de messagerie basé sur la publication et l'abonnement et devient un protocole très populaire pour l'IoT pour communication internet. Dusun Les passerelles prennent en charge la plupart des protocoles et permettent aux utilisateurs de créer leurs propres programmes qui utilisent ces protocoles tels que MQTT pour envoyer des données aux nuages. Cet article montre comment utiliser Paho qui contient des bibliothèques client MQTT open source pour communiquer avec un courtier MQTT.
1. Qu'est-ce que le MQTT et l'OPS
MQTT et son principe de fonctionnement
MQTT est un protocole de messagerie léger de publication/abonnement, créé à l'origine par IBM et Arcom vers 1998. Il est conçu comme un protocole de messagerie léger qui utilise des opérations de publication/abonnement pour échanger des données entre les clients et le serveur. De plus, sa petite taille, sa faible consommation d'énergie, ses paquets de données minimisés et sa facilité de mise en œuvre font de ce protocole l'idéal du monde « machine à machine » ou « Internet des objets ». Le serveur MQTT est appelé un courtier et les clients sont simplement les appareils connectés. Lorsqu'un appareil (un client) souhaite envoyer des données au courtier, nous appelons cette opération une « publication ». Lorsqu'un appareil (un client) souhaite recevoir des données du courtier, nous appelons cette opération un « abonnement ».

Qu'est-ce que Paho
Construction Éclipse Paho projet devient rapidement une source de quelques excellents clients MQTT. Eclipse Paho est une implémentation open-source du client MQTT, disponible dans divers langages de programmation - actuellement, il contient des implémentations en C, Java, JavaScript, Python (contribué par le projet moustique), Lua, C++, Embedded/minimal C, Go… et un client Objective-C est sur le point d'être ajouté. Les utilisateurs peuvent vous Paho pour envoyer des messages d'abonnement et de publication à un courtier MQTT tel que le courtier Mosquitto. Les utilisateurs peuvent déployer des bibliothèques Paho sur Dusun passerelles et publier des messages de données de capteur sur leur serveur de courtier MQTT. Alors Dusun les passerelles publient l'état des capteurs au courtier MQTT, les applications utilisateur s'abonnent au sujet et surveillent l'état du capteur à distance.
La procédure pour écrire une application basée sur la bibliothèque client Paho
- Créer un objet client
- Définir les options pour se connecter à un serveur MQTT
- Configurez les fonctions de rappel si une opération multithread (mode asynchrone) est utilisée.
- Abonnez-vous à tous les sujets que le client doit recevoir
- Répétez jusqu'à la fin :
- Publier tous les messages dont le client a besoin
- Gérer tous les messages entrants
- Déconnecter le client
- Libérez toute mémoire utilisée par le client
2.Échantillons de code client de l'OPS
Le projet Paho a fourni des exemples qui peuvent être révisés pour répondre aux besoins des utilisateurs. Paho_c_sub.c fournit des codes pour l'abonnement aux rubriques MQTT, tandis que Paho_c_pub.c est l'exemple de code pour la publication de messages MQTT. MQTTClient_publish.c/ MQTTClient_subscribe.c sont des exemples simples pour publier/s'abonner à des rubriques MQTT. Pour plus de simplicité, MQTTClient_publish et MQTTClient_subscribe.c ont été utilisés pour expliquer la procédure d'un client MQTT.
1) Client de publication MQTT
#define ADDRESS "tcp://localhost:1888" //broker address;
#define CLIENTID "ExampleClientPub"
#define TOPIC "my_topic" //MQTT topic name
#define PAYLOAD "{\"temperature\":20}" //message to be sent;
#define QOS 1
#define TIMEOUT 10000L
int main(int argc, char* argv[])
{
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc;
/*Create a client object*/
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
/*Set the options to connect to an MQTT server*/
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
/* publish a message to the topic */
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = (int)strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
printf("Waiting for up to %d seconds for publication of %s\n"
"on topic %s for client with ClientID: %s\n",
(int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);
rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);
/* Disconnect the client*/
MQTTClient_disconnect(client, 10000);
/* Free any memory being used by the client*/
MQTTClient_destroy(&client);
return rc;
}
2) Client d'abonnement MQTT
#define ADDRESS "tcp://localhost:1883" //broker address;
#define CLIENTID "ExampleClientSub"
#define TOPIC "my_topic" //MQTT topic name
#define PAYLOAD "Hello World!"
#define QOS 1
#define TIMEOUT 10000L
volatile MQTTClient_deliveryToken deliveredtoken;
void delivered(void *context, MQTTClient_deliveryToken dt)
{
printf("Message with token value %d delivery confirmed\n", dt);
deliveredtoken = dt;
}
/* received message callback function*/
int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
int i;
char* payloadptr;
printf("Message arrived\n");
printf(" topic: %s\n", topicName);
printf(" message: ");
payloadptr = message->payload;
for(i=0; ipayloadlen; i++)
{
putchar(*payloadptr++);
}
putchar('\n');
MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
return 1;
}
/* Connection lost callback function*/
void connlost(void *context, char *cause)
{
printf("\nConnection lost\n");
printf(" cause: %s\n", cause);
}
int main(int argc, char* argv[])
{
/*Create a client object*/
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
int rc;
int ch;
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
/*Set the options to connect to an MQTT server*/
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
/*Set callback functions*/
MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n"
"Press Q to quit\n\n", TOPIC, CLIENTID, QOS);
/* Subscribe to any topics the client needs to receive*/
MQTTClient_subscribe(client, TOPIC, QOS);
/*waiting Q/q key input to exit*/
do
{
ch = getchar();
} while(ch!='Q' && ch != 'q');
/* unsubscribe, disconnect and free the client*/
MQTTClient_unsubscribe(client, TOPIC);
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return rc;
}
3. Tester les clients de l'OPS
Construction Dusun passerelle est basée sur les systèmes d'exploitation Linux, puis la compilation du projet Paho a peu de différence pour Linux PC et Dusun passerelles. Ici, nous compilons et testons le client Paho sur un PC Linux, puis montrons comment compiler le client Paho pour la passerelle dont l'architecture CPU est MIPS.
1) Compiler le client Paho MQTT et le tester sur PC
Compiler Paho est facile sur un PC Linux avec les commandes suivantes :
git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
a prendre une
sudo faire l'installation
Ensuite, nous pouvons trouver les binaires compilés dans le répertoire ./build/output. Dans le répertoire ./build/output/samples, nous pouvons voir les paho_c_pub/paho_c_sub et MQTTClient_publish/MQTTClient_subscribe que nous avons décrits ci-dessus et qui seront utilisés pour les tests ici.
Nous devrions installer un serveur eclipse mosquitto avant de tester comme les commandes suivantes :
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get installer mosquitto
Une fois le moustique installé, nous démarrons le courtier moustique (1888 : numéro de port) ;
Moustique –p 1888 -v
Nous testons le client paho en démarrant les clients Paho, les figures ci-dessous montrent les résultats :




2) Compilation croisée du client Paho MQTT pour Dusun passerelle.
Révisez le makefile dans le répertoire Paho (par exemple /paho.mqtt.c) : ajoutez les lignes suivantes, omettez cc?=gcc dans le fichier. vous devez remplacer /OpenWrt-SDK par votre dossier OpenWrt SDK.
CC = ./OpenWrt-SDK/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
CFLAGS = -I /OpenWrt-SDK/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include
LDFLAGS =-L/OpenWrt-SDK/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib -L/home/guojie/Software/OpenWrt-SDK/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib
Dans une console, tapez les commandes suivantes et le client Paho pour la passerelle sera compilé.
cd paho.mqtt.c
sudo faire
Enfin, copiez les fichiers de sortie sur la passerelle. Le programme est prêt à être utilisé pour publier/s'abonner aux commandes MQTT. Les utilisateurs peuvent réviser MQTTClient_publish.c/ MQTTClient_subscribe.c pour répondre à vos besoins.













