Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

'Breathe Better' Bär - Ein Luftqualitätsprojekt. Teil 3

Einleitung

Hallo zu Teil 3 von 3 Beiträgen über meinen Breathe Better Bär.

Teil 1 drehte sich um die Herausforderung, den Bär zu bauen und welche Materialien ich benutzt habe. Teil 2  ist eine Bauanleitung, die die Laserschneiddateien und das 3D-gedruckte Teil enthält, um das Projekt nachzubauen, sowie eine Anleitung, wie alles mit dem Reka:bit-Board verbunden wird.

Hier in Teil 3 werde ich über die Programmierung des Bären sprechen. Dieser Teil des Projekts war eine Herausforderung für mich, da ich zum ersten Mal versucht habe, etwas mit IoT zu machen. Zum Glück hatte ich ganz viel Hilfe von Pete Milne.

Die Idee für den Breathe Better Bear war, dass er sowohl Zugang zu den Informationen der ESDK-Sensoren als auch zu einer externen API hat, die dabei hilft, eine Vorhersage des Luftqualitätsindexes zu erstellen, so dass die Nutzer wählen können, ob der Bär auf die aktuellen (lokalen) Bedingungen gemäß den Sensoren oder auf die regionale Vorhersage gemäß der API zeigt.

Die Programmierung wird daher in diese Teile unterschieden:

  • Das Verhalten des Bären programmieren
  • Den Bär ans Internet anschließen
  • Mit Mosquitto die MQTT Verbindung checken
  • Installation von Node-RED
  • Node-RED benutzen, um die ESDK Sensordaten zu erhalten
  • Node-RED benutzen, um an eine API zu verbinden

Das Verhalten des Bären programmieren

Sie erhalten eine Kopie des Code hier:  here. Weil ich das Micro:Bit in einem Reka:Bit board verwendet habe, programmierte ich mit MakeCode. Die Erklärung dazu folgt.

Im vorherigen Artikel (Teil 2) finden Sie eine Anleitung zum Erstellen und Zusammenbauen des Bären. Um ihn zum Leben zu erwecken, gibt es 4 Elemente auf dem Bären, die über den Code gesteuert werden können: der zeigende Arm, die linke Augenbraue, die rechte Augenbraue und der Mund, der umklappt, um seinen Gesichtsausdruck zu verändern.

Darüber hinaus gibt es einen Kippschalter, mit dem der Bär zwischen dem Empfang lokaler und regionaler Informationen wechseln kann, die Lichter, die diese Wahl widerspiegeln, und das Licht für gefährliche Bedingungen, das aufleuchtet, wenn die Luftqualität deutlich genug sinkt.

Bear Faces

Wir wissen, dass der Bär je nach den 6 Luftqualitätsindizes (AQI) unterschiedliche Ausdrücke haben wird (für das Projekt verwende ich die Tabellen der USA): Gut, mäßig, ungesund für empfindliche Gruppen, ungesund, sehr ungesund und gesundheitsgefährdend. Die Parameter für die Ausdrücke und Verhaltensweisen für die einzelnen Stufen werden in verschiedenen Funktionen gespeichert, die dann vom Programm aufgerufen werden können. (Die Funktionsblöcke befinden sich im Dropdown-Menü Erweitert).

FunctionsBearBehavior

In meinem Code, wie in der Bauanleitung beschrieben, ist Servo 1 (S1) der Arm, Servo 2 (S2) ist der Mund, Servo 3 (S3) ist die linke Augenbraue und Servo 4 (S4) die rechte Augenbraue. Pin 9 (P9) ist das Ausrufezeichen für Hazardous, Pin 12 (P12) und P2 sind die Statusleuchten (in diesem Teil des Codes nicht abgebildet).

Da in meinem Projekt ein Micro:bit v.2 verwendet wurde, ist es in der Lage, einfache Sounds abzuspielen, ohne dass ein Pin zugewiesen werden muss. Alle orangefarbenen Servoblöcke, die hier verwendet werden, befinden sich unter der Reka:Bit-Erweiterung. (Gehen Sie zu Advanced>Erweiterungen>Rekabit)

Der Code kann getestet werden, indem eine Endlosschleife hinzugefügt wird, die die verschiedenen Funktionen aufruft.

TestCode

Die Positionen der Servos wurden durch Versuch und Irrtum ermittelt. Sobald die Positionen das gewünschte Verhalten für jede AQI-Stufe widerspiegeln, ist es an der Zeit, den Bären mit WiFi zu verbinden.

Den Bär ins Internet bringen und die Verbindung durch ein MQTT Test Service testen

Um eine Verbindung zum Wifi und MQTT-Server herzustellen, benötigen wir eine weitere Makecode-Erweiterung, mit der wir das Wifi-Modul verwenden können. Wenn Sie unter Erweiterungen für esp8266 suchen, werden Sie mehrere Optionen finden. Während das Modul, das wir verwenden, von Cytron stammt, werden wir das iot-environment-kit verwenden, da es uns mehr Zugang zu MQTT-Blöcken bietet.

Extensions

MQTTBlocks

Um die Verbindung mit dem Wifi-Modul und dann dem MQTT-Broker herzustellen, müssen die Blöcke im "on start" enthalten sein. Um die Fehlersuche zu erleichtern, sind im Code mehrere Blöcke enthalten, die die Verbindungen testen.

OnStartCode

Wenn das Micro:bit startet, wird zunächst ein Herzsymbol angezeigt. Stellen Sie dann die Verbindung des Wifi-Moduls mit den Pins her, an denen es angeschlossen ist (in diesem Fall Rx P16 und Tx P15). Fügen Sie dann einen Block mit Ihren Wifi-Anmeldedaten hinzu (und ersetzen Sie den Platzhaltertext), halten Sie einige Sekunden lang an und testen Sie, ob die Wifi-Verbindung besteht, indem Sie einen if true-Block einfügen, der dann ein Häkchen oder ein x anzeigt, je nachdem, ob die Verbindung besteht oder nicht. Sobald das erledigt ist, gibt es Blöcke, um die Verbindung mit dem MQTT-Server herzustellen, und wenn die Verbindung hergestellt ist, wird wieder ein Häkchen oder ein x angezeigt. Im Moment verwendet der Code den Server test.mosquitto.org, der weiter unten erklärt wird.

Wichtig: Dies muss später geändert werden, wenn ein anderer MQTT-Server verwendet wird.

Wenn Sie den Bären mit diesem Code einschalten und die WIFI- und MQTT-Verbindungen funktionieren, zeigt er ein Herz an, dann ein Häkchen, gefolgt von einem weiteren Häkchen nach ein paar Sekunden. Wenn nach dem Herz ein x angezeigt wird, müssen Sie Ihre Wifi-Anmeldedaten überprüfen. Wenn nach dem Häkchen ein x angezeigt wird, müssen Sie die Einstellungen Ihres MQTT-Servers überprüfen und sicherstellen, dass alles richtig geschrieben ist und der richtige Port verwendet wird.

Wie bereits erwähnt, ist der Bär in zwei Modi eingerichtet. In dem einen hört er auf Informationen von den ESDK-Sensoren und in dem anderen auf die API. Um dies zu berücksichtigen, setzt der Code für den Schalter oben auf dem Bären die Variable "mode" entweder auf "local" oder "regional" und schaltet die richtige Kontrollleuchte ein und die falsche aus.

Mode

Wenn das erledigt ist, können wir einen "When Topic Block" aus den MQTT-Blöcken hinzufügen, der auf Nachrichten wartet, die vom MQTT-Dienst zu bestimmten Topics gesendet werden. Im Fall des Bären hört er auf Nachrichten zu zwei Topics. Das eine ist regional/aqi (hört auf die AQI-Daten vom API-Server) und das andere ist local/pm2pt5 (hört auf die PM2.5-Sensordaten des ESDK)

MQTTTopics

Der Code prüft zunächst, ob es eine Nachricht zu diesem Thema gibt, und prüft dann, ob sie sich im richtigen "Modus" der durch den Schalter eingestellten Variablen befindet. Ist dies der Fall, wird geprüft, welche Nummer die Nachricht hat (der Inhalt der Nachricht wird vom Benutzer definiert; eine Zahl von 1-6 entspricht den Nummern der Luftqualitätsindex-API für die verschiedenen Luftqualitätsstufen, weshalb sie aus Gründen der Klarheit so beibehalten wurden. Sobald der Code die spezifische Zahl erhält, ruft er die entsprechende Variable auf und der Bär führt das programmierte Verhalten aus.

Wenn Makecode Sie die Zahlen nicht als Nachricht einfügen lässt, liegt das daran, dass Sie sie in einen Textfeldblock einfügen müssen, denn obwohl es sich um Zahlen handelt, müssen sie als Text interpretiert werden. Der Textfeld-Block befindet sich oben unter Erweitert>Text.

TextBubble

Mosquitto nutzen, um die MQTT Verbindung zu testen

Nachdem der Bär codiert wurde, ist es an der Zeit, ihn mit dem Mosquitto-Testserver zu testen. Mosquitto ist ein MQTT-Broker, der einen Testserver für Entwickler zur Verfügung stellt, um ihre MQTT-Einstellungen und dergleichen zu überprüfen.

Installieren Sie Mosquitto um mit Ihrem Server zu sprechen. Anleitungen dazu gibt es hier https://mosquitto.org/download/

Nach dem Herunterladen können Sie mit Mosquitto Befehle senden, um Nachrichten zu dem gewünschten Thema auf dem Testserver zu veröffentlichen.

(Das Betriebssystem, das bei der Erstellung des Bären verwendet wurde, war MacOS, daher bitte ich um Entschuldigung, wenn die Anweisungen anders lauten, wenn Sie ein anderes Betriebssystem verwenden).

Um eine Nachricht unter MacOS zu senden, öffnen Sie ein Terminal-Fenster, nachdem Mosquitto erfolgreich installiert wurde, und geben Sie die Nachricht ein:

mosquitto_pub -h test.mosquitto.org -t ‘regional/aqi’ -m ‘3’

Dieser Befehl besagt, dass auf dem Mosquitto-Host test.mosquitto.org zum Thema "regional/aqi" die Nachricht "3" veröffentlicht werden soll. Bitte beachten Sie, dass MacOS Terminal das einfache Anführungszeichen ' ' anstelle der doppelten Anführungszeichen " " zum Senden von Nachrichten verwendet.

Wenn der Bär an dieser Stelle korrekt kodiert wurde und der Schalter oben auf die Einstellung "regional" umgeschaltet ist, sollte er das Verhalten für die Kategorie "Unhealthy for Sensitive Groups" ausführen.

Node-RED installieren

Ab jetzt beziehen sich die meisten Punkte der Anleitung auf das ESDK und auf die Grundlagen des Setup für dieses Kit.

Aber wenn Sie einen Raspberry Pi mit angeschlossenen Sensoren haben, können Sie vielleicht folgen, aber ich fürchte, ich kann Sie dabei nicht anleiten.

Das ESDK verfügt über spezifische Einstellungen, die beim Einspielen der Karte vorgenommen werden, wie z. B. das Senden der Informationen von den Sensoren als MQTT-Nachrichten unter dem Thema Luftqualität.

Da ich ein visueller Programmierer bin, hat mich Peter Milne durch die Installation von Node-Red geführt, einem Programmiertool, mit dem man den Raspberry Pi (unter anderem) über den Browser mit "Node"-Codierung programmieren kann.

Diese Anleitung stammt von Peter Milne :

1. Remote login via SSH:

ssh pi@airquality.local

2. Update system:

sudo apt update

sudo apt upgrade

3. Schalten Sie das Gerät mit der Stopptaste (unten) aus, entfernen Sie das Netzteil, warten Sie ein paar Sekunden und schalten Sie es dann wieder ein.

Checken Sie ob alles noch geht

4. Installieren Sie Node-RED, indem Sie das untenstehende Raspberry Pi-Installationsskript von Node-RED ausführen. Alle Details finden Sie auf dieser Seite:

https://nodered.org/docs/getting-started/raspberrypi

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Der Output sollte so aussehen:

Running Node-RED install for user pi at /home/pi on Raspbian

This can take 20-30 minutes on the slower Pi versions - please wait.

Stop Node-RED ✔

Remove old version of Node-RED ✔

Remove old version of Node.js ✔

Install Node.js 14 LTS ✔ v14.18.3 Npm 6.14.15

Clean npm cache ✔

Install Node-RED core ✔ 2.2.0

Move global nodes to local -

Npm rebuild existing nodes ✔

Install extra Pi nodes ✔

Add shortcut commands ✔

Update systemd script ✔

 

Eventuelle Fehler werden geloggt nach  /var/log/nodered-install.log

Fertig

Sie können nun Node-RED mit dem Befehl node-red-start oder über das Symbol unter Menü / Programmierung / Node-RED starten

Den Browser auf localhost:1880 or http://{your_pi_ip-address}:1880 einstellen

Started : Tue 1 Feb 11:34:14 GMT 2022

Finished: Tue 1 Feb 11:38:09 GMT 2022

You may want to run node-red admin init to configure your initial options and settings.

5. Starten Sie Node-RED

node-red-start

6. Schalten Sie auto-startup an

sudo systemctl enable nodered.service

7. Starten Sie das System neu und das nächste Mal wird Node-RED automatisch starten

8. Öffnen Sie einen Browser und navigieren Sie zu airquality:1880 - der Fluss sollte im Browserfenster erscheinen

Jedes Mal, wenn ein Knoten geändert wird, muss er neu eingerichtet werden.

Node-RED documentation:

https://nodered.org/docs/

ESDK MQTT Nachrichtenformat:

{"hardwareId": "RPI0000000010f6d74f",

"thv": {"vocIndex": 100, "temperature": 23.7, "humidity": 36.5, "sensor": "THV0.2"},

"pm": {"sensor": "PM20.2", "pm1.0": 1, "pm2.5": 1, "pm4.0": 1, "pm10": 1},

"geohash": "u11n9g377406", "co2": {"sensor": "CO20.2", "co2": 720}

}

Sobald Node-Red installiert ist, können Sie eine Verbindung herstellen, indem Sie in Ihrem Browser die IP-Adresse Ihres Pi eingeben: 1880 (im Falle des Bären + ESDK ist es http://airquality.local:1880) und mit dem Programmieren beginnen.

Ab jetzt müssen Sie den Code ändern, damit der Bär mit dem ESDK spricht und die MQTT messages erhält. Im MQTT Broker Hostblock muss die IP Adresse zum ESDK passen. Die erhalten Sie von Ihrer Adminseite. 

Node-RED benutzen, um an die ESDK Sensordaten zu kommen

Node-RED verwendet Blöcke oder Knoten, wie sie hier genannt werden, auf die Sie doppelklicken können, um die Einstellungen zu ändern. Sie können sie miteinander verbinden, indem Sie auf das kleine graue Kästchen an der Seite klicken und die erzeugte Linie zu dem Block ziehen, mit dem Sie sie verbinden möchten.

Using NODE-RED

Dies ist ein Überblick über meinen ersten "Flow", der dem Code zum Abrufen der Sensordaten und zum Senden an den Bären entspricht.

Ich werde jeden Knoten unten erklären. Um den Knoten zu finden, den Sie verwenden möchten, achten Sie auf die Farbe und die Icons. Die Namen sind anpassbar, Sie werden also keinen Knoten finden, der zum Beispiel "pm2pt5_filter" heißt. Denken Sie daran, dass Sie die Einstellungen mit einem Doppelklick bearbeiten können.

  • ESDK- Dieser Knoten verbindet sich mit dem MQTT-Dienst des ESDK und abonniert das Thema Luftqualität. Er liest die Informationen vom Sensor, der mit dem ESDK verbunden ist, die er überträgt. Sie können die spezifischen Informationen auf dem MQTT-Broker bearbeiten, indem Sie auf die Schaltfläche "Pencil Edit" klicken.
  • ESDKNodeEdit ESDKNode
  • Pm2pt5_filter- Dieser Knoten filtert die Informationen aus dem ESDK heraus, so dass er NUR auf den pm2.5-Filter achtet, der den Feinstaub in der Luft misst und den wir zur Berechnung des AQI verwenden werden
  • Pm2pt5filter
  • Pm2pt5_rules- Dieser Knoten stellt eine Reihe von Regeln zur Interpretation der Sensordaten auf. Demnach ist die Luftqualität gut, wenn der Sensor Werte zwischen z. B. 0 und 12 misst; die gesendete Nachricht lautet dann "1". Liegt der Wert zwischen 13 und 35, ist die Luftqualität mäßig und die Meldung lautet "2" usw. Die hier verwendeten Werte wurden auf der Website AirNow.gov berechnet, auf der man den Schadstoff (z. B. pm2,5) eingeben kann und erfährt, welche Werte der jeweiligen Luftqualitätsindexstufe entsprechen.
  • Pm2pt5rules
  • 1,13,36,56,151,252 - Diese Schaltflächen dienen dazu, zu prüfen, ob die Nachrichten korrekt gesendet werden. Drücken Sie auf das abgerundete Quadrat auf der linken Seite und die Nachricht oder Nummer, die der Schaltfläche entspricht, wird gesendet. Der Bär sollte dann die Nachricht erhalten und entsprechend handeln. In diesem Fall entspricht jede von ihnen der niedrigsten Zahl, die die nächste AQI-Stufe aktiviert. (Hier abgebildet ist der Knopf für 1, was gut wäre)
  • InjectNode1
  • Changes- Dieser Knoten blockiert das Senden einer neuen Nachricht, wenn sich der Wert nicht ändert. Auf diese Weise sendet er nicht ständig dieselbe Zahl immer wieder.
  • Changes
  • Msg.payload- Wird zur Fehlersuche verwendet
  • Debugging1
  • Local/pm2pt5- Dieser Knoten sendet die zuvor festgelegte MQTT-Nachricht oder Nummer an das von Ihnen angegebene Topic. Dies ist das Topic, für das der Bär codiert ist.
  • LocalMQTT

Node-RED benutzen, um eine API zu verbinden

Um eine API zu verwenden, muss man zunächst entscheiden, welche API verwendet werden soll. Für das Bärenprojekt wollte ich Luftqualitätsindexdaten, die Vorhersagen ermöglichen. Und natürlich wollte ich, dass sie kostenlos sind.

In den USA gibt es eine Regierungswebsite AirNow.gov, die es Ihnen ermöglicht, ihre API kostenlos zu abonnieren, solange Sie die Anzahl der zulässigen API-Aufrufe nicht überschreiten (dazu später mehr). Sie können Ihren eigenen API Schlüssel hier erstellen: https://docs.airnowapi.org/

Sobald Sie ein Konto haben, können Sie zu den Webdiensten gehen und "Vorhersage nach Breiten- und Längengrad" oder was auch immer für Sie am besten geeignet ist, auswählen und die Informationen über das Gebiet oder die Region eingeben, für die Sie die Vorhersage wünschen. Dadurch wird ein API-Schlüssel generiert, den Sie dann in Node-RED verwenden können.

In Node-Red müssen Sie einen neuen Fluss erstellen (vorausgesetzt, Sie haben zuerst den Sensorfluss erstellt), indem Sie das Hamburger-Menü > Flows > Add

AddFlow

RegionalFlow

Dies ist der zweite "Fluss" in meinem Projekt und ich werde über die hier verwendeten Knoten sprechen. Bitte beachten Sie noch einmal, dass die Knoten während des Programmierens benannt wurden. Um die richtigen Knoten zu finden, sollten Sie sich die Farben und die Symbole ansehen, die sie haben. Durch einen Doppelklick auf jeden Knoten können Sie die Einstellungen ändern.

  • Zeitstempel - Hier können Sie einstellen, wie oft die API-Website auf Aktualisierungen überprüft werden soll. Es ist besser, dies nicht zu oft zu tun, da Ihr AirNow-Konto blockiert werden könnte, wenn es zu viele Anrufe pro Stunde erhält. Da wir die Vorhersageoption verwenden werden, kann dies so eingestellt werden, dass es in Abständen von 60 Minuten oder so wiederholt wird.
  • Timestamp
  • AirNow- Dies ist ein http-Anfrageknoten. Dieser verbindet sich mit der API unter Verwendung Ihres persönlichen Schlüssels, den Sie in den URL-Abschnitt eingeben.
  • AirNowRequest
  • Funktion- Dieser Funktionsknoten prüft die API-Antwort, die eine JSON-Zeichenfolge ist. Er ruft direkt den Luftqualitätsindex ab, der sich im Element "Kategorie", "Nummer" befindet. Dieser AQ-Index von 1 bis 6 wird später an den Bear gesendet.
  • FunctionNode
  • Msg.payload- Wird zur Fehlersuche verwendet
  • debug2
  • Regional/aqi- Hier wird die MQTT-Nachricht an das von Ihnen festgelegte Thema gesendet. Dies ist das Thema, für das der Bär codiert ist.
  • RegionalAqi
  • 1,2,3,4,5,6 - Diese Tasten dienen zum Testen, ob die Nachrichten korrekt gesendet werden. Drücken Sie auf das abgerundete Quadrat auf der linken Seite und die Nachricht oder Nummer, die der Taste entspricht, wird gesendet. Der Bär sollte dann die Nachricht erhalten und entsprechend handeln.
  • Inject2

Zusammenfassung

Jetzt ist der 'Breathe Better' Bär bereit zum Einsatz!

Durch die Codierung des Micro:Bit im Inneren des Bären, um eine Verbindung zum Wifi und zum MQTT-Broker herzustellen, der im Raspberry Pi innerhalb des ESDK eingerichtet wurde, ist er nun in der Lage, die Bedingungen des Luftqualitätsindexes vor Ort anzuzeigen, indem er die ESDK-Sensoren ausliest, oder eine Vorhersage in Ihrer Region zu erstellen, indem er sich mit einer kostenlosen Luftqualitäts-API verbindet.

Ich hoffe, dass Ihnen die Artikel gefallen haben und dass sie Sie dazu inspirieren, Ihr eigenes Projekt zu erstellen.

Cecilia is an illustrator, maker, and dreamer. She likes making things that amuse her (mainly involving animals). Cecilia has worked as an educator for several years in different capacities, mainly with students ages 6-14 years old.
DesignSpark Electrical Logolinkedin