Im vorherigen Artikel haben wir kurz die Organisation und Verarbeitung von IoT-Daten mithilfe des Apache NiFi-Projekts überprüft. Mit diesem Artikel eröffnen wir eine Reihe, in der wir detailliert auf jede Phase eingehen, von den Geräten selbst über die Analyse der DataLake-Plattform bis hin zu maschinellem Lernen, Vorhersage von Anomalien usw.

Beginnen wir nun mit der allerersten Ebene, direkt von „Dingen“, dem Buchstaben T aus der Abkürzung IoT. Vom Gerät selbst, der Organisation des Kommunikationskanals und der Verwendung des MQTT-Protokolls. Der IoT-Trend gibt es schon seit mehreren Jahren, aber zum größten Teil die Idee, dass es sich um eine Glühbirne und eine Fassung handelt, die vom Telefon aus eingeschaltet wird. In der Produktion, im Bergbau und in verschiedenen anderen Branchen wird seit Jahrzehnten eine Vielzahl von Sensoren eingesetzt, deren Werte in der SCADA- Produktion erfasst werden. Verbinden Sie einfach den Datenstrom mit dem Internet, und wir erhalten das gleiche IoT, genauer gesagt IIoT - das industrielle Internet der Dinge.
Warum ist das alles notwendig, wenn SCADA in all diesen Jahrzehnten den Produktionszyklus erfolgreich verwaltet?
Es gibt mehrere Gründe:
- Die Möglichkeiten für den Einsatz von Sensoren erweitern sich beispielsweise in der Logistik, wo ein Standortsensor an einem bestimmten LKW oder PKW installiert ist, sowie an verschiedenen zusätzlichen Sensoren wie Kraftstoffverbrauch oder Ausfallzeiten (Wartezeit an der Station, während das Auto angeschlossen ist) - all dies geht über das lokale Produktionsnetzwerk hinaus
- Die Anzahl der Sensoren auf Geräten wächst, sie erfordern eine komplexere Verarbeitung, die nicht immer durch Unternehmenskapazitäten erfolgen kann
- Die Fähigkeiten des maschinellen Lernens und der künstlichen Intelligenz, die aufgrund des Wachstums der Rechenleistung entwickelt wurden, können verwendet werden, um die Produktion zu optimieren, nach Engpässen zu suchen und Anomalien zu identifizieren
Infolgedessen senden Sensoren in der Produktion nicht mehr nur Werte an SCADA. Wir benötigen eine Softwarearchitektur, die es uns ermöglicht, eine Kette vom Endsensor auf jeder Maschine bis zur Computerwolke aufzubauen, in der das Servicepersonal basierend auf der Historie der Maschine unter Verwendung des geschulten Modells die Meldung erhält: „37% Ausfallwahrscheinlichkeit des Mechanismus, Sie müssen einen Techniker senden ".

Nun zurück zu den Dingen! Um solche Systeme zu demonstrieren, werden normalerweise offene Sätze historischer Sensorindikatoren einer Branche verwendet. Leider funktioniert bei dieser Option "Berühren" das System nicht. Nein, wir kommen nicht in die Fabrik, aber wir machen unser einfaches "Ding mit dem Internet".
Unser Tätigkeitsbereich bezieht sich auf Serverinfrastrukturen, aber wir verfügen noch über einige hobbyelektronische Fähigkeiten, sodass das „Ding“ hausgemacht sein wird.
Wir werden die einfachste Überwachungsoption wählen - den Klimasensor, wir werden Daten über Temperatur, Luftfeuchtigkeit und Druck sammeln.
Komponentenbasis
Wir nehmen den BMP280 als Sensor.
Eine sehr raffinierte Sache, die nicht nur für Wetterdaten entwickelt wurde, sondern dank eines empfindlichen Barometers auch für die GPS-Unterstützung, für die Navigation im Gebäude (zur Bestimmung des Bodens) und für Spiele zur Unterstützung des Beschleunigungsmessers. Wir werden es nur für Wetterdaten verwenden.
Nehmen Sie als Modul:

Als Controller und Kommunikationskanal werden wir esp8266 ( https://en.wikipedia.org/wiki/ESP8266 ) nehmen, wahrscheinlich bereits einen Kultkanal.
In unserem Fall das ESP-07-Modul:

Das Netzteil ist eine 9V Krona Batterie. Da alle Geräte mit 3,3 V arbeiten, wird ein Abwärtswandler benötigt. Eine Hand greift nach dem beliebtesten linearen LD1117 aller :

Aber alles, was den Linearwandler senkt, ist, dass er sich einfach in Wärme auflöst. Der Spitzenstrom von esp8622 beträgt ungefähr 0,4 A, was bedeutet, dass mit einem Linearwandler (9-3,3) * 0,4 = 2,28 W nach nirgendwo. Es wird auch schmelzen.
Daher wurde am LM2576 ein gepulster Abwärtswandler montiert:

3 Ampere sind definitiv genug für alle (tatsächlich wurde das, was von der Komponentenbasis war, dann verlötet).
Schema
Als CAD wurde Eagle verwendet, das Schema war wie folgt:

Um esp8622 auszuführen, müssen Sie RESET und CH_PD auf das Plus (einschließlich des Moduls) und GPIO15 auf das Minus ziehen. Wenn GPIO0 zu Boden gezogen wird, wechselt das Modul in den Programmiermodus, sodass ein Jumper vorhanden ist.
GPIO02 und GPIO15 werden als SDA / SDL-Leitungen des I2C- Busses zum Anschließen des BMP280 sowie aller anderen Geräte am Bus (Pin-Anschluss JP5), z. B. eines Displays, zum Debuggen vor Ort verwendet.
JP1 wird verwendet, um über UART (über einen UART-USB-Konverter) eine Verbindung zu einem Computer zum Programmieren und Debuggen des Moduls herzustellen.
An den Widerständen R6 und R5 ist ein Spannungsteiler für den ADC montiert, damit Sie die Batterieladung überwachen können.
Gebühr
Die Verkabelung ist wie folgt:

Höchstwahrscheinlich verstößt es in den besten Traditionen der Hobby-Schaltung gegen alle möglichen Regeln, aber am wichtigsten ist, dass es funktioniert :)
Das Gerät selbst stellte Folgendes fest:


Die Platte wird durch Laserbügeltechnologie hergestellt (eines von Tausenden von Beispielen: http://cxem.net/master/45.php ).
Geräteprogrammierung
Für einen schnellen Start von esp8622 haben sie die NodeMCU- Firmware verwendet.
NodeMCU ist ein Lua-Interpreter für esp8622 und eine Reihe von Bibliotheken für verschiedene Geräte, Sensoren, Displays usw.
Um das Gerät zu flashen, müssen Sie zuerst diese Firmware herunterladen. Die Dokumentation bietet mehrere Optionen, die einfachste davon ist jedoch der Dienst nodemcu-build.com , mit dem Sie einfach durch Auswahl der erforderlichen Module eine vorgefertigte Firmware für E-Mails abrufen können.

Für unser Gerät müssen Sie auf jeden Fall MQTT, I2C (da sich der Sensor an diesem Bus befindet), den BME280-Sensor selbst (wir haben BMP280, aber die Bibliothek ist universell) sowie ADC zur Überwachung der Batterie auswählen. Nach dem Zusammenstellen der Firmware sendet der Dienst diese an die angegebene Mail.
Als nächstes müssen Sie GPIO0 gegen Masse schließen und das Modul in den Programmiermodus (Jumper JP2) versetzen, den USB-UART-Adapter anschließen und die Stromversorgung verzerren.
Der Firmware-Download erfolgt mit NodeMCU PyFlasher . Sie müssen die entsprechende serielle Schnittstelle und die Firmware selbst auswählen. Für das ESP-07-Modul - Quad i / O funktionieren andere Modi nicht.

Ein wenig Geduld, bis die Firmware fertig ist, dann den Jumper JP2 entfernen, die Stromversorgung verzerren und am Ende ist unser Gerät bereit für den Benutzercode.
Code
UART-Einstellungen für die Verbindung - 115200 8N1 Durch Verbinden mit einem Terminal für die serielle Schnittstelle (z. B. terminalbpp ) können Sie lua-Befehle wie REPL direkt eingeben.

Wir sind aber immer noch an weniger kurzlebiger Firmware interessiert, so dass sie nach einem Neustart erhalten bleibt :)
Beim Start beginnt NodeMCU mit der Ausführung der Datei init.lua (falls vorhanden) von der Flash-Karte. Hier schreiben wir es.
Für das Beispiel nehmen wir ein Beispiel aus der Dokumentation:
Zum Herunterladen haben wir das einfache Dienstprogramm Asmodat ESP LUA Loader verwendet . Sie schiebt file.open einfach in das Terminal und schreibt Lua Zeile für Zeile mit den Befehlen.
Die Logik lautet wie folgt:
- Geräte initialisieren
- Stellen Sie eine Verbindung zu WLAN her
- Sensorwerte ablesen
- Wir verbinden uns mit dem MQTT-Broker und senden Lesungen zu den relevanten Themen
- Schalten Sie WLAN aus und schlafen Sie bis zur nächsten Messung ein
Wir haben das Lua-Skript, die Schaltung und die Verkabelung der Platine angelegt , im Prinzip ist dort alles ziemlich transparent.
Orte, die ich beachten möchte:
Der ADC esp8266-Eingang benötigt eine Spannung im Bereich von 0 bis 1 V und der Ausgang gibt eine entsprechende Zahl von 0 bis 1024 an. Für Widerstände 39 kOhm und 470 kOhm - der Umwandlungskoeffizient wird ungefähr 13 erhalten. Um die Spannung an der Batterie abzuschätzen (nicht sehr genau zu messen), müssen Sie den erhaltenen Wert mit 13 multiplizieren und durch 1024 dividieren.
Da der BMP280-Sensor universell ist, stehen ihm verschiedene Konfigurationsoptionen für verschiedene Anwendungen zur Verfügung. Für NodeMCU sieht die Initialisierung des Sensors für Klimamessungen folgendermaßen aus (eine magische Zahl):
bme280.setup(1, 1, 1, 1, 7, 0) -- weather mode
Weitere Informationen zu diesen Nummern finden Sie in der Dokumentation . Nun, in der Datenplatine auf dem BMP280 oben.
Es war nicht möglich, in den Tiefschlafmodus zu wechseln, aus irgendeinem Grund wurde das Modul nicht aktiviert.
Die Bibliothek für die Arbeit mit MQTT ist sehr spezifisch. Es ist unmöglich, genau zu bestimmen, wann die Verbindung geschlossen werden soll. Die Community hat eine Menge Fragen dazu ohne Lösung. Es gibt verschiedene Problemumgehungen, z. B. diesen Artikel .
In unserem Fall warten wir jedoch nur einige Sekunden auf eine Zeitüberschreitung und schalten dann WLAN aus.
Auch Unterstützung für TLS, obwohl angekündigt, aber nicht erhalten, werden die Daten unverschlüsselt gesendet.
Daten senden
Einmal pro Minute stellt das Modul eine Verbindung zu WLAN her und sendet die Sensorwerte an den MQTT-Broker.
Themen in MQTT im folgenden Format:
/device_location/device_name/sensor
Auf diese Weise können Sie Datenströme von Sensoren sowohl nach Standort als auch nach bestimmten Sensoren abonnieren, z. B. nach der Temperatur außerhalb des Fensters:
/outdoor/
MQTT-Broker
Als MQTT-Broker verwenden wir Eclipse Mosquitto. Für die Installation in Debian benötigen Sie beispielsweise zwei Pakete: mosquitto und mosquitto_clients.
In /etc/mosquitto/mosquitto.conf müssen Sie schreiben
require_certificate false
Starten Sie als Nächstes unser Gerät mit dem Dienstprogramm mosquitto_sub, abonnieren Sie Gerätethemen und überwachen Sie das Wetter.
root@baikal:~
Baikal wird hier aus einem Grund erwähnt. Wir befinden uns immer noch geografisch in der Nähe des Baikalsees. Für die Basisstation des Geräts gab es keine anderen Optionen als die Verwendung von BFK 3.1 auf dem Baikal T-1-Kern :)
In den folgenden Artikeln werden wir uns mit der Übertragung der vom IIoT empfangenen Daten an das Analyse- und Visualisierungssystem befassen und über Warteschlangen sprechen. Und natürlich über den Baikal :)