SlideShare une entreprise Scribd logo
3
Plus lue
4
Plus lue
8
Plus lue
Présentation Chiheb Ameur ABID 63/ 77
Développer un client MQTT sur RPI
Plan
1 Introduction à l’Internet des Objets
2 Architectures IOT
3 Réseaux et détections de proximité
4 Le réseau LPWAN
5 Mise en place d’une application IOT
6 Développer un client MQTT sur RPI
Présentation Chiheb Ameur ABID 64/ 77
Développer un client MQTT sur RPI
Objectif
Architecture générale d’une solution IOT
Présentation Chiheb Ameur ABID 65/ 77
Développer un client MQTT sur RPI
Présentation du projet Paho MQTT
Paho MQTT en bref
å Projet opensource développé par la fondation Eclipse
å Bibliothèque client Paho MQTT qui implémente les versions 3.1, 3.1.1.1 et 5.0 du
protocole MQTT
å API fournit en C, C ++, Java, Javascript, Python, Go, C#
å Site officiel : http://www.eclipse.org/paho
å Documentation C++ :
https://www.eclipse.org/paho/files/cppdoc/index.html
Présentation Chiheb Ameur ABID 66/ 77
Développer un client MQTT sur RPI
Installation de la bibliothèque Paho MQTT C++
Installation de la bibliothèque Paho MQTT C++ sur RPI
å Compilation et installation depuis le code source
å Elle nécessite la compilation et l’installation de la bibliothèque de Paho C version 3.1.8
ou supérieure
å Installer les paquets de dépendances
Z Outils de compilation : build-essential gcc make cmake
Z Utilisation de SSL : libssl-dev
Z Construction de la documentation : doxygen
Compilation et installation de la bibliothèque Paho MQTT C
å Télécharger le code source
git clone https://github.com/eclipse/paho.mqtt.c ; cd
paho.mqtt.c
å Compilation avec cmake
cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF
-DPAHO_BUILD_STATIC=ON -DPAHO_WITH_SSL=ON
-DPAHO_HIGH_PERFORMANCE=ON
å Installation
sudo cmake --build build/ --target install
sudo ldconfig
Présentation Chiheb Ameur ABID 67/ 77
Développer un client MQTT sur RPI
Installation de la bibliothèque Paho MQTT C++
Compilation et installation de la bibliothèque Paho MQTT C++
å Télécharger le code source
git clone https://github.com/eclipse/paho.mqtt.cpp
cd paho.mqtt.cpp
å Compilation avec cmake
cmake -Bbuild -H. -DPAHO_BUILD_STATIC=ON
-DPAHO_BUILD_DOCUMENTATION=TRUE -DPAHO_BUILD_SAMPLES=TRUE
å Installation
sudo cmake --build build/ --target install
sudo ldconfig
Présentation Chiheb Ameur ABID 68/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Connexion : la classe mqtt::async_client
å #include <async_client.h>
å La classe mqtt::async_client permet de communiquer avec un broker en utilisant
des méthodes non bloquantes
å Constructeur async_client (const string &serverURI, const string
&clientId, iclient_persistence *persistence=nullptr)
Z serverURI : spécifie l’adresse et le port du broker
Z clienId : une chaine choisie pour identifier le client
å La méthode token_ptr connect() permet d’établir la connexion. Elle renvoie un
pointeur sur un jeton permettant de surveiller l’état de la connexion
å La méthode token_ptr disconnect() permet de se déconnecter
å La méthode bool is_connected() indique si une connexion est bien établie
Présentation Chiheb Ameur ABID 69/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Connexion : la classe mqtt::token
å #include <token.h>
å La classe mqtt::token fournit un mécanisme pour surveiller les actions asynchrones
å La méthode wait() permet de bloquer la tâche courante jusqu’à que l’action associée au
jeton soit terminée
å La méthode connect_response get_connect_response() const renvoie la
réponse de l’opération de connexion. Si l’opération n’est pas encore terminée, la tâche en
cours se bloquera jusqu’à ce que le résultat soit disponible.
Connexion : la classe mqtt::connect_response
å #include <server_response.h>
å Elle fournit des informations sur une connexion établie
å Vérifier si une session existait déjà pour un client sur le serveur : le serveur a une session
persistante stockée pour le client, étant donné l’identifiant du client spécifié dans le
message de connexion.
bool mqtt::connect_response::is_session_present () const
å Renvoyer la version MQTT utilisée pour la connexion
int mqtt::connect_response::get_mqtt_version() const
Présentation Chiheb Ameur ABID 70/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Exemple : connexion à un broker
const std::string SERVER_ADDRESS("tcp://localhost:1883");
const std::string CLIENT_ID("paho_cpp_async_subcribe");
mqtt::async_client cli(SERVER_ADDRESS, CLIENT_ID);
try {
// Connect to the server
cout << "Connecting to the MQTT server..." << flush;
cli.connect()->wait();
} catch(const mqtt::exception &exc) {
cerr << "n " << exc << endl;
return 1;
}
...
try {
std::cout << "nDisconnecting from the MQTT server..." << std::flush;
cli.disconnect()->wait();
std::cout << "OK" << std::endl;
}
catch (const mqtt::exception& exc) {
std::cerr << exc << std::endl;
return 1;
}
Présentation Chiheb Ameur ABID 71/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Inscription à un sujet
å Pour récevoir les messages d’un sujet, il faut d’abord s’inscrire
token_ptr mqtt::async_client::subscribe(const string &topicFilter,int qos,const
subscribe_options &opts=subscribe_options(),const properties &props=properties())
Z topicFilter : le sujet avec la possibilité d’inclure des jokers
Z qos : le degré de la qualité du service
Z opts : des options d’inscription avec MQTT v5
Z props : les propriétés de MQTT v5
å Se désinscrire d’un sujet
token_ptr mqtt::async_client::unsubscribe(const string &topicFilter,const properties &props=
properties())
Z topicFilter : le sujet avec la possibilité d’inclure des jokers
Z props : les propriétés de MQTT v5
Présentation Chiheb Ameur ABID 72/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Démarrer la réception des messages
å Démarrer la réception asynchrone des messages et les stocker dans une file
void mqtt::async_client::start_consuming()
å Arrêter la réception des messages et ignorer tout message non lu
void mqtt::async_client::stop_consuming()
Présentation Chiheb Ameur ABID 73/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Lecture des messages
å La lecture bloquante des messages se fait à partir d’une file
const_message_ptr mqtt::async_client::consume_message()
Z const_message_ptr : un pointeur sur l’objet encapsulant le message. Si
nullptr : échec de lecture
å Lecture non bloquante
bool mqtt::async_client::try_consume_message(const_message_ptr * msg)
La classe message
å Récupérer le nom du sujet d’un message reçu
const string& mqtt::message::get_topic() const
å Renvoyer sous forme d’une chaine de caractère la charge utile d’un message reçu
string mqtt::message::to_string() const
Présentation Chiheb Ameur ABID 74/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Exemple : Réception asynchrone et lecture synchrone des messages
const string SERVER_ADDRESS { "tcp://localhost:1883" };
const string CLIENT_ID { "paho_cpp_async_consume" };
const string TOPIC { "#" };
const int QOS = 1;
int main(int argc, char* argv[]) {
mqtt::async_client cli(SERVER_ADDRESS, CLIENT_ID);
try { // Start consumer before connecting to make sure to not miss messages
cli.start_consuming();
auto rsp = cli.connect()->get_connect_response();
// If there is no session present, then we need to subscribe, but if
// there is a session, then the server remembers us and our subscriptions.
if (!rsp.is_session_present()) cli.subscribe(TOPIC, QOS)->wait();
while (true) { // Loop to consume read messages
auto msg = cli.consume_message();
if (!msg) break;
cout << msg->get_topic() << ": " << msg->to_string() << endl;
}
if (cli.is_connected()) {
cli.unsubscribe(TOPIC)->wait();
cli.stop_consuming();
cli.disconnect()->wait();
}
else cout << "nClient was disconnected" << endl;
}
catch (const mqtt::exception& exc) {
cerr << "n " << exc << endl;
return 1;
}
return 0;
}
Présentation Chiheb Ameur ABID 75/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Envoie de messages
å Il faut créer une instance de la classe message pour le message à envoyer
message_ptr mqtt::make_message(string_ref topic,binary_ref payload)
message_ptr mqtt::make_message(string_ref topic,const void *payload,size_t len)
Z topic : le sujet
Z payload : la charge utile du message
Z len : taille de message en nombre d’octets
å Se désinscrire d’un sujet
delivery_token_ptr mqtt::async_client::publish(string_ref topic, binary_ref payload)
delivery_token_ptr mqtt::async_client::publish(string_ref topic, binary_ref payload,int qos,bool
retained)
Z topicFilter : le sujet avec la possibilité d’inclure des jokers
Z props : les propriétés de MQTT v5
Présentation Chiheb Ameur ABID 76/ 77
Développer un client MQTT sur RPI
Utilisation de la Bibliothèque Paho MQTT
Exemple : Réception asynchrone et lecture synchrone des messages
const string SERVER_ADDRESS {"tcp://localhost:1883"};
const string CLIENT_ID {"paho_cpp_async_publish"};
const string TOPIC { "hello" };
const char* PAYLOAD1 = "Hello World!";
const char* PAYLOAD2 = "Hi there!";
const int QOS=1;
const auto TIMEOUT = std::chrono::seconds(10);
int main(int argc, char* argv[])
{
mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID);
try {
client.connect()->wait();
mqtt::message_ptr pubmsg = mqtt::make_message(TOPIC, PAYLOAD1);
pubmsg->set_qos(QOS);
client.publish(pubmsg)->wait_for(TIMEOUT);
cout << "First message was sent..." << endl;
// Now try with itemized publish
mqtt::delivery_token_ptr pubtok;
pubtok = client.publish(TOPIC, PAYLOAD2, strlen(PAYLOAD2), QOS, false);
cout << " ...with token: " << pubtok->get_message_id() << endl;
cout << " ...for message with " << pubtok->get_message()->get_payload().size()<< " bytes" <<
endl;
pubtok->wait_for(TIMEOUT);
client.disconnect()->wait();
cout << "nDisconnected" << endl;
}
catch (const mqtt::exception& exc) {
cerr << exc.what() << endl;
return 1;
}
return 0;
}

Contenu connexe

PDF
identité de marque et Image de marque: Audit d'image
PDF
Mémoire Master 2 Celsa Irène Durand-Mille
PPTX
Intelligence artificielle etroite introduction
PDF
STM32 F4 (PWM,SPI And ADC Test Examples)
PDF
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
PPTX
Soutenance mémoire- IoT
PPTX
Présentation pfe esprit 2012
PPTX
Internet des Objets
identité de marque et Image de marque: Audit d'image
Mémoire Master 2 Celsa Irène Durand-Mille
Intelligence artificielle etroite introduction
STM32 F4 (PWM,SPI And ADC Test Examples)
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Soutenance mémoire- IoT
Présentation pfe esprit 2012
Internet des Objets

Tendances (20)

PDF
Taxonomie TICE d'après Bruillard par S.Delhomenede-S.Mareuil-J.Pochit
PDF
Réalité virtuelle : état des lieux 2019
PDF
Mémoire Image de marque et réseaux sociaux
PDF
Livre blanc Intelligence Artificielle et Communication
PDF
Mémoire sur les chatbots
PPT
Ch7 memoires
PDF
rapport fin d'etude
PDF
Thèse "Comment une marque peut intégrer une dimension émotionnelle grâce à la...
PPT
40 exemples d’experience de marque en transmedia de la tv au magasin en passa...
PDF
Rapport PFE
PDF
Rapport stage IP-MSAN Tunisie télécom
PDF
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
DOCX
Les media sociaux, la marque et le consommateur
PDF
Application mobile bancaire sous la plateforme Android
PPTX
ROBOT à base d'Android - Présentation PFE
PDF
Rapport de stage développement informatique
PDF
Rapport Projet de Fin d'Etudes
PPT
PFEs SagemCom
PDF
Rapport pfe talan_2018_donia_hammami
PPTX
METHODE DE PRISE EN CHARGE DES ENFANTS AUTISTES: Le PECS
Taxonomie TICE d'après Bruillard par S.Delhomenede-S.Mareuil-J.Pochit
Réalité virtuelle : état des lieux 2019
Mémoire Image de marque et réseaux sociaux
Livre blanc Intelligence Artificielle et Communication
Mémoire sur les chatbots
Ch7 memoires
rapport fin d'etude
Thèse "Comment une marque peut intégrer une dimension émotionnelle grâce à la...
40 exemples d’experience de marque en transmedia de la tv au magasin en passa...
Rapport PFE
Rapport stage IP-MSAN Tunisie télécom
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
Les media sociaux, la marque et le consommateur
Application mobile bancaire sous la plateforme Android
ROBOT à base d'Android - Présentation PFE
Rapport de stage développement informatique
Rapport Projet de Fin d'Etudes
PFEs SagemCom
Rapport pfe talan_2018_donia_hammami
METHODE DE PRISE EN CHARGE DES ENFANTS AUTISTES: Le PECS
Publicité

Similaire à Développement d'un client MQTT sur Raspberry Pi (20)

PDF
Développer un client MQTT simple en C++ avec la bibliothèque Paho MQTT
PDF
IoT Toulouse : introduction à mqtt
PDF
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
PDF
MQTT avec Mosquitto et Paho - DevFest Brest 2019
PPTX
Projet MQTT
PDF
Réseau de capteurs sans fil
PDF
Architectures des applications pour l internet des objets : les files de mess...
PDF
Socket tcp ip client server on langace c
PDF
Parlez vous IoT - Présentation du protocole MQTT
PDF
Model Based Testing des applications du protocole MQTT
PPTX
présentation IOT........................
PDF
Les socket ing1_issat
PDF
8-socket.pdf
PDF
gRPC, échange à haute fréquence!
PDF
gRPC, ECHANGES A HAUTE FREQUENCE !
PDF
Rapport application chat
PDF
Systèmes et applications distribués.pdf
PPTX
Support Cours de Python et Réseaux.pptx
PDF
Cours 2 les architectures reparties
PDF
IAAM Meetup #4 chez La Platform - Model Context Protocol.pdf
Développer un client MQTT simple en C++ avec la bibliothèque Paho MQTT
IoT Toulouse : introduction à mqtt
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
MQTT avec Mosquitto et Paho - DevFest Brest 2019
Projet MQTT
Réseau de capteurs sans fil
Architectures des applications pour l internet des objets : les files de mess...
Socket tcp ip client server on langace c
Parlez vous IoT - Présentation du protocole MQTT
Model Based Testing des applications du protocole MQTT
présentation IOT........................
Les socket ing1_issat
8-socket.pdf
gRPC, échange à haute fréquence!
gRPC, ECHANGES A HAUTE FREQUENCE !
Rapport application chat
Systèmes et applications distribués.pdf
Support Cours de Python et Réseaux.pptx
Cours 2 les architectures reparties
IAAM Meetup #4 chez La Platform - Model Context Protocol.pdf
Publicité

Plus de Chiheb Ameur ABID (8)

PDF
Apprentissage du protocole I2C sur Raspberry Pi
PDF
L'initialisation uniforme en C++ moderne
PDF
Mesure de température et humidité avec le capteur DHT11 et la Raspberry Pi 3
PDF
Communication SPI avec la Raspberry Pi 3
PDF
TDD (Développement dirigé par les tests) en Java avec JUnit 4 et JUnit 5
PDF
Communication sur le bus i2c entre Raspberry PI et le capteur MCP9808 en C++
PDF
Configuration "from scratch" d'une distribution Linux sur Raspberry Pi
PDF
Gestion des erreurs et des exceptions avec C++
Apprentissage du protocole I2C sur Raspberry Pi
L'initialisation uniforme en C++ moderne
Mesure de température et humidité avec le capteur DHT11 et la Raspberry Pi 3
Communication SPI avec la Raspberry Pi 3
TDD (Développement dirigé par les tests) en Java avec JUnit 4 et JUnit 5
Communication sur le bus i2c entre Raspberry PI et le capteur MCP9808 en C++
Configuration "from scratch" d'une distribution Linux sur Raspberry Pi
Gestion des erreurs et des exceptions avec C++

Développement d'un client MQTT sur Raspberry Pi

  • 1. Présentation Chiheb Ameur ABID 63/ 77 Développer un client MQTT sur RPI Plan 1 Introduction à l’Internet des Objets 2 Architectures IOT 3 Réseaux et détections de proximité 4 Le réseau LPWAN 5 Mise en place d’une application IOT 6 Développer un client MQTT sur RPI
  • 2. Présentation Chiheb Ameur ABID 64/ 77 Développer un client MQTT sur RPI Objectif Architecture générale d’une solution IOT
  • 3. Présentation Chiheb Ameur ABID 65/ 77 Développer un client MQTT sur RPI Présentation du projet Paho MQTT Paho MQTT en bref å Projet opensource développé par la fondation Eclipse å Bibliothèque client Paho MQTT qui implémente les versions 3.1, 3.1.1.1 et 5.0 du protocole MQTT å API fournit en C, C ++, Java, Javascript, Python, Go, C# å Site officiel : http://www.eclipse.org/paho å Documentation C++ : https://www.eclipse.org/paho/files/cppdoc/index.html
  • 4. Présentation Chiheb Ameur ABID 66/ 77 Développer un client MQTT sur RPI Installation de la bibliothèque Paho MQTT C++ Installation de la bibliothèque Paho MQTT C++ sur RPI å Compilation et installation depuis le code source å Elle nécessite la compilation et l’installation de la bibliothèque de Paho C version 3.1.8 ou supérieure å Installer les paquets de dépendances Z Outils de compilation : build-essential gcc make cmake Z Utilisation de SSL : libssl-dev Z Construction de la documentation : doxygen Compilation et installation de la bibliothèque Paho MQTT C å Télécharger le code source git clone https://github.com/eclipse/paho.mqtt.c ; cd paho.mqtt.c å Compilation avec cmake cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_STATIC=ON -DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON å Installation sudo cmake --build build/ --target install sudo ldconfig
  • 5. Présentation Chiheb Ameur ABID 67/ 77 Développer un client MQTT sur RPI Installation de la bibliothèque Paho MQTT C++ Compilation et installation de la bibliothèque Paho MQTT C++ å Télécharger le code source git clone https://github.com/eclipse/paho.mqtt.cpp cd paho.mqtt.cpp å Compilation avec cmake cmake -Bbuild -H. -DPAHO_BUILD_STATIC=ON -DPAHO_BUILD_DOCUMENTATION=TRUE -DPAHO_BUILD_SAMPLES=TRUE å Installation sudo cmake --build build/ --target install sudo ldconfig
  • 6. Présentation Chiheb Ameur ABID 68/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Connexion : la classe mqtt::async_client å #include <async_client.h> å La classe mqtt::async_client permet de communiquer avec un broker en utilisant des méthodes non bloquantes å Constructeur async_client (const string &serverURI, const string &clientId, iclient_persistence *persistence=nullptr) Z serverURI : spécifie l’adresse et le port du broker Z clienId : une chaine choisie pour identifier le client å La méthode token_ptr connect() permet d’établir la connexion. Elle renvoie un pointeur sur un jeton permettant de surveiller l’état de la connexion å La méthode token_ptr disconnect() permet de se déconnecter å La méthode bool is_connected() indique si une connexion est bien établie
  • 7. Présentation Chiheb Ameur ABID 69/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Connexion : la classe mqtt::token å #include <token.h> å La classe mqtt::token fournit un mécanisme pour surveiller les actions asynchrones å La méthode wait() permet de bloquer la tâche courante jusqu’à que l’action associée au jeton soit terminée å La méthode connect_response get_connect_response() const renvoie la réponse de l’opération de connexion. Si l’opération n’est pas encore terminée, la tâche en cours se bloquera jusqu’à ce que le résultat soit disponible. Connexion : la classe mqtt::connect_response å #include <server_response.h> å Elle fournit des informations sur une connexion établie å Vérifier si une session existait déjà pour un client sur le serveur : le serveur a une session persistante stockée pour le client, étant donné l’identifiant du client spécifié dans le message de connexion. bool mqtt::connect_response::is_session_present () const å Renvoyer la version MQTT utilisée pour la connexion int mqtt::connect_response::get_mqtt_version() const
  • 8. Présentation Chiheb Ameur ABID 70/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Exemple : connexion à un broker const std::string SERVER_ADDRESS("tcp://localhost:1883"); const std::string CLIENT_ID("paho_cpp_async_subcribe"); mqtt::async_client cli(SERVER_ADDRESS, CLIENT_ID); try { // Connect to the server cout << "Connecting to the MQTT server..." << flush; cli.connect()->wait(); } catch(const mqtt::exception &exc) { cerr << "n " << exc << endl; return 1; } ... try { std::cout << "nDisconnecting from the MQTT server..." << std::flush; cli.disconnect()->wait(); std::cout << "OK" << std::endl; } catch (const mqtt::exception& exc) { std::cerr << exc << std::endl; return 1; }
  • 9. Présentation Chiheb Ameur ABID 71/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Inscription à un sujet å Pour récevoir les messages d’un sujet, il faut d’abord s’inscrire token_ptr mqtt::async_client::subscribe(const string &topicFilter,int qos,const subscribe_options &opts=subscribe_options(),const properties &props=properties()) Z topicFilter : le sujet avec la possibilité d’inclure des jokers Z qos : le degré de la qualité du service Z opts : des options d’inscription avec MQTT v5 Z props : les propriétés de MQTT v5 å Se désinscrire d’un sujet token_ptr mqtt::async_client::unsubscribe(const string &topicFilter,const properties &props= properties()) Z topicFilter : le sujet avec la possibilité d’inclure des jokers Z props : les propriétés de MQTT v5
  • 10. Présentation Chiheb Ameur ABID 72/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Démarrer la réception des messages å Démarrer la réception asynchrone des messages et les stocker dans une file void mqtt::async_client::start_consuming() å Arrêter la réception des messages et ignorer tout message non lu void mqtt::async_client::stop_consuming()
  • 11. Présentation Chiheb Ameur ABID 73/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Lecture des messages å La lecture bloquante des messages se fait à partir d’une file const_message_ptr mqtt::async_client::consume_message() Z const_message_ptr : un pointeur sur l’objet encapsulant le message. Si nullptr : échec de lecture å Lecture non bloquante bool mqtt::async_client::try_consume_message(const_message_ptr * msg) La classe message å Récupérer le nom du sujet d’un message reçu const string& mqtt::message::get_topic() const å Renvoyer sous forme d’une chaine de caractère la charge utile d’un message reçu string mqtt::message::to_string() const
  • 12. Présentation Chiheb Ameur ABID 74/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Exemple : Réception asynchrone et lecture synchrone des messages const string SERVER_ADDRESS { "tcp://localhost:1883" }; const string CLIENT_ID { "paho_cpp_async_consume" }; const string TOPIC { "#" }; const int QOS = 1; int main(int argc, char* argv[]) { mqtt::async_client cli(SERVER_ADDRESS, CLIENT_ID); try { // Start consumer before connecting to make sure to not miss messages cli.start_consuming(); auto rsp = cli.connect()->get_connect_response(); // If there is no session present, then we need to subscribe, but if // there is a session, then the server remembers us and our subscriptions. if (!rsp.is_session_present()) cli.subscribe(TOPIC, QOS)->wait(); while (true) { // Loop to consume read messages auto msg = cli.consume_message(); if (!msg) break; cout << msg->get_topic() << ": " << msg->to_string() << endl; } if (cli.is_connected()) { cli.unsubscribe(TOPIC)->wait(); cli.stop_consuming(); cli.disconnect()->wait(); } else cout << "nClient was disconnected" << endl; } catch (const mqtt::exception& exc) { cerr << "n " << exc << endl; return 1; } return 0; }
  • 13. Présentation Chiheb Ameur ABID 75/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Envoie de messages å Il faut créer une instance de la classe message pour le message à envoyer message_ptr mqtt::make_message(string_ref topic,binary_ref payload) message_ptr mqtt::make_message(string_ref topic,const void *payload,size_t len) Z topic : le sujet Z payload : la charge utile du message Z len : taille de message en nombre d’octets å Se désinscrire d’un sujet delivery_token_ptr mqtt::async_client::publish(string_ref topic, binary_ref payload) delivery_token_ptr mqtt::async_client::publish(string_ref topic, binary_ref payload,int qos,bool retained) Z topicFilter : le sujet avec la possibilité d’inclure des jokers Z props : les propriétés de MQTT v5
  • 14. Présentation Chiheb Ameur ABID 76/ 77 Développer un client MQTT sur RPI Utilisation de la Bibliothèque Paho MQTT Exemple : Réception asynchrone et lecture synchrone des messages const string SERVER_ADDRESS {"tcp://localhost:1883"}; const string CLIENT_ID {"paho_cpp_async_publish"}; const string TOPIC { "hello" }; const char* PAYLOAD1 = "Hello World!"; const char* PAYLOAD2 = "Hi there!"; const int QOS=1; const auto TIMEOUT = std::chrono::seconds(10); int main(int argc, char* argv[]) { mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID); try { client.connect()->wait(); mqtt::message_ptr pubmsg = mqtt::make_message(TOPIC, PAYLOAD1); pubmsg->set_qos(QOS); client.publish(pubmsg)->wait_for(TIMEOUT); cout << "First message was sent..." << endl; // Now try with itemized publish mqtt::delivery_token_ptr pubtok; pubtok = client.publish(TOPIC, PAYLOAD2, strlen(PAYLOAD2), QOS, false); cout << " ...with token: " << pubtok->get_message_id() << endl; cout << " ...for message with " << pubtok->get_message()->get_payload().size()<< " bytes" << endl; pubtok->wait_for(TIMEOUT); client.disconnect()->wait(); cout << "nDisconnected" << endl; } catch (const mqtt::exception& exc) { cerr << exc.what() << endl; return 1; } return 0; }