Nous assemblons le réseau ZigBee le plus simple, programme sous Mbed, communiquons via MQTT

Cet article est un excellent atelier de formation d'entrée de gamme sur l'utilisation du module XBee en conjonction avec un microcontrôleur doté de Mbed OS. ZigBee est un standard long et solidement ancré dans les systèmes Smart Home (par exemple, il est utilisé avec Z-Wave dans le hub Samsung SmartThings, voir notre article ), il se caractérise par une faible consommation d'énergie, une facilité d'utilisation et, plus intéressant encore, la possibilité de créer réseaux maillés auto-configurables. Vous verrez de l'atelier qu'il en est bien ainsi - nous examinerons la structure d'un tel réseau à travers un utilitaire de visualisation pratique.

On suppose que vous savez déjà ce qu'est ZigBee et à quoi il sert. Maintenant, vous voulez connecter votre premier module XBee et résoudre vos problèmes avec lui, sans entrer dans la programmation du module lui-même, mais seulement en l'utilisant comme interface de communication. Au final, nous enverrons toutes les données via une passerelle de fortune MQTT n'importe où, même vers un serveur local, voire vers Internet. Nous avons décidé de tout montrer sur l'exemple de Mbed comme le RTOS le plus simple et le plus accessible pour les débutants. Vous serez convaincu que tout fonctionne «prêt à l'emploi» et vous pouvez immédiatement commencer à réaliser votre projet, même si auparavant vous ne faisiez affaire qu'avec Arduino.



Le manuel comprendra les parties suivantes:

  1. Connexion et configuration du module XBee
  2. Connectez les modules au réseau
  3. Nous configurons le module sans le retirer du bouclier
  4. Récupération de données
  5. Envoi de données
  6. Création d'une passerelle MQTT simple

Mais d'abord, une liste de composants: ce qui est souhaitable d'avoir pour faire tout ce qui précède.

Composants requis


  • Deux cartes compatibles Mbed. Nous recommandons la carte de formation STM32 Nucleo comme relativement peu coûteuse et populaire à des fins éducatives. Le processus de programmation y est au maximum simplifié: récupérez le programme dans un IDE gratuit en ligne, téléchargez le firmware assemblé et «déposez-le» sur la carte, qui apparaîtra dans le système comme un lecteur flash. Quel modèle spécifique à prendre n'est pas important, mais ne prenez pas le plus ancien, faites attention à la quantité de mémoire. Par exemple, F401RE - nous donnons juste pour être précis, afin que vous ne vous trompiez pas dans leur diversité et dans un premier temps des codes alphabétiques incompréhensibles des processeurs STM.


  • XBee-. Digi. «» , , , MBee, , , , . / : , . / Pro: , , Pro .

  • XBee Shield V2 ( SeeedStudio). - , RX TX XBee-.

  • Un convertisseur USB-UART avec connecteur pour XBee. Il est nécessaire pour la configuration initiale. Les modules XBee eux-mêmes ne sont pas équipés d'une interface USB (ils n'y sont pour rien). L'USB est nécessaire uniquement et exclusivement pour la communication entre le module et l'ordinateur, et dans l'appareil, il peut fonctionner sur un UART beaucoup plus simple.

    Le pas de fente des modules XBee est de 2,0 mm - pour l'électronique, il n'est pas standard, dans le système métrique (nous sommes généralement habitués à voir l'étape 2.54 selon les normes américaines). Par conséquent, malheureusement, ces modules ne sont pas insérés dans la maquette et ils ont toujours besoin d'un adaptateur.

    Tout adaptateur convient ici, nous avons pris celui-ci de Waveshare:


Connexion et configuration du module XBee


La chose la plus simple que vous puissiez faire avec le module est de le connecter directement à l'ordinateur via USB. Nous aurons immédiatement accès à ses paramètres de configuration.

Installer XCTU


Pour travailler avec XBee, il existe un programme officiel XCTU. Téléchargez- le et installez. La documentation indique que dans Ubuntu, vous devez ajouter un utilisateur à un groupe dialoutpour travailler avec des ports qui ne proviennent pas d'un superutilisateur - faites-le si vous ne l'avez pas encore fait:

sudo usermod -a -G dialout <username>

Téléchargez l'archive zip à partir du lien, elle contiendra un fichier .run. Il doit être rendu exécutable (via chmod +x _dans la console ou: bouton droit de la souris - Propriétés - Autorisations) et exécuté ./40002881_V.run.

Il est important de démarrer l'installation non pas à partir de la racine (sans sudo), sinon il y aura des problèmes plus tard.

La configuration ressemble à ceci:



Programme XCTU


Après l'installation, vous pouvez démarrer le programme en exécutant le fichier appdans le répertoire où vous avez installé le programme (par défaut - ~/Digi/XCTU-NG).
 
L'apparence sera la suivante:



Dans ce programme, vous pouvez ajouter votre module existant connecté au port USB via un adaptateur. Cliquez sur le bouton Découvrir avec une loupe. Une fenêtre apparaît vous demandant de sélectionner un port - comme vous pouvez le voir, le programme a correctement détecté le port dans le système /dev/ttyUSB0, il s'agit de notre adaptateur USB-UART.



La fenêtre suggère de cocher la recherche. Bien sûr, il y a une tentation de vérifier tout d'un coup pour trouver sûrement votre module. Mais alors la recherche se poursuivra très longtemps. En pratique, il est logique de laisser les cases cochées par défaut et de choisir les options les plus courantes pour la vitesse de transfert de données, comme dans l'image ci-dessous. Habituellement, les nouveaux modules par défaut à 9600, et à des fins de formation, c'est plus que suffisant, la vitesse ici n'est pas critique pour nous.



Par conséquent, si tout réussit, il vous sera demandé de sélectionner le module trouvé:



Un petit bug a été remarqué: parfois le module n'était pas à une vitesse non standard, réinitialisation manuelle du module avec le bouton Reset lors de la recherche et réinitialisation de son débit en bauds au standard (9600) aidé.

Modifier les paramètres du module


De plus, nous sommes engagés dans la configuration des modules. Un tas de paramètres vont disparaître, dont la plupart sont initialement incompréhensibles. Heureusement, seuls quelques-uns d'entre eux devront être changés pour un démarrage rapide.

ID réseau - ID PAN. Une clé de réseau commune, elle doit être la même pour tous les appareils afin qu'ils soient connectés indépendamment au réseau. Mettez n'importe quel nombre, dans notre cas, nous en avons fait 42.



CE - Coordinateur activé. S'il y en a 1, alors ce module fait office de coordinateur. S'il est égal à 0, le module agit comme un routeur (routeur) - en fait, il garantit simplement que les paquets traversent le réseau à travers lui-même. La plupart des hôtes sont généralement des routeurs. Nous avons besoin d'un coordinateur et de deux routeurs dans notre réseau, alors mettez-en un ici.

Il y a aussi le rôle «End device» - c'est un module qui n'effectue pas de travail sur le transfert de paquets, mais qui communique uniquement avec d'autres routeurs et exécute ses fonctionnalités utiles. Habituellement, il est juste en mode veille et se réveille à intervalles fixes et découvre s'il y a des messages. Un tel module peut être alimenté par une batterie, tandis que le routeur et le coordinateur doivent toujours être «en ligne» et, par conséquent, avoir besoin d'une alimentation constante pour maintenir l'ensemble du réseau. Nous ne considérerons pas un tel exemple maintenant, car il est plus intéressant pour tout le monde d'attribuer le rôle de routeurs et d'observer comment le réseau changera automatiquement sa configuration.



AP - Activer API.Mode de fonctionnement. Les modules XBee peuvent fonctionner en deux modes: AT ou API. Le mode AT est plus facile pour les débutants, c'est un remplacement transparent du port série et fonctionne avec le module via les commandes AT. Cependant, le mode API est beaucoup plus riche en fonctionnalités, il vous permet de configurer à distance les modules, contient l'adresse de l'expéditeur, retourne le statut de livraison du package, et bien plus encore. De plus, les bibliothèques d'interaction avec XBee supposent que l'appareil est utilisé en mode API. Par conséquent, remplacez-le immédiatement par le mode API, cela se fait en définissant l'unité dans le champ correspondant.



Le nom du module est Node Identifier. Une option pratique pour donner à votre module un nom lisible par l'homme. Donnons-lui un tel nom - Coordinateur.



Après cela, vous pouvez flasher les paramètres dans le module en appuyant sur le bouton avec un crayon:



2. Connectez les modules au réseau


Nous allons maintenant voir quel type de réseau nous obtiendrons si nous configurons trois modules. Le programme XCTU a un visualiseur de réseau assez pratique, nous verrons clairement la topologie.

Nous allons configurer les trois modules tour à tour avec les paramètres suivants:
  • PAN ID - nombre total, par exemple 42
  • AP (API Enable) - défini sur 1 (fonctionne en mode API)
  • NI (Node Identifier) ​​- donnez aux modules des noms compréhensibles (coordinateur, lampe et commutateur, si nous faisons, par exemple, un modèle du système Smart Home).
  • CE (Coordinateur activé) - définissez l'un des modules sur 1, ce sera le coordinateur.

Mettez ensuite tous les modules sous tension. Positionnez-les comme ceci: le coordinateur sera dans le convertisseur USB-UART, et les deux autres (routeurs) seront situés sur les cartes XBee Shield au-dessus de Nucleo.

Si vous avez tout fait avec soin, la belle se produira. Les modules se connecteront automatiquement au réseau. Vous pouvez communiquer avec des routeurs à distance via le coordinateur.

Cela ressemble à ceci. Cliquez sur le bouton "Découvrir les nœuds radio dans le même réseau".



Vous verrez que deux modules ont été automatiquement détectés et ajoutés:


et vous pouvez modifier leurs paramètres à la volée! 

Ce qui est encore génial: vous pouvez maintenant voir la carte du réseau si vous passez en mode de travail Réseau en haut à droite.



Après avoir réparti les nœuds du réseau avec la souris, vous verrez un triangle. Veuillez noter que le trafic vers le module le plus à droite peut aller de deux manières. Et si vous déplacez les modules dans l'espace, vous verrez que l'image a changé, et maintenant, peut-être, un autre module deviendra «extrême». C'est l'essence même d'un réseau auto-configurable.

3. Installez le module XBee sans le retirer du blindage


Bien sûr, il sera plus intéressant de travailler avec le module XBee non pas via un ordinateur, mais en le contrôlant à l'aide d'un programme sur le microcontrôleur. Autrement dit, le connecter à la carte STM32Nucleo.
Voyons comment le module XBee peut communiquer avec le microcontrôleur. Et commençons par une petite tâche: comment configurer un module sans le retirer du bouclier d'extension? Vous devez admettre que déplacer le module d'avant en arrière n'est pas pratique, en même temps que vous voulez expérimenter avec les paramètres et c'est étrange pourquoi vous avez besoin d'un module USB-UART séparé, car en théorie il y en a un dans la carte STM32Nucleo.

La solution est simple: nous devons transformer la carte Nucleo en pont entre le module XBee et le convertisseur USB de la carte.

Description générale de l'idée


Le microcontrôleur STM32 que nous utilisons possède plusieurs interfaces UART à bord. Chacune de ces interfaces représente un canal de communication. L'un d'eux est connecté au convertisseur USB-UART afin que nous puissions communiquer avec l'ordinateur via USB dans le terminal. Deux autres ne sont pas encore utilisés. Nous allons connecter le module XBee à l'un d'eux, qui dispose également d'un tel canal de communication. Vous pouvez choisir n'importe quel UART, nous avons choisi pour la définition UART1.

Le brochage peut être visualisé en MBed en haut à droite, en appuyant sur le bouton de sélection de la carte, puis sur l'onglet Brochage. Par habitude, il peut être assez difficile de percevoir cette image colorée. Il y a beaucoup de choses ici, car la carte a de nombreuses interfaces, et il y a deux numéros de broches: par rapport au microcontrôleur (PA_5, PA_6 - numérotation des broches), et par rapport à la carte (D13, D12 - inscriptions sur la carte Nucleo, les mêmes numéros près des terminaux).


 
Il s'avère que sur le microcontrôleur, l'interface UART1 communiquera avec le module XBee et UART2 - comme auparavant, avec l'ordinateur. Le code interne redirigera UART1 vers UART2 et vice versa.



Par connexions, cela ressemblera à ceci:



Faire un «pont» à partir d'un microcontrôleur


Dans notre cas, nous pouvons utiliser des cavaliers sur le bouclier pour définir les numéros auxquels nous voulons connecter le module ZigBee. Le module de communication TX sera connecté à la broche 2 de la carte (PA_9 sur le microcontrôleur) et RX à la broche 8 (alias PA_10).

Cela ressemblera à ceci:



Le code que nous avons pris s'appelle le pont série. Il s'agit du «pont» entre les deux canaux de communication. Nous chargeons le code dans le microcontrôleur, qui transmet tout ce qui arrive à l'entrée de l'ordinateur via UART2, à UART1, et vice versa. Comme si on insérait un tube entre deux sources d'information (Linuxsoids comprendra). Nous avons connecté un module XBee à UART1.
Le code est très simple, la seule chose que vous devez changer est le numéro de broche auquel l'appareil est connecté. Autrement dit, faites-les PA_9 et PA_10, comme indiqué ci-dessus.
#include "mbed.h"
// Make a serial bridge from a serial I/O device on mbed to the PC
Serial pc(USBTX, USBRX); // tx, rx
Serial device(PA_9, PA_10); // tx, rx
// Defaults to 9600 baud on each device - use .baud(baudrate) to change
int main() {
 pc.printf("Hello!");
 while(1) {
   if(pc.readable()) {
     device.putc(pc.getc());
   }
   if(device.readable()) {
     pc.putc(device.getc());
   }
 }
}

Il est important que si vous confondez l'ordre des conclusions - par exemple, vous faites une erreur et écrivez PA_10, PA_9 au lieu de PA_9, PA_10 - le mauvais ordre, le compilateur ne vous signalera pas une erreur et le programme affichera une erreur dans la console au redémarrage:
pinmap not found for peripheral

et ne progressera pas, c'est-à-dire qu'en principe rien ne fonctionnera.

Après avoir téléchargé ce code et installé correctement les cavaliers sur le bouclier, vous pouvez vous connecter en toute sécurité au module XBee à partir de l'ordinateur, comme vous l'avez fait précédemment avec l'adaptateur USB-UART sans le retirer du bouclier. Il sera régulièrement détecté par le programme XCTU.

Même si vous n'avez pas besoin de cette fonctionnalité, vérifiez toujours que le programme fonctionne, car dans l'exemple suivant, nous communiquerons avec le module XBee à partir du microcontrôleur, et la connexion via UART1 devrait déjà être établie (c'est-à-dire que les cavaliers sont correctement définis et les numéros de broches sont indiqués dans le programme) .

4. Acquisition de données


Regardons deux exemples simples: comment recevoir et envoyer des données au niveau du microcontrôleur, en utilisant le module XBee comme interface de communication externe.

Il existe une bibliothèque officielle des fabricants - des sociétés Digi. Il réside dans le référentiel Mbed, il y a des commentaires utiles sur l'utilisation et la logique du code.

Tout d'abord, nous apprendrons comment obtenir des données - il existe un exemple plus simple. Nous aurons un module XBee connecté au convertisseur USB-UART, enverrons un message d'accueil à la carte Nucleo et il imprimera ce message d'accueil à la console.



Ouvrez le projet dans cette bibliothèque. Comme toujours, importez-le dans le compilateur en ligne en tant que programme.

Correction des bibliothèques pour les modules S2C


Gardez à l'esprit que si vous avez des modules de la série S2C:



au lieu de la bibliothèque standard, vous devez utiliser le correctif: XBeeLib_Fixed . Sinon, ces programmes ne fonctionneront pas. Il est ajouté au projet simplement en supprimant la bibliothèque XBeeLib de là et en l'important dans le projet XBeeLibFix. Rien de plus n'a besoin d'être changé.

Donc: importez cette bibliothèque dans le compilateur en ligne: La



fenêtre d'importation du projet apparaîtra. Là, vous devez choisir la cible - où nous importons:



En tant que projet cible, sélectionnez notre exemple XBeeZB_Receive_Data.



Après quoi la bibliothèque sera importée dans le projet, puis avec un mouvement audacieux nous supprimons la mauvaise version de XBeeLib.



Exemple de compilation


Vous avez donc importé l'exemple et remplacé la bibliothèque si nécessaire.
Regardez l'exemple de code, c'est assez simple. Il définit une fonction de rappel qui est appelée lorsqu'un paquet est reçu. Cette fonction imprime le contenu du paquet reçu sur la console. Donc, si nous lui envoyons un message d'accueil, elle l'imprimera également.

Pour que l'exemple soit compilé, vous devez écrire dans l'exemple les conclusions selon lesquelles nous sommes responsables de la communication avec le module XBee, car le programme ne sait pas à quelles conclusions nous avons connecté le matériel.

Par conséquent, nous allons dans le fichier config.h et les lignes qu'il contient:

//#define RADIO_TX NC /* TODO: specify your setup's Serial TX pin connected to the XBee module DIN pin */
//#define RADIO_RX NC /* TODO: specify your setup's Serial RX pin connected to the XBee module DOUT pin */

Décommenter, et au lieu de NC, nous écrivons, conformément aux conclusions que nous avons connectés les cavaliers:

#define RADIO_TX PA_9
#define RADIO_RX PA_10

De même, nous modifions les lignes:

//#define DEBUG_TX NC /* TODO: specify your setup's Serial TX for debugging */
//#define DEBUG_RX NC /* TODO: specify your setup's Serial RX for debugging (optional) */

Nous écrivons:

#define DEBUG_TX USBTX
#define DEBUG_RX USBRX

Si vous rencontrez une erreur lors de la compilation que vous ne pouvez pas trouver device.h, mettez simplement à jour la bibliothèque Mbed dans l'arborescence du projet (faites un clic droit dessus -> Mettre à jour).

Après cela, le programme se compilera avec succès, et vous pouvez le télécharger sur la carte.

Exemple d'exécution


Après avoir regardé la console ce que la carte Nucleo écrit, vous verrez ce qui suit:



Comment envoyons-nous les données? L'option la plus simple: via la console du programme XCTU. Sélectionnez dans le menu principal du programme: Outils - Envoyer des paquets.



En bas, il y a une fenêtre avec les mots Envoyer des paquets. Créez un nouveau package en cliquant sur le «plus» à droite. Une fenêtre de création d'un nouveau package apparaîtra. Sélectionnez l'onglet HEX ici.



Entrez là un tel envoi de données:
7E 00 19 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 48 65 6C 6C 6F 20 58 42 65 65 21 5A
(en utilisant le bouton "Envoyer le paquet sélectionné" à droite de la liste des paquets)

Vous verrez le résultat dans la console du module d'écoute:



Veuillez noter qu'il n'a imprimé que la dernière partie du jeu d'octets que vous avez envoyé. Il s'agit de la charge utile réelle du message. Notez également que si vous envoyez «uniquement des octets» (toute combinaison aléatoire d'octets), le récepteur ne les émettra pas.

Si vous mettez un ensemble d'octets: 
48 65 6C 6C 6F 20 58 42 65 65 21
dans n'importe quel convertisseur HEX-ASCIII (par exemple, un ), assurez-vous que cela signifie "Bonjour XBee!"

Une tâche très simple pour une exécution indépendante: modifiez l'exemple de code pour qu'il affiche le texte du message en ASCII, pas HEX, et vous pourrez lire ce texte dans le terminal.

5. Envoi de données


Par analogie avec l'exemple précédent, nous envisageons maintenant d'envoyer des données.



Tout est là, comme dans l'exemple précédent. Seulement avec la différence que nous ouvrons maintenant l' exemple XBeeZB_Send_Data.

Exemple de compilation


Il est important que si vous avez un module S2C (il est clairement écrit dessus),



vous connecterez à nouveau la bibliothèque avec un correctif, sinon rien ne fonctionnera pour vous. La procédure à suivre est décrite dans l'exemple précédent. 

De plus, ici, pour une compilation réussie, vous devez spécifier les broches du contrôleur utilisées, vous pouvez simplement les copier à partir de l'exemple précédent.

Nous regardons l'exemple de code lui-même. Il mainutilise plusieurs méthodes pour envoyer des données. Choisissez la plus simple: envoyez les données au coordinateur. Nous n'avons même pas besoin d'enregistrer l'adresse du coordinateur, car il est déjà inscrit sur le réseau. Par conséquent, sans modifier l'échantillon, nous commentons toutes les lignes à la fin:
send_data_to_coordinator(xbee);
//send_broadcast_data(xbee);
//send_data_to_remote_node(xbee, remoteDevice);
//send_explicit_data_to_remote_node(xbee, remoteDevice);

Et lorsque vous commencez, vous verrez ceci:



(si vous ne le voyez pas, redémarrez simplement le tableau)

Comment puis-je m'assurer que les données parviennent au coordinateur? Par exemple, XCTU a le mode console réseau. Allumé par le bouton en haut à droite. Dans ce mode, vous verrez tous les paquets sur le réseau. Bien sûr, en même temps, vous devez avoir une connexion série avec le coordinateur. Et n'oubliez pas de cliquer sur le bouton Ouvrir en haut à gauche pour le rendre vert.



Vous pouvez voir des informations détaillées sur chaque paquet sur le réseau en le sélectionnant dans la liste de gauche: En faisant



défiler jusqu'à la fin du contenu du paquet, vous verrez une ligne avec le texte "send_data_to_coordinator":



Vous pouvez essayer d'autres méthodes d'envoi de données, mais là (par exemple, pour envoyer à un nœud sélectionné séparé), vous devez enregistrer l'adresse du nœud. Vous pouvez voir les adresses de tous les modules dans le programme XCTU. Comment enregistrer des adresses spécifiques est décrit de manière exhaustive dans l'exemple.

6. Nous créons la passerelle MQTT


Tout est super, mais maintenant je voudrais en quelque sorte travailler avec ces données en dehors du réseau XBee, par exemple sur Internet. Une façon de le faire est de mettre le traducteur de XBee dans le protocole MQTT populaire. Ensuite, de la manière habituelle, nous pouvons nous abonner aux notifications d'événements et envoyer des commandes à partir de l'interface utilisateur, et ce programme peut être localisé n'importe où (si vous utilisez un serveur MQTT externe plutôt que local), et pas seulement sur notre ordinateur.

Voici une instruction. En bref, le programme lancé sur l'ordinateur va échanger des données du coordinateur de réseau via une connexion USB. Elle transmettra ces données au protocole MQTT.


Installer et configurer XBMQ


Le programme que nous utiliserons comme passerelle MQTT s'appelle XBMQ, il est ouvert et gratuit. Existe en deux versions:

La version Java sera prise en compte, bien que ce ne soit pas trop fondamental: nous ne la programmerons pas de toute façon, nous allons seulement l'installer et l'utiliser.
Pour que le programme fonctionne, vous aurez besoin de la bibliothèque RXTX, elle peut être installée simplement à partir du référentiel:
sudo apt-get install librxtx-java

Et bien sûr, vous avez besoin du JDK (Java Development Kit). Il existe en deux versions - d'Oracle et OpenJDK, la seconde est recommandée. Très probablement, OpenJDK est déjà installé sur votre système; sinon, réinstallez-le. Java a besoin d'un maximum de 8, car javax.xml.bind est exclu de Java 11 et vous devez choisir une alternative avec JDK-8 comme option par défaut, ou créer une configuration pour ce cas.

Téléchargez le référentiel du programme XBMQ:
git clone https://github.com/angryelectron/xbmq-java

Après avoir téléchargé les codes sources, nous collecterons le fichier binaire du programme. Équipe
ant dist

assemblera un projet pour tous les principaux systèmes d'exploitation. Le programme compilé final sera dans le dossier dist.
Configurez maintenant ce programme. Fichier ouvert
dist/xbmq.properties

et voyez là:
#
# Xbmq Properties.
#
#port = /dev/ttyUSB0
#baud = 9600
#rootTopic = ab123
#broker = tcp://test.mosquitto.org:1883
#username = user
#password = password

Décommentez et modifiez vos paramètres. Les paramètres sont les suivants: port de connexion du coordinateur ZigBee, vitesse, sujet racine (toutes les données y tomberont), adresse du serveur MQTT, nom d'utilisateur et mot de passe (si le serveur en a besoin).

Dans cet exemple, seule l'adresse du serveur a changé - vers le serveur mqtt local (moustique standard sous Linux). Tout le reste a été laissé par défaut:

port = /dev/ttyUSB0
baud = 9600
rootTopic = ab123
broker = tcp://127.0.0.1:1883
username = user
password = password

Avant l'étape suivante, vous devez installer et exécuter le serveur MQTT mosquitto local: 
sudo apt-get install mosquitto


Lancement de XBMQ


Enfin, le programme peut être lancé. Après avoir connecté le convertisseur USB-UART avec le module de coordination inséré, exécutez le programme:
./dist/xbmq.sh

Lorsque vous exécutez le script, nous voyons la ligne dans la console:
INFO - Starting XBMQ gateway ab123/0013A2004154EA46

Dernier - c'est exactement l'adresse de notre coordinateur. Si vous vous abonnez à tous les sujets avec un client MQTT externe, vous verrez immédiatement 2 messages:
  • Dans le sujet ab123/0013A2004154EA46/online- sera 1, c'est Last Will (un bon exemple de la façon dont ces paramètres "spéciaux" sont utilisés dans la vie réelle)
  • Le sujet ab123/0013A2004154EA46/logcontiendra la même phrase de débogage «Démarrage de la passerelle XBMQ ...» que vous avez déjà vue dans la console

Essayez maintenant d'envoyer un message à partir d'un autre module XBee externe - par exemple, prenez un exemple avec l'envoi de données.

Par conséquent, dans le programme MQTT.fx, si vous vous abonnez à tous les sujets (#), vous verrez ceci:


La fenêtre du programme MQTT.fx.

C'est-à-dire, en commençant l'exemple étudié précédemment avec l'envoi d'un message au coordinateur, nous verrons ce texte («send_data_to_coordinator») comme une partie Package MQTT. Le sujet parent commun pour nous est celui spécifié dans la configuration du programme ( ab123 , vous pouvez le changer pour le vôtre). Vient ensuite l'adresse du coordinateur, puis l'adresse du module d'où provient le message. Enfin, cette rubrique est appelée DataOut, car il s'agit de données sortantes. 

Bien sûr, vous verrez une telle image dans n'importe quel autre client MQTT, que ce soit MQTTLens ou même simplementmosquitto_subdans la console.

Quelques commentaires finaux:
  • Dans le bon sens, ce programme devrait fonctionner en mode démon. Il existe un fichier xbmqd pour cela, et README indique comment l'utiliser.
  • Gardez à l'esprit que puisqu'il xbmqdétient le port, nous ne pouvons pas exécuter ce programme en même temps que XCTU.

Vous pouvez maintenant travailler avec votre système en utilisant le protocole MQTT et écrire des programmes complexes et intéressants!


Tatyana Volkova - L'auteur du programme de formation sur l'Internet des objets suit «Samsung IT Academy», spécialiste des programmes de responsabilité sociale des entreprises au Samsung Research Center

All Articles