Plateforme ARM et courtier MQTT comme base moderne pour les solutions IoT

Le protocole MQTT, pour le moment, a gagné en popularité et est devenu la norme de facto dans les projets visant à créer des solutions pour l'Internet des objets (IoT). Bien sûr, l'Internet des objets est une certaine abstraction ou, plus exactement, le concept de construction de réseaux distribués d'appareils ou de machines. Dans le même temps, les tâches particulières d'interaction des machines Machine-to-Machine (M2M) sont déjà résolues efficacement, y compris le niveau de connexion de ces systèmes à Internet, à la fois pour la création de systèmes d'automatisation industrielle, par exemple, et pour la construction de systèmes de maison intelligente. De toute évidence, les systèmes critiques nécessitent un arbitre ou un courtier local et des appareils pour trouver une solution à la situation, quelle que soit la qualité de la connexion Internet, ainsi qu'en cas de déconnexion complète.

Dans le même temps, des microprocesseurs éconergétiques mais non moins productifs basés sur l'architecture ARM se sont révélés être une plate-forme matérielle pour lancer un tel courtier MQTT. Cette interconnexion de la plate-forme matérielle, des protocoles de messagerie et de leur implémentation logicielle est devenue le point de départ des progrès rapides du développement de systèmes d'automatisation modernes. Ensuite, nous considérons plus en détail les solutions matérielles et les composants logiciels pour implémenter l'un des protocoles de messagerie les plus performants dans les systèmes techniques.


Revue ClusterHAT: kit informatique de cluster Raspberry Pi. Photo: magazine MagPi

L'architecture des microprocesseurs ARM (Advanced RISC Machine) est solidement ancrée dans nos vies. Presque tous les smartphones fonctionnent désormais sur la base de cette architecture. Il convient de noter que le concept d'une machine RISC est assez vague aujourd'hui, car son opposé, la plate-forme moderne x86-64, a beaucoup emprunté au monde des systèmes RISC. Mais il ne s'agit pas de cela, mais du fait qu'aujourd'hui, il est devenu synonyme ou caractéristique d'une plate-forme mobile productive et, en même temps, économe en énergie, ainsi que la base de divers appareils de bricolage ou de bricolage bon marché. Dans ce contexte, bien sûr, on ne peut manquer de mentionner les différentes options du Raspberry Pi, jusqu'à la décision d'un cluster basé sur la carte ClusterHAT, etc. Linux s'est révélé être le principal système d'exploitation de cette plate-forme. Mais ici, comment ne pas rappeler, par exemple, un système tel que Microsoft Windows 10 IoT Core?

C'est bien quand il y a un choix, mais tout n'est pas aussi simple que nous le souhaiterions. Microsoft Windows 10 IoT Core est un excellent système d'exploitation, mais il est principalement conçu pour développer et exécuter des programmes, par exemple, écrits en C # dans Microsoft Visual Studio. Une telle approche ne peut être qualifiée d'universelle. Par conséquent, alors que le choix classique pour la plupart des tâches reste ARM et Linux, ainsi que Android, comment pourrait-il se passer de cela. Notez que pour le prototypage rapide, en plus des cartes Raspberry Pi, il existe des sociétés Orange Pi moins chères de Xunlong Software ou, inversement, des ODROID plus chers de Hardkernel, mais en même temps, leur prix est justifié. Tout dépend du problème résolu. Et telle a été, pour le projet en cours, le lancement du serveur / courtier MQTT. Dans le même temps, il ne faut pas se concentrer sur le fait que le projet est dédié à la «maison intelligente» ou aux solutions pour la robotique. Ce n'est pas important, car le protocole MQTT lui-même est une solution très universelle.


CPU-351-13. SBC i.MX6 robuste à faible puissance. Photo: Eurotech

En parlant d'ARM, il vaut la peine de penser non seulement aux smartphones modernes, à de nombreuses applications comme routeurs domestiques ou outils de prototypage. Les processeurs avec une telle architecture peuvent très bien fonctionner dans des conditions assez difficiles des systèmes d'automatisation industrielle. Par exemple, un ordinateur monocarte CPU-351-13 d'Eurotech. La carte de cet ordinateur industriel est basée sur le processeur iMX.6 ARM (1,2 GHz) et est un système efficace avec une consommation électrique réduite (environ 4 W pour quatre cœurs), qui est utilisé dans les applications IoT / M2M, résistant à un fonctionnement dans la plage de température: -40 ° à + 85 ° C La carte contient une sortie vidéo, un chargeur de batterie, un modem cellulaire (cellulaire), WiFi, Bluetooth LE et prend en charge la technologie ZigBee. La carte est également idéale pour résoudre les problèmes de transport, car elle prend en charge le bus CAN, dispose d'un capteur d'accélération (accéléromètre) intégré et d'un système de réception du signal GPS.

Outre les solutions industrielles, l'architecture ARM pénètre le marché des solutions serveur. L'expérience de Scaleway, qui déploie et loue non pas des machines virtuelles ordinaires, mais des serveurs physiques basés sur ARMv8, est intéressante ici. Cette solution est intéressante pour son efficacité énergétique, du point de vue d'un fournisseur, et l'absence d'hyperviseur ou d'environnement de virtualisation, en tant que tel, pour l'utilisateur du service. Ainsi, un excellent environnement pour lancer des conteneurs Docker devient une réalité. Il ressemble à quelque chose comme ClusterHAT à l'échelle industrielle, et les performances sont un excellent choix pour la virtualisation de conteneurs dans le cloud. En général, on ne peut que convenir qu'il s'agit d'une solution commerciale audacieuse et innovante dans le sens des services d'hébergement, qui existe sur le marché depuis un certain temps. Il s'avère que si vous n'achetez pas votre Raspberry Pi ou équivalent, vous pouvez toujours expérimenter avec un serveur ARM en le louant.


CloudMQTT est une solution parfaite pour la messagerie "Internet des objets"

En finissant le choix de la plate-forme matérielle et les éloges de l'architecture ARM, vous pouvez y mettre fin, mais vous ne devez pas oublier que vous pouvez toujours trouver une solution alternative, et cela ne pousse que les amateurs, les geeks, les pirates éthiques à de nouvelles recherches et expériences avec des plates-formes matérielles ouvertes. Nous avons donc une tâche basée sur Linux pour installer le courtier MQTT et l'expérimenter un peu.

Il était possible de ne pas du tout considérer la plate-forme matérielle, mais de commencer immédiatement à travailler dans le service cloud CloudMQTT. Mais le problème est considéré sur la base de la structure à trois niveaux de l'Internet des objets, où au niveau inférieur il y a des capteurs et des systèmes de contrôle intelligents. Le milieu est la place du courtier MQTT, et il doit être localisé localement afin que les problèmes d'accès à Internet puissent être partiellement résolus par des équipements internes. Et le niveau supérieur est un cloud avec Node-Red ou AWS IoT, Azure IoT Hub, etc. Dans un tel concept, il est difficile d'imaginer le meilleur candidat pour un micro-serveur économe en énergie et à très faible coût, quelque chose de différent d'ARM.

Mais c'est ainsi que fonctionne le monde, on ne peut pas dire que tout va bien ou, inversement, tout est mauvais. Partout a ses propres nuances. Le fait est que le système à trois niveaux considéré n'est pas tout à fait l'Internet des objets, mais plutôt une sorte de version intermédiaire du chemin vers un tel concept. Un IoT sans connexion Internet ne devrait pas exister, c'est-à-dire ce n'est pas pour rien que l'on s'attend à l'apparition de réseaux sans fil de cinquième génération, à l'amélioration des communications existantes, etc. Dans le concept de l'Internet des objets, il n'y a pas de place pour la couche de la couche intermédiaire, les capteurs et les systèmes exécutifs doivent aller directement dans le cloud, où ils interagiront.


Une brève mais pratique introduction au protocole MQTT et à son application à l'IoT. Image: laboratoires Zoetrope

Le protocole MQTT (Message Queuing Telemetry Transport) est un protocole asynchrone pour la transmission de messages télémétriques sur le principe d'un éditeur / abonné utilisant un courtier. Ce protocole a été développé par IBM et transféré dans la catégorie des projets ouverts de l'organisation Eclipse Foundation. Une caractéristique du protocole est sa compacité, la taille de l'en-tête du paquet de données n'est que de quelques octets. Il s'exécute au-dessus du protocole TCP standard et, pour des raisons de sécurité, implique l'utilisation de mécanismes d'authentification au niveau du nom d'utilisateur / mot de passe et l'utilisation du cryptage du protocole de transport TLS / SSL. Actuellement, le protocole MQTT est devenu la norme de facto pour la création de solutions IoT.

Étant donné que MQTT est conçu pour être utilisé dans un environnement de connexion Internet, qui par définition est considéré comme non fiable, le protocole prévoit trois niveaux d'assurance qualité du service de livraison. QoS 0: au plus une fois - "pas plus d'un". L'éditeur publie le message au courtier, puis le courtier le publie à l'abonné. À ce niveau, le transfert obligatoire des données à l'abonné n'est pas garanti. QoS 1: au moins une fois - «au moins un». L'abonné doit recevoir ce message au moins une fois. Cependant, les messages peuvent être dupliqués et cela devrait être fourni par l'abonné dans la logique de son travail. QoS 2: Exactement un - "garanti". Fournit une garantie de livraison suprême et aucune duplication des messages.

Pour faire évoluer vos décisions, vous pouvez utiliser la configuration «pont» entre les courtiers et ainsi réduire la charge de chaque courtier individuellement. Le protocole MQTT permet également aux abonnés de recevoir des données sur plusieurs canaux à la fois. Pour ce faire, les symboles génériques "+" et "#" sont utilisés pour marquer soit toutes les entrées d'un abonnement particulier, soit uniquement un bloc de message. Par exemple, s'abonner à plusieurs capteurs de température différents: «capteurs / + / température / +» ou s'abonner immédiatement à tous les canaux: «#». Vous pouvez discuter des fonctionnalités du protocole pendant une longue période, mais il est plus facile d'essayer avec un exemple réel. De nombreuses solutions peuvent être choisies comme courtier, mais l'un des courtiers les plus populaires et les plus légers est Mosquitto .

Pour déployer le courtier Mosquitto, nous choisirons une version simple d'un ordinateur à carte unique, par exemple, l'une des premières versions de la RAM Raspberry Pi modèle B 512 Mo. Ce choix est dicté littéralement par ce qui était à portée de main. Bien sûr, pour un vrai projet, vous devez étudier séparément la question de la fiabilité et des performances de la carte, et, en plus de choisir les solutions matérielles optimales, vous devez également étudier les questions de fiabilité du boîtier, de la qualité de l'alimentation, de la sécurité du système dans son ensemble, etc. Il était encore intéressant de prendre la carte Raspberry Pi pour enfin dissiper le mythe des difficultés de démarrage d'un projet basé sur des solutions matérielles ouvertes et le système d'exploitation Linux. Bien sûr, le développeur a besoin de connaissances de base, mais les plates-formes modernes sont devenues extrêmement conviviales du point de vue de l'interface logicielle et sont en même temps bien documentées.


Photo: RAM Raspberry Pi modèle B 512 Mo

En tant que système d'exploitation, vous pouvez choisir le firmware officiel Raspbian Stretch avec ordinateur de bureau ou Raspbian Stretch Lite. Ce sont deux systèmes d'exploitation identiques basés sur la distribution Debian Stretch bien connue, qu'ils ont modifiée pour fonctionner avec le Raspberry Pi. Les différences sont uniquement en présence d'un bureau graphique, ce qui est justifié pour démarrer la connaissance, mais pour le serveur, bien sûr, il n'y a rien pour le shell graphique. Pour l'installation, nous choisissons toujours l'option avec un bureau graphique et installons tout cela sur une carte SD 8 Go peu coûteuse. En fait, il reste à charger l' image du système d'exploitation et à utiliser l'utilitaire multiplateforme très pratique Etcher pour transférer l'image sur un disque physique.


Capture d'écran: Etcher dans Windows 10

Il reste maintenant à mettre le lecteur flash dans la carte Raspberry Pi et à mettre sous tension. Il y a une fonction ode, si vous avez besoin d'accéder à distance à la ligne de commande Raspbian Stretch en utilisant le protocole ssh, alors qu'il n'y a pas de clavier physiquement connecté à la carte, vous pouvez écrire un fichier vide avec le nom ssh dans la section de démarrage du lecteur flash, ce qui permettra l'accès correspondant. Après avoir allumé le Raspberry Pi, l'accès au système d'exploitation est autorisé à l'utilisateur "pi" avec le mot de passe "raspberry". L'utilisateur par défaut «pi» peut obtenir les privilèges root en exécutant la commande sudo. Puisque tout est préparé dans Raspbian pour le travail confortable d'un utilisateur non préparé, la première commande dans le nouveau système peut être d'appeler le menu de configuration du système:

$ sudo raspi-config


Capture d'écran: Connexion à distance au Raspberry Pi par SSH et exécutez raspi-config

L'utilitaire raspi-config vous permet de définir un nouveau mot de passe pour l'utilisateur et, par exemple, dans le menu "Options d'interfaçage", vous pouvez configurer le comportement des interfaces système, activer le bureau distant via le protocole VNC, etc. Toujours dans le menu: «Options de démarrage», vous pouvez définir les paramètres par défaut pour démarrer le système, par exemple, sélectionner uniquement le mode de ligne de commande, et dans le sous-menu «Résolution» du menu «Options avancées» définir la résolution souhaitée de l'écran graphique, par exemple, en sélectionnant la taille requise «DMT» - pour l'interface numérique du moniteur ou «CEA» - entrée analogique, etc.

Vous pouvez maintenant mettre à jour les packages système:
$ sudo apt-get update
$ sudo apt-get upgrade


Et installez le courtier Mosquitto et le client MQTT, par exemple, pour tester le système:
$ sudo apt-get install mosquitto
$ sudo apt-get sudo mosquitto-clients


Vous pouvez maintenant consulter localement le courtier MQTT, auquel vous pouvez vous abonner, par exemple, à un événement:
$ mosquitto_sub -h localhost -t "sensor/temperature"

Et publiez quelques valeurs pour la chaîne correspondante:
$ mosquitto_pub -h localhost -t "sensor/temperature" -m 21.0


Capture d'écran: sessions de terminal Raspberry Pi

Vous pouvez consulter les abonnements et faire des publications à l'aide du protocole MQTT, ainsi que tester la capacité de chargement du courtier dans l'environnement de navigateur Chrome et les systèmes d'exploitation: Linux, Mac, Windows grâce à l'application multiplateforme MQTTBox .

En effet, le protocole MQTT est devenu si répandu qu'il est tout simplement impossible de ne pas trouver de solution pratique pour vos tâches. De plus, dans le cadre du projet Eclipse Paho , le développement de solutions logicielles ouvertes et de bibliothèques, dans presque tous les langages de programmation, se développe activement pour mettre en œuvre le protocole de messagerie MQTT et, ainsi, améliorer les solutions pour l'Internet des objets.

La création de solutions basées sur le courtier MQTT devient déjà une tâche triviale. Il suffit de déployer le système, de se connecter au cloud, par exemple, en utilisant Node-RED ou une solution spécialisée, et cela reste la «petite» chose - pour connecter des capteurs et des actionneurs intelligents. Pour considérer le niveau inférieur des systèmes IoT, un article séparé devrait être écrit, mais pour cet exemple, il est tout à fait possible de se passer d'un exemple basé sur la norme réelle pour l'Internet des objets - les cartes NodeMCU basées sur le SoC ESP8266 d'ESpressif.


Capture d'écran: MQTTBox dans Windows 10

La carte NodeMCU se concentre initialement sur le développement d'eLua . Vous pouvez utiliser le service cloud pour créer le firmware, et la carte de projet elle-même existe en tant que solution matérielle ouverte NodeMCU DEVKIT V1.0 , pour laquelle de nombreux analogues ont déjà été publiés. En même temps, une bonne documentation du projet doit être notée. Cependant, il est très subjectif, mais lors du développement d'un capteur intelligent avec le protocole MQTT basé sur un firmware avec eLua pour NodeMCU DEVKIT, il faut encore faire face à un certain nombre de difficultés avec la mise en œuvre du protocole MQTT. Dans le même temps, l'ensemble de l'infrastructure du projet semble en quelque sorte insuffisamment préparé pour être utilisé comme environnement pour le développement rapide et de haute qualité de systèmes à microprocesseurs. Toutes les bagatelles et les nuances apparaissent toujours, mais encore une fois, cela vaut la peine d'être répété - c'est une évaluation très subjective. Fait intéressant, les lecteurs de blogs ont-ils des expériences réussies avec eLua et MQTT?

Le choix de l'environnement de développement Arduino IDE pour travailler avec NodeMCU DEVKIT, cependant, comme avec d'autres cartes basées sur ESP8266, est une question complètement différente. Tout se fait presque instantanément sur la base de bibliothèques prêtes à l'emploi et d'échantillons de code. Pour commencer le développement, vous devez télécharger l' environnement de développement multiplateforme ouvert Arduino IDE depuis le site officiel du projet Arduino. Ensuite, dans les paramètres "Fichier" - "Préférences" - "URL du gestionnaire de cartes d'addition:", spécifiez le lien vers le noyau Arduino pour le projet de puce WiFi ESP8266: arduino.esp8266.com/stable/package_esp8266com_index.json Ensuite, dans "Outils" - "Gestionnaire de cartes" »Il reste à télécharger et à installer le support des cartes communautaires ESP8266. Soit dit en passant, nous ne devons pas oublier que pour travailler avec la carte NodeMCU, vous devrez installer le pilote du convertisseur d'interface CP210x ou, également appelé pont UART vers USB .


Photo: Utilisation de la carte NodeMCU

Pour travailler avec le protocole MQTT, vous pouvez installer la bibliothèque Arduino PubNub. Pour ce faire, dans le menu "Sketch" - "Inclure la bibliothèque" - "Gérer les bibliothèques", sélectionnez la bibliothèque appropriée et installez-la. Vous pouvez vous familiariser avec les capacités de la plate-forme logicielle sur la base d'un exemple de code, par exemple, l'exemple Basic ESP8266 MQTT, où le courtier publie le canal «outTopic» et s'abonne également à «inTopic», et lorsqu'il s'agit de «inTopic», la valeur est «1», puis La carte allume la LED intégrée. Tout est simple, rapide et fonctionne immédiatement.


Capture d'écran: Arduino IDE avec prise en charge ESP8266

En conclusion, je voudrais noter que cette publication n'appelle pas à utiliser exclusivement l'architecture des processeurs ARM pour la construction de systèmes IoT, et elle a seulement abordé les spécificités de l'introduction du courtier MQTT comme lien de connexion pour les solutions d'automatisation. Mais en même temps, le lecteur peut se faire une opinion qu'aujourd'hui, les solutions pour l'IoT sont le lot des geeks, des expérimentateurs et des fans, par exemple, les cartes Raspberry Pi. C'est vrai, le progrès est basé sur cela, mais l'avenir est déjà avec nous.

Un exemple est évident: la solution commerciale de plate-forme de capteurs sans fil Wzzard pour IoT et Advantech B + B SmartWorx Specter Network Gateway. Ici, comme dans de nombreuses implémentations dans les cycles de production d'aujourd'hui, l'architecture des capteurs industriels protégés contre l'environnement est proposée, qui sont combinés par un réseau sans fil basé sur les normes 6LoWPAN et IEEE 802.15.4e. Pour le traitement des données au niveau du cloud, une passerelle prenant en charge le protocole MQTT et la transmission de données via les communications d'un réseau 3G sans fil ou Ethernet 10/100 filaire est proposée.




Ressources et liens connexes:


Processeurs ARM: caractéristiques d'architecture, différences et perspectives - ITC.ua
Orange Pi PC - un mini-pc complet pour 15 $ sur Linux - Geek magazine
ODROID-C1 - examen et comparaison avec RPi - IT quotidien blog, nouvelles, magazine, technologies
Coup d'œil sur Scaleway - Blog quotidien informatique, actualités, magazine, technologies
IBM déplace le protocole MQTT dans la catégorie des projets ouverts - OpenNET
Protocole MQTT - iot.ru
Protocole MQTT. Fonctionnalités, applications, procédures de base - Technologies et communications
Documentation sur Raspberry Pi. Accès à distance - Raspberry Pi Foundation
Configuration initiale du Raspberry Pi - Domoticz
Premiers pas avec MQTT Mosquitto Broker sur Raspberry Pi, Windows, MacOS et Linux - Projets de bricolage
Les sept meilleurs outils client MQTT - HiveMQ
Téléchargement de température sur MQTT à l'aide de NodeMCU et du capteur DHT11 - Les auteurs de ThingsBoard
Tutoriel MQTT pour Raspberry Pi, Arduino et ESP8266 - Baldengineer Blog
Micrologiciel ESP8266, programmation en Arduino IDE - Geektimes
Wireless Sensor Network Platform – Connect2 Systems

Source: https://habr.com/ru/post/fr407867/


All Articles