Inhaltsverzeichnis:
- Schritt 1: Ausrüstung + Einrichtung
- Schritt 2: Einrichten der Schaltung
- Schritt 3: Arduino-Code und Blinken
- Schritt 4: Raspberry Pi-Code
- Schritt 5: Alles zusammenfügen
- Schritt 6: Grafana-Konfiguration und Dashboard-Anzeige
- Schritt 7: Einpacken
Video: Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Ich war auf der Suche nach einem kleinen IOT-Projekt und ein Freund empfahl mir, dieses Tutorial zu lesen:
dzone.com/articles/raspberry-pi-iot-sensor…
Ich empfehle dringend, dem Tutorial zu folgen, um einen Raspberry Pi für die Überwachung einzurichten. Dieses Tutorial führt weitere Schritte beim Design eines einfachen IoT-Geräts aus, das eine hohe Fehlertoleranz ermöglicht, und zeigt, wie nützlich ein Raspberry Pi in Verbindung mit Arduino sein kann.
Ich gehe auch auf die Wirksamkeit und gewisse Einschränkung der MQ*-Modelle von Luftsensoren ein. MQ*-Sensoren sind günstig, ziemlich effektiv und super einfach einzurichten.
Insgesamt wird Ihnen dies helfen, auf einfachste Weise mit der Verbindung eines Arduino mit dem Internet zu beginnen und den Weg für die Verwendung leichterer Footprint-Module (re: ESP8266) zu ebnen.
Spaß haben!
Schritt 1: Ausrüstung + Einrichtung
Ausrüstung
- Raspberry Pi mit installiertem Raspbian
- Raspberry Pi Netzteil
- Arduino Uno/Äquivalent
- Stecker auf Stecker USB Typ B auf Typ A (sollte mit Ihrem Arduino geliefert werden)
- Jeder der MQ*-Sensoren (ich habe die MQ-2, 4, 5 und 135 verwendet)
- Verschiedene Überbrückungsdrähte
- Mini-Steckbrett
Aufstellen
Dieses Tutorial ist als sanfte Einführung in die Verwendung von Arduino und Raspberry Pi gedacht - es hilft zu wissen, wie man das Linux-Terminal verwendet. Ich gehe jedoch nicht davon aus, dass Sie viel Erfahrung mit der Arbeit an Arduino oder Raspberry Pi haben - alles, was Sie wirklich brauchen, ist die bereitgestellte Ausrüstung und eine neugierige Einstellung.
- Sie müssen die Schritte in diesem Tutorial ausführen.
- Ich empfehle Ihnen, Secure Shell (SSH) für die Verbindung mit dem Raspberry Pi zu verwenden, da Sie so einfach Befehle eingeben können. Die Verbindung über SSH unterscheidet sich, ob Sie Windows, Linux oder Mac verwenden. Linux und Mac sind in Bezug auf ssh ziemlich einfach zu verwenden (der Befehl zum Öffnen von SSH ist buchstäblich ssh). Schauen Sie sich Putty für Windows an. Ich empfehle Ihnen, den Bildschirm auszuchecken, um Ihre Sitzung während des Projekts aufrechtzuerhalten.
- Außerdem müssen Sie Python unter Raspbian installieren. Als ich diese Schritte abgeschlossen hatte, machte ich eine Kopie einer alten SD-Karte, die ich aus einem früheren Projekt herumliegen hatte, auf dem bereits Python installiert war. Wenn Ihre Distribution von NOOBS/Raspbian Python 3.7 oder höher nicht hat, sehen Sie sich diese Schritte an, um Python aus dem Quellcode zu kompilieren.
- Machen Sie sich mit git vertraut und installieren Sie es, falls es noch nicht in Ihrer Raspbian-Distribution installiert ist.
Schritt 2: Einrichten der Schaltung
Es gibt eine Schaltung, die Sie im Arduino einrichten müssen.
Ich habe einen Schaltplan bereitgestellt, den Sie als Referenz verwenden können.
Das Schöne an allen MQ-*-Gassensoren ist, dass der Eingangswiderstand der analogen Pins des Arduino, sobald eine 5-Volt- und Masseverbindung hergestellt wurde, dem Sensor ermöglicht, korrekt zu arbeiten.
Achten Sie darauf, dass die analoge Verbindung von der Breakout-Platine im Sensor mit dem Arduino und nicht mit der digitalen Verbindung verbunden ist. Wenn Sie beim Testen auf einen sehr engen Wertebereich stoßen, empfehle ich Ihnen, zuerst Ihre Verbindung hier zu überprüfen.
Schritt 3: Arduino-Code und Blinken
Im folgenden Schritt verbinden wir das Arduino-Board mit dem Raspberry Pi. Bevor wir dies tun, müssen wir den Arduino mit Code flashen, um den Sensor zu lesen und Sensordaten an den Raspberry Pi zu übertragen. Dies kann auf jede Weise erfolgen, in der Sie normalerweise Code an das Arduino senden. Ich habe neben der Arduino-IDE ein Drittanbieter-Tool verwendet - daher füge ich die Arduino-Bibliothek oben hinzu. Für andere Projekte ist dies nicht erforderlich.
Überprüfen Sie den Code zum Kopieren/Einfügen am Ende dieses Abschnitts.
Was macht der Code
Der Code ist so eingerichtet, dass er Daten von vier verschiedenen Sensoren erhält. Wenn Sie verschiedene Sensortypen verwenden, ist es sinnvoll, die Benennung des von der seriellen Schnittstelle gesendeten Ausgangssignals zu ändern.
In der Schleife prüfen wir, ob der Raspberry Pi Daten von uns anfordert. Daher verwenden wir eine sehr einfache Master/Slave-Konfiguration, bei der der Raspberry Pi kontinuierlich Datenanfragen an den Arduino stellt. Dies ist viel einfacher, als einen Zähler im Arduino-Code zu haben, da es einfacher ist, zu testen, welche Werte vom Raspberry Pi aus funktionieren, anstatt neue Werte in den Arduino flashen zu müssen.
Das Arduino formatiert, sobald es eine Datenanforderung erhalten hat, die Ausgabe als GET-Parameter - dies bezieht sich auf HTTP-Methoden und ist einfach eine Designentscheidung. Wenn Sie ein Kommunikationsschema von Arduino über den seriellen Port entwerfen, können Sie problemlos alles andere verwenden, solange Sie es so entwerfen, dass die Daten vernünftig getrennt sind. Ich habe GET gewählt, weil es vertraut und robust ist.
Einfach testen…
Sobald Sie das Arduino geflasht und den Code ausgeführt haben, öffnen Sie den Serial Monitor der Arduino IDE. Wenn Sie das einzelne Zeichen "H" (Großbuchstaben beachten!) senden, erhalten Sie die Nutzdaten. Glückwunsch, es funktioniert!
Ein asynchroner Beispielsammler von MQ-*-Daten
#enthalten |
int mq2 = A2; |
int mq4 = A3; |
int mq5 = A4; |
int mq135 = A5; |
int eingehendesByte; |
voidsetup() { |
pinMode (mq2, EINGANG); |
pinMode (mq4, EINGANG); |
pinMode (mq5, EINGANG); |
pinMode (mq135, EINGANG); |
Serial.begin (9600); |
} |
/* valuePrint gibt den Wert für dieses Label aus. |
* Erzeugt nur Nebenwirkungen. |
*/ |
voidvaluePrint(String-Label, int-Lesung) { |
Serial.print (Etikett); |
Serial.print("="); |
Serial.print (Lesen); |
} |
Leerschleife () { |
// sehen, ob serielle Daten eintreffen: |
if (Seriell.verfügbar() >0) { |
// das älteste Byte im seriellen Puffer lesen: |
// "Wenn Sie Serial.read aufrufen, wird ein Byte aus dem Empfangspuffer entfernt und an Ihren Code zurückgegeben" |
eingehendesByte = Serial.read(); |
// Wenn es ein großes H (ASCII 72) ist, lesen Sie die Werte und senden Sie sie an den Himbeer-Host. |
// TODO: Stellen Sie sicher, dass die Nachricht jedes Mal die gleiche Länge hat |
if (incomingByte == 72) { |
int mq2Reading = analogRead(mq2); |
int mq4Reading = analogRead(mq4); |
int mq5Reading = analogRead(mq5); |
int mq135Reading = analogRead (mq135); |
Serial.print("?"); |
valuePrint("mq2", mq2Reading); |
Serial.print("&"); |
valuePrint("mq4", mq4Reading); |
Serial.print("&"); |
valuePrint("mq5", mq5Reading); |
Serial.print("&"); |
valuePrint("mq135", mq135Lesen); |
Serial.print("\n"); |
} |
} |
// die Seriennummer nur jede Sekunde lesen |
Verzögerung (1000); |
} |
rawmain.cpp anzeigen, gehostet mit ❤ von GitHub
Schritt 4: Raspberry Pi-Code
Nachdem Sie den Raspberry Pi gemäß https://dzone.com/articles/raspberry-pi-iot-sensor… konfiguriert haben, können Sie nun den Raspberry-Client-Code ausführen, der Daten über MQTT an unsere Datenbank sendet, die auch verbindet sich mit Grafana.
-
Stellen Sie sicher, dass Ihre Himbeere mit dem Internet verbunden ist und führen Sie dann einen git clone-Befehl aus, um den gesamten Code auf den Raspberry Pi zu kopieren. Ihr Befehl sieht ungefähr so aus:
git-Klon
-
Führen Sie im Terminal des Raspberry Pi einen Befehl zum Ändern des Verzeichnisses (cd) in "raspberry_client" aus:
cd raspberry_client.
-
Sie benötigen eine virtuelle Umgebung*. Einfach. Lauf
python3 -m venv env. Dadurch wird eine virtuelle Umgebung namens "env" erstellt, die wir verwenden werden, um Abhängigkeiten zu installieren.
-
Jetzt müssen wir unsere virtuelle Umgebung betreten. Lauf:
source env/bin/activate. Sie können nun die Abhängigkeiten des Projekts installieren.
-
In dem soeben geklonten Paket befindet sich eine Datei namens Requirements.txt. Öffnen Sie diese Datei; Sie werden sehen, dass wir die Pakete paho-mqtt und pyserial sowie die entsprechenden Versionen benötigen. Sie können den Inhalt der Datei anzeigen, indem Sie
Katzenanforderungen.txt. Um diese Pakete zu installieren, ru
pip install -r anforderungen.txt.
- Damit ist die Konfiguration abgeschlossen.
Buchstäblich jedes Tutorial, das Python verwendet, erwähnt Virtual env, und selbst für dieses kleine Projekt werde ich eine Erwähnung machen. Virtuelle Umgebungen ermöglichen es Ihnen, Versionen von Abhängigkeiten zu trennen sowie Ihren Python-Workflow zu trennen - Dies ist eine schöne Möglichkeit, Ihre Python-Arbeitsbereiche aufzuräumen. Wenn Sie zum ersten Mal virtuelle Umgebungen verwenden, lesen Sie sie hier kurz nach.
Was macht der Code…
Die Datei client.py importiert einen einfachen Satz von Bibliotheken, einschließlich unseres eigenen Arduinosensors. In der Hauptfunktion erhalten wir die Werte vom Arduino, veröffentlichen die Daten an den MQTT-Broker und schlafen dann für 10 Sekunden.
Die Datei arduinosensor.py ist eine Reihe von Hilfsmethoden, die die paho.mqtt-Bibliothek umschließen und ein nützliches Kommunikationsschema für die Kommunikation mit der Arduino-Nutzlast bereitstellen (siehe: parse_payload). Der Code ist natürlich am Ende dieses Abschnitts angehängt.
Ein einfacher Client, der über den seriellen Monitor mit einem Arduino-Element kommuniziert. Erwarten Sie den Code hier, wenn er veröffentlicht wird:
fromimportlibimportimport_module |
Importos |
Importzeit |
Importarduinosensor |
defmain(): |
# definierter Mandant öffnen |
start_time=time.time() |
whileTrue: |
read=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0")) |
arduinosensor.pub("python_client", payload=lesen) |
time.sleep(10.0- ((time.time() -start_time) %10.0)) |
if_name_=="_main_": |
hauptsächlich() |
rawclient.py anzeigen, gehostet mit ❤ von GitHub
Schritt 5: Alles zusammenfügen
Wir haben den Raspberry Python-Code eingerichtet und wir haben den Arduino-Client-Code eingerichtet. Lassen Sie uns dazu übergehen, beide Entitäten miteinander zu verbinden.
Zuerst verbinden wir das Arduino und richten die richtige Konfiguration ein:
-
Führen Sie auf Ihrem Raspberry Pi-Terminal aus
python -m serial.tools.list_ports. Dadurch werden alle USB-Ports aufgelistet, die die serielle Kommunikation unterstützen.
-
Schließen Sie nun Ihren Arduino an und warten Sie etwa 2 Sekunden, bis der Raspberry es erkennt. Eingeben
python -m serial.tools.list_ports noch einmal werden Ihnen die Ports wieder angezeigt. Möglicherweise wird eine zusätzliche Liste angezeigt - wenn dies tatsächlich der Fall ist, ist dieser neue Eintrag der Eintrag, mit dem Ihr Arduino verbunden ist. Dies wird wahrscheinlich "/dev/ttyUSB0" sein.
-
Versuchen Sie, den Python-Code in Ihrer virtuellen Umgebung auszuführen, indem Sie python3.7 client.py ausführen. Warten Sie ein paar Sekunden (höchstens zehn) - wenn Sie auf eine Ausnahme stoßen, müssen wir den Wert für unseren COM-Port auf dem Himbeer-Pi ändern. Wenn Sie sehen, dass der Code eine Zeile ausgibt, die mit "Sent following payload:…" beginnt, können Sie mit Grafana zum letzten Schritt übergehen. Tipp: unbedingt laufen
Bildschirm -S Python bevor Sie den Python-Client starten. Andernfalls verlieren Sie Ihr laufendes Python-Programm, wenn Sie Ihre Verbindung zu Ihrem Raspberry Pi beenden. Technisch gesehen müssen Sie nicht unbedingt "Python" als letzten Parameter verwenden, aber ich benennen meine Bildschirmsitzungen gerne entsprechend.
-
Um den Wert für den COM-Port zu ändern, müssen Sie eine Umgebungsvariable festlegen, bevor Sie den Code ausführen. Sie müssen dies für jeden möglichen Ausgabewert versuchen, den Sie beim Ausführen von python -m serial.tools.list_ports erhalten. Zum Beispiel, wenn die Anzahl der Einträge, die ich erhalten habe, zwei waren und die folgenden wären:
- /dev/ttyUSB6
- /dev/acm0
-
dann wären die Befehle, die ich ausführen würde:
PORT="/dev/ttyUSB6" python3.7 client.py, und wenn das nicht funktionieren sollte, würde ich nachher ru
PORT="/dev/acm0" python3.7 client.py
Sobald Sie diese Schritte ausgeführt haben, überträgt der Code Daten an unsere influxdb-Datenbankinstanz, die es uns bei Verbindung mit Grafana ermöglicht, unser Dashboard anzuzeigen.
Schritt 6: Grafana-Konfiguration und Dashboard-Anzeige
Okay, wir sind jetzt im Endspurt! Wir werden nun Grafana verwenden, um ein einfaches Dashboard zu erstellen.
- Stellen Sie eine Verbindung zu Ihrer Grafana-Instanz her. Da Sie die Schritte aus dem ursprünglichen dzone-Artikel befolgt haben, sollten Sie sich mit Ihrem Administratorbenutzer anmelden können. Fahren Sie fort und melden Sie sich an.
- Bewegen Sie den Mauszeiger im linken Bereich über das Symbol "Dashboards" - die vier Quadrate. Klicken Sie auf "Verwalten".
- Klicken Sie auf der neuen Seite auf "Neues Dashboard". Klicken Sie außerdem auf "Neues Panel hinzufügen".
-
Dies öffnet den Grafana-Editor. Wir erstellen eine einfache Ansicht mit einer einzelnen Metrik.
- Ändern Sie im rechten Bereich den Bereichstitel in einen aussagekräftigen Namen, z. B. "Kitchen Readings". Sie können auch eine optionale Beschreibung eingeben.
- Unten links "Abfrage" fügen wir eine einzelne Zeitachse hinzu. Grafana glänzt hier wirklich, da wir mit einer klickbasierten Schnittstelle problemlos SQL-Anweisungen erstellen können. Wählen Sie unter "Standard" InfluxDB aus.
- Um nun "A" abzulesen - wählen Sie in der FROM-Klausel die Messung "airtestt". Wenn Sie sich den ursprünglichen Python-Code in der Funktion get_values von arduinosensor.py ansehen, werden Sie feststellen, dass wir diese Airtestt-Tabelle im Code definieren.
- Gehen wir für ein Beispiel zur "SELECT"-Klausel und wählen Sie field(mq4). Ursprünglich gibt uns unser Dashboard die Auswahl "Mittelwert ()" - klicken Sie auf diese Auswahl und wählen Sie "Entfernen". Klicken Sie dann auf das Pluszeichen und wählen Sie unter "Aggregationen" "distinct()". Dadurch werden bestimmte Zeitpunkte angezeigt. Wir können andere Maße wählen, aber im Moment zeigt unser Panel unterschiedliche Werte von mq4 an.
- Klicken Sie oben rechts auf Speichern, und Sie sind fertig!
Falls Probleme auftreten, können Sie Ihre Einstellungen mit denen im beigefügten Screenshot überprüfen.
Schritt 7: Einpacken
In diesem Tutorial konnten Sie ein robustes MQTT-Netzwerk einrichten, das aus einem einzelnen Knoten und einem Broker besteht. Außerdem konnten Sie Ihre IOT-Daten mit Grafana visualisieren. Schließlich konnten Sie diese einfache Systemarchitektur (hoffentlich) bequem von Ihrem Browser und PC über eine SSH-Verbindung zusammenstellen.
Es gibt einige Dinge, die wir vielleicht verbessern möchten.
- Die Sensorwerte in unserem Diagramm sind nicht wirklich genaue Sensorwerte - sie sind die Ausgangsspannung unseres Sensors. Sie müssen kalibriert werden. Weitere Informationen finden Sie in diesem Blogbeitrag.
- Unsere Himbeer-Pi-Konfiguration kann viel leichter gemacht werden, indem eine mit dem Arduino verbundene ESP8266-Platine verwendet und der Pi vollständig entfernt wird. Sehen Sie sich eine Einführung in das ESP8266-Modul an.
- Möglicherweise möchten wir Benachrichtigungen für bestimmte Ereignisse hinzufügen. Zum Glück bietet Grafana eine Möglichkeit, dies zu tun.
Ich werde einige weitere Lektüre hinterlassen, um Ihre Fantasie mit der Welt von IOT zu verführen. Ich freue mich, Sie im nächsten instructable zu sehen!
Weitere Lektüre:
Empfohlen:
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: 3 Schritte
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: In diesem Tutorial erfahren Sie, wie Sie die Android-Anwendung mit dem AWS IOT-Server verbinden und die Spracherkennungs-API verstehen, die eine Kaffeemaschine steuert. Die Anwendung steuert die Kaffeemaschine über Alexa Sprachdienst, die c
So erhalten Sie Musik von fast jeder (Haha) Website (solange Sie sie hören können, können Sie sie bekommen Okay, wenn sie in Flash eingebettet ist, können Sie es möglicherweise nicht) BEARBEITET!!!!! Hinzugefügte Informationen: 4 Schritte
So erhalten Sie Musik von fast jeder (Haha) Website (solange Sie sie hören können, können Sie sie bekommen … Okay, wenn sie in Flash eingebettet ist, können Sie es möglicherweise nicht) BEARBEITET!!!!! Zusätzliche Informationen: Wenn Sie jemals auf eine Website gehen und ein Lied abspielen, das Sie mögen und es wollen, dann ist hier das anweisbare für Sie, nicht meine Schuld, wenn Sie etwas durcheinander bringen (nur so wird es passieren, wenn Sie ohne Grund anfangen, Dinge zu löschen) ) Ich konnte Musik für
So bauen Sie eine Uhr, die die Zeit an die Wand projiziert – wikiHow
So bauen Sie eine Uhr, die Zeit an die Wand projiziert: Dieses Instructable zeigt Ihnen, wie Sie eine Projektoruhr bauen. Mit diesem Gerät können Sie die Zeit an die Wand projizieren. Basierend auf einem kleinen LCD-Wecker (nicht zu klein, sondern kann nicht projiziert und bearbeitet werden) ist dies eine gute Möglichkeit
So verfolgen Sie Bilder in Photoshop Elements 6: 6 Schritte
So verfolgen Sie Bilder in Photoshop Elements 6: In diesem anweisbaren zeige ich Ihnen, wie Sie jedes Bild verfolgen und es so aussehen lassen, wie Sie es skizziert haben. Dies ist ziemlich einfach und wenn Sie möchten, können Sie es detaillierter machen. Dazu benötigen Sie: 1. Photoshop Elements 6 (Oder jede Form von Photoshop