Inhaltsverzeichnis:

Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi - Gunook
Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi - Gunook

Video: Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi - Gunook

Video: Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi - Gunook
Video: PROJEKT BALKONKRAFTWERK #4 ★ KOMPLETT INSTALL HOYMILES HM-800 ZU GRAFANA [PROXMOX DOCKER GRAFANA] 2024, November
Anonim
Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi
Verfolgen Sie die Luftqualität mit Grafana und Raspberry Pi

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

Einrichten der Schaltung
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.

  1. 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

  2. Führen Sie im Terminal des Raspberry Pi einen Befehl zum Ändern des Verzeichnisses (cd) in "raspberry_client" aus:

    cd raspberry_client.

  3. 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.

  4. Jetzt müssen wir unsere virtuelle Umgebung betreten. Lauf:

    source env/bin/activate. Sie können nun die Abhängigkeiten des Projekts installieren.

  5. 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.

  6. 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:

  1. 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.

  2. 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.

  3. 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.

    1. 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

Grafana-Konfiguration und Dashboard-Anzeige
Grafana-Konfiguration und Dashboard-Anzeige

Okay, wir sind jetzt im Endspurt! Wir werden nun Grafana verwenden, um ein einfaches Dashboard zu erstellen.

  1. 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.
  2. Bewegen Sie den Mauszeiger im linken Bereich über das Symbol "Dashboards" - die vier Quadrate. Klicken Sie auf "Verwalten".
  3. Klicken Sie auf der neuen Seite auf "Neues Dashboard". Klicken Sie außerdem auf "Neues Panel hinzufügen".
  4. Dies öffnet den Grafana-Editor. Wir erstellen eine einfache Ansicht mit einer einzelnen Metrik.

    1. Ändern Sie im rechten Bereich den Bereichstitel in einen aussagekräftigen Namen, z. B. "Kitchen Readings". Sie können auch eine optionale Beschreibung eingeben.
    2. 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.
    3. 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.
    4. 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.
    5. 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

Einpacken
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: