Comment construire une architecture IIoT à faire soi-même. Partie 2: «Choses»

Dans l' article précédent , nous avons brièvement passé en revue l'organisation et le traitement des données IoT à l'aide du projet Apache NiFi. Avec cet article, nous ouvrons une série dans laquelle nous parlerons en détail de chaque étape, des appareils eux-mêmes à l'analyse de la plateforme DataLake, au machine learning, à la prédiction d'anomalies, etc.



Commençons maintenant par le tout premier niveau, directement des «choses», la lettre T de l'abréviation IoT. Depuis l'appareil lui-même, l'organisation du canal de communication et l'utilisation du protocole MQTT. La tendance IoT existe depuis plusieurs années, mais pour la plupart l'idée de celle-ci comme une ampoule et une prise qui s'allume à partir du téléphone. Mais dans la production, l'exploitation minière et dans diverses autres industries depuis des décennies, une grande variété de capteurs ont été utilisés, dont les valeurs sont collectées dans la production SCADA . Connectez simplement le flux de données à Internet, et nous obtenons le même IoT, plus précisément IIoT - l'Internet industriel des objets.


Pourquoi tout cela est-il nécessaire si toutes ces décennies SCADA gère avec succès le cycle de production?


Il y a plusieurs raisons:


  • Les possibilités d'utilisation de capteurs se développent, par exemple, la logistique, où un capteur de localisation est installé sur un camion ou une voiture spécifique, ainsi que divers autres, tels que la consommation de carburant ou les temps d'arrêt (attendre à la station pendant que la voiture est accrochée) - tout cela va au-delà du réseau de production local
  • Le nombre de capteurs sur les appareils augmente, ils nécessitent un traitement plus complexe, ce qui ne peut pas toujours être fait par les capacités de l'entreprise
  • Les capacités d'apprentissage automatique et d'intelligence artificielle, développées en raison de la croissance de la puissance de calcul, peuvent être utilisées pour optimiser la production, rechercher les goulots d'étranglement et identifier les anomalies

En conséquence, les capteurs de la production n'envoient plus simplement des valeurs à SCADA. Nous avons besoin d'une architecture logicielle qui nous permettra de construire une chaîne du capteur d'extrémité sur n'importe quelle machine au cloud informatique, dans laquelle, en fonction de l'historique de la machine, en utilisant le modèle formé, le personnel de service recevra un message «37% de chances de défaillance du mécanisme, vous devez envoyer un ingénieur ".



Eh bien, revenons aux choses! Typiquement, pour démontrer de tels systèmes, des ensembles ouverts d'indicateurs de capteurs historiques d'une industrie sont utilisés. Mais malheureusement, dans cette option, "toucher" le système ne fonctionne pas. Non, nous n’arriverons pas à l’usine, mais nous ferons notre simple «truc avec Internet».


Notre domaine d'activité est lié aux infrastructures de serveurs, mais nous avons encore quelques compétences en électronique de loisir, donc la «chose» sera faite maison.
Nous choisirons l'option de surveillance la plus simple - le capteur climatique, nous collecterons des données sur la température, l'humidité et la pression.


Base de composants


Nous prenons le BMP280 comme capteur.


Une chose très sophistiquée, elle est destinée non seulement aux données météorologiques, mais aussi, grâce à un baromètre sensible, à l'assistance GPS, à la navigation dans le bâtiment (pour déterminer le sol), aux jeux pour aider l'accéléromètre. Nous l'utiliserons uniquement pour les données météorologiques.


Prenez comme module:


Comme le contrôleur et le lien prendra, sans doute déjà culte, esp8266 ( https://en.wikipedia.org/wiki/ESP8266 )


Dans notre cas, le module ESP-07:


L'alimentation est une batterie Krona 9V. Étant donné que tous les appareils fonctionnent à partir de 3,3 V, un convertisseur abaisseur est nécessaire. Une main tend la main pour mettre le LD1117 linéaire préféré de tout le monde:



Mais tout ce qui abaisse le convertisseur linéaire, c'est qu'il se dissipe simplement en chaleur. Le courant de crête de l'esp8622 est d'environ 0,4 A, ce qui signifie avec un convertisseur linéaire (9-3,3) * 0,4 = 2,28 W nulle part. Il fondra également.


Par conséquent, un convertisseur abaisseur pulsé a été assemblé sur le LM2576 :



3 ampères est certainement suffisant pour tout le monde (en fait, ce qui provenait de la base des composants a ensuite été soudé).


Schéma


En tant que CAD, Eagle a été utilisé, le schéma était le suivant:


Pour exécuter esp8622, vous devez tirer RESET et CH_PD au plus (inclut le module), GPIO15 au moins. Lorsque GPIO0 est tiré au sol, le module passe en mode programmation, il y a donc un cavalier.


GPIO02 et GPIO15 sont utilisés comme lignes SDA / SDL du bus I2C pour connecter le BMP280, ainsi que tout autre périphérique sur le bus (connecteur à broches JP5), par exemple un écran, pour le débogage sur place.
JP1 est utilisé pour se connecter via UART (via un convertisseur UART-USB) à un ordinateur pour programmer et déboguer le module.


Un diviseur de tension pour l'ADC est monté sur les résistances R6 et R5, afin que vous puissiez surveiller la charge de la batterie.


Frais


Le câblage est le suivant:



Très probablement, dans les meilleures traditions des circuits de loisirs, cela viole toutes les règles possibles, mais surtout cela fonctionne :)


L'appareil lui-même s'est avéré ceci:



La planche est fabriquée par la technologie de repassage laser (l'un des milliers d'exemples: http://cxem.net/master/45.php ).


Programmation des appareils


Pour un démarrage rapide pour esp8622, ils ont pris le firmware NodeMCU .


NodeMCU est un interpréteur Lua pour esp8622 et un tas de bibliothèques pour divers appareils, capteurs, écrans, etc.


Pour flasher l'appareil, vous devez d'abord obtenir ce firmware. La documentation offre plusieurs options, mais la plus simple d'entre elles est le service nodemcu-build.com , qui vous permet, en sélectionnant simplement les modules nécessaires, d'obtenir un firmware prêt à l'emploi pour le courrier.



Pour notre appareil, vous devez absolument sélectionner MQTT, I2C (car le capteur est situé sur ce bus), enfin, le capteur BME280 lui-même (nous avons BMP280, mais la bibliothèque est universelle), ainsi que l'ADC pour surveiller la batterie. Après avoir assemblé le micrologiciel, le service l'enverra au courrier spécifié.


Ensuite, vous devez fermer GPIO0 à la terre et mettre le module en mode de programmation (cavalier JP2), connecter l'adaptateur USB-UART et déformer l'alimentation.


Le téléchargement du micrologiciel est effectué à l'aide de NodeMCU PyFlasher . Vous devez sélectionner le port série approprié, le firmware lui-même et pour le module ESP-07 - Quad I / O, les autres modes ne fonctionneront pas.



Un peu de patience, jusqu'à ce que le firmware soit terminé, puis retirez le cavalier JP2, déformez l'alimentation et à la fin notre appareil est prêt pour le code utilisateur.


Code


Paramètres UART pour la connexion - 115200 8N1, en vous connectant avec un terminal pour le port série (par exemple, terminalbpp ), vous pouvez directement entrer des commandes lua, telles que REPL.



Mais nous sommes toujours intéressés par un firmware moins éphémère, de sorte qu'après un redémarrage, il reste :)
Au démarrage, NodeMCU commence à exécuter le fichier init.lua (le cas échéant) à partir de la carte flash. Ici, nous l'écrivons.


Pour l'exemple, nous prenons un exemple de la documentation:



Pour le téléchargement, nous avons utilisé l'utilitaire simple Asmodat ESP LUA Loader . Elle insère simplement file.open dans le terminal et écrit Lua ligne par ligne avec les commandes.


La logique est la suivante:


  1. Initialiser les appareils
  2. Connectez-vous au wifi
  3. Lire les lectures du capteur
  4. Nous nous connectons au courtier MQTT et envoyons des lectures aux sujets pertinents
  5. Désactivez le WiFi, endormez-vous jusqu'à la prochaine mesure

système de script Lua et la mise en page, nous avons établi , en principe, tout est tout à fait transparent.


Lieux que je voudrais noter:


L'entrée ADC esp8266 nécessite une tension dans la plage de 0 à 1 V et la sortie donne un nombre correspondant de 0 à 1024. Pour les résistances 39 kOhm et 470 kOhm - le coefficient de conversion est obtenu environ 13. Autrement dit, afin d'estimer (pas très précisément mesurer) la tension sur la batterie - vous devez multiplier la valeur obtenue par 13 et diviser par 1024.


Le capteur BMP280 étant universel, il dispose de plusieurs options de configuration pour différentes applications. Pour NodeMCU, l'initialisation du capteur pour les mesures climatiques ressemble à ceci (un chiffre magique):


bme280.setup(1, 1, 1, 1, 7, 0) -- weather mode 

En savoir plus sur ces chiffres dans la documentation . Eh bien, dans la carte de données sur le BMP280 ci-dessus.


Il n'était pas possible de passer en mode de veille profonde, pour une raison quelconque, le module ne se réveillerait pas.


La bibliothèque pour travailler avec MQTT est assez spécifique, il est impossible de déterminer exactement quand fermer la connexion. La communauté a une tonne de questions à ce sujet sans aucune solution. Il existe différentes solutions de contournement, comme cet article .


Mais dans notre cas, nous attendons juste quelques secondes pour un délai, puis désactivons le WiFi.


En outre, la prise en charge de TLS, bien qu'annoncée, mais n'a pas été obtenue, les données sont envoyées non cryptées.


Envoi de données


Une fois par minute, le module se connecte au WiFi et envoie les relevés des capteurs au courtier MQTT.
Rubriques dans MQTT au format suivant:


 /device_location/device_name/sensor 

Cela vous permet de vous abonner aux flux de données des capteurs à la fois par emplacement et par des capteurs spécifiques, par exemple, la température en dehors de la fenêtre:


 /outdoor/#/temperature 

Courtier MQTT


En tant que courtier MQTT, nous utilisons Eclipse Mosquitto. Pour installer, par exemple, dans Debian, vous avez besoin de deux paquets: mosquitto et mosquitto_clients.


Dans /etc/mosquitto/mosquitto.conf, vous devez écrire


 require_certificate false #  tls allow_anonymous true #  :) 

Ensuite, lancez notre appareil, en utilisant l'utilitaire mosquitto_sub, abonnez-vous aux rubriques de l'appareil, surveillez la météo)


 root@baikal:~# mosquitto_sub -v -t "/outdoor/#" /outdoor/iottest/temperature 30.07 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.765 /outdoor/iottest/voltage 439 /outdoor/iottest/temperature 30.09 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.445 /outdoor/iottest/voltage 451 /outdoor/iottest/temperature 29.93 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.400 /outdoor/iottest/voltage 452 

Le Baïkal est mentionné ici pour une raison. Nous sommes toujours géographiquement situés près du Baïkal, donc pour la station de base de l'appareil, il n'y avait pas d'autres options que d'utiliser BFK 3.1 sur le noyau Baïkal T-1 :)


Dans les articles suivants, nous passerons au transfert des données reçues de IIoT vers le système d'analyse et de visualisation et parlerons des files d'attente. Et pour le Baïkal, bien sûr :)

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


All Articles