Communiquer avec un courtier MQTT en utilisant les clients Paho sur Dusun Services d'envoi

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.
Table des Matières

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 ».

Image 38

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

  1. Créer un objet client
  2. Définir les options pour se connecter à un serveur MQTT
  3. Configurez les fonctions de rappel si une opération multithread (mode asynchrone) est utilisée.
  4. Abonnez-vous à tous les sujets que le client doit recevoir
  5. Répétez jusqu'à la fin :
    • Publier tous les messages dont le client a besoin
    • Gérer tous les messages entrants
  6. Déconnecter le client
  7. 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 :

Image 39

Image 40

Image 41

Image 42

Image 43

 

Image 44

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.

Image 45

Spécifications des produits IoT associés

Terminal d'acquisition de données EMS DSGK-130 AI

Terminal d'acquisition de données DSGK-130 1. Introduction 1.1 Description du produit Ce produit est un terminal d'acquisition de données, prenant en charge l'acquisition de données et l'émission d'instructions de contrôle

Carte centrale RK3328

La carte mère RK3328 appartient à la carte mère intelligente Android, qui convient généralement à la reconnaissance faciale, aux produits de terminaux d'affichage intelligents, aux produits de terminaux vidéo, à l'industrie

Vous recherchez un fournisseur d'appareils IoT pour vos projets ?

CONTACTEZ-NOUS

    Ce site est protégé par reCAPTCHA et Google Politique de Confidentialité que le béton ey Conditions d’utilisation s'appliquent.

    CONTACTEZ-NOUS

      Ce site est protégé par reCAPTCHA et Google Politique de Confidentialité que le béton ey Conditions d’utilisation s'appliquent.

      Bienvenue chez DusunIoT

      Salut 👋 Y a-t-il quelque chose que nous pouvons vous aider aujourd'hui ? Veuillez remplir le formulaire ci-dessous pour que l'équipe fasse un suivi si vous devenez déconnecté.

        DusunIoT Programme de distribution

          Ce site est protégé par reCAPTCHA et Google Politique de Confidentialité que le béton ey Conditions d’utilisation s'appliquent.

            Ce site est protégé par reCAPTCHA et Google Politique de Confidentialité que le béton ey Conditions d’utilisation s'appliquent.