Einführung in das blockbasierte Programmieren mit BIPES und Node RED - esdkrwl/IoT4School GitHub Wiki

Einführung in das blockbasierte Programmieren mit BIPES und Node RED

Diese Anleitung zeigt Ihnen, wie Sie praktisch mit der IoT4School-Umgebung arbeiten können, um blockbasiert diverse IoT-Projekte umsetzen zu können.

Die Abschnitte sind unterteilt in:

  • Blockbasierte Initialisierung der Module (BIPES)
  • Blockbasierte Einrichtung der Kommunikation zwischen den Modulen (Node-RED)
  • Realisierung weiterer IoT4School-Projekte mithilfe von BIPES und Node-RED

Folgende Anleitungen sollten abgeschlossen sein und werden für diese Anleitung vorausgesetzt:

Des weiteren müssen die, zu den Mikrocontrollern und den Shields mitgelieferten Stiftleisten, an die Mikrocontroller/Shields gelötet werden:
esp8266_shields

Für weitere Informationen hierzu stehen Ihnen im Internet zahlreiche Videoanleitungen zur Verfügung, unter anderem Folgende: Buchsen an ESP8266 löten


Im Folgenden wird beispielhaft gezeigt, wie man mithilfe von BIPES und Node-RED einen "Smart-Button" entwickelt, der eine RGB-LED über MQTT ansteuert.
Hierfür benötigen Sie:

  • 2x Wemos D1 mini Mikrocontroller
  • 1x Wemos 1-BUTTON Shield
  • 1x Wemos RGB LED Shield (oder Wemos-kompatible Drittanbieter Shields)

Blockbasierte Initialisierung der Module (BIPES)

Stecken Sie einen Wemos D1 mini Mikrocontroller mit einem 1-Button Shield zusammen. Den zweiten Mikrocontroller verbinden Sie mit dem RGB LED Shield.
BILD

Verbinden Sie beide Mikrocontroller mit einer Stromquelle und überprüfen Sie, ob Sie diese in der IoT4School-Datenbank mit dem Verbindungsstatus "Verbunden" sehen können. (Dieser Prüfvorgang bereits hier erläutert: Wemos D1 mini - Abschluss der Konfiguration)

Greifen Sie auf die IoT4School-Webseite zu und navigieren Sie zum Reiter BIPES.
Mit einem Klick auf den Button werden Sie auf die BIPES-Oberfläche weitergeleitet.

Auf der Arbeitsfläche befindet sich bereits ein Block - der IoT4School-Setup Block:
iot_setup_block

Dieser Block ist beim Öffnen eines neuen Projektes standardmäßig vorhanden und kann auch nur einmal pro Projekt verwendet werden.
In diesen fügen Sie die anderen Blöcke des IoT4School-Projektes ein.
Die Aufgabe des Blocks ist es, die MQTT-Kommunikation mit dem MQTT-Broker zu automatisieren, sodass sich der Anwendende nicht darum kümmern muss.

Wählen Sie aus dem linken Teil der Benutzeroberfläche IoT4School aus und navigieren Sie zum Menüpunkt Smart_Button. Zur Auswahl stehen diverse Blöcke für das 1-Button Shield:

Ziehen Sie den Initialisierungsblock in den IoT4School-Setup Block.
Bei Bedarf können Sie den Namen der Modul-ID über den Pfeil neben dem i anpassen.
So sollte Ihr Arbeitsbereich nun aussehen (In diesem Beispiel wurde die Modul-ID zu Smartie geändert):

Achten Sie darauf, den richtigen Zugriffs-PIN anzugeben.
Es ist automatisch der Zugriffs-PIN hinterlegt, mit dem die Shields im Werkszustand ausgeliefert werden.

Um herauszufinden, welche PIN-Nummer oder I2C-Adresse ihr Shield verwendet, wurde im Wiki eine Hilfstabelle erstellt:
Hilfstabelle PIN- und I2C-Belegung der Wemos Shields

Die Hilfstabelle gibt Ihnen einen Überblick über die Kompatibilität der Shields untereinander, wenn Sie mehrere Shields mit einem Mikrocontroller kombinieren wollen.
Außerdem erhalten Sie dort eine Erklärung, wie Sie den verwendeten PIN durch das Zusammenlöten zweier Kontaktpunkte verändern können.

Nun müssen Sie sich mit dem Mikrocontroller verbinden, um den, aus den Blöcken generierten, Code, zu übertragen.
Klicken Sie hierfür auf das WLAN-Symbol im oberen Bereich der Benutzeroberfläche:

Unter Network geben Sie die entsprechenden Zugangsdaten ein, die sie während der Erstkonfiguration Ihres Mikrocontrollers hinterlegt haben:

  • wemos1 ersetzen Sie durch die von Ihnen gewählte Geräte-ID (Diese können Sie auch aus der Datenbank ablesen)
    • Alternativ ist auch die Eingabe der IP-Adresse möglich, jedoch ist dieser Weg umständlicher (Ebenfalls aus der Datenbank ablesbar)
  • Bei Password geben Sie das webrepl_password, welches Sie in der device_config.json hinterlegt haben (Standard-Passwort: 123)

Bestätigen Sie ihre Eingabe mit einem Klick auf den Button Network (über der Zeile Address) und wechseln Sie zum Reiter Console.
Folgende Meldung sollte in der Konsole sichtbar sein:
webrepl_success

Erhalten Sie hingegen folgende Meldung, war die Verbindung zum Gerät initial erfolgreich, wurde aber aufgrund eines falschen Passwortes wieder getrennt:
webrepl_fail

Aktuell befindet sich das Gerät noch in einer Dauerschleife, die zunächst gestoppt werden muss, damit das Empfangen von Eingaben über die WebREPL-Konsole empfangen kann.
Drücken Sie hierfür auf den Button Stop running program:
stop_running_program

Wechseln Sie zum Reiter Files und wählen links im File Manager das erste Projekt mit dem Kennzeichner automatic im Bereich Blocks to code aus:
bipes_blocks_to_code

Verändern Sie den Titel des Projekts zu main.py und klicken Sie im Anschluss auf den Button Save a copy:
bipes_save_copy

Links im File-Manager erhalten Sie eine Bestätigung, dass die Datei auf den Mikrocontroller übertragen wurde und gleichzeitig werden die Daten angezeigt, die sich aktuell auf dem Gerät befinden:

Über das Aktualisieren-Symbol können Sie sich auch die Dateien auf dem Gerät anzeigen lassen, ohne vorher etwas übertragen zu müssen.

Außerdem können Sie über den File-Manager direkte Änderungen an den Dateien vornehmen, die sich auf dem Gerät befinden.
Wählen Sie hierfür die Datei aus, die sie bearbeiten wollen, nehmen sie Änderungen im Bearbeitungsfenster vor und bestätigen diese mit Klick auf den Save-Button.

Wechseln Sie nun zurück zum Reiter Console und betätigen den Button Soft reset device, damit der Mikrocontroller neustartet und die Änderungen wirksam werden.

Nach Neustart werden sie automatisch wieder mit dem Gerät per WebREPL verbunden, sodass sie theoretisch erneut das laufende Programm stoppen könnten, um noch nachträglich weitere Dateien zu übertragen.

Über die WebREPL werden auch Ausgaben des Gerätes angezeigt, wenn z.B. Daten zur Verarbeitung empfangen oder verschickt wurden.
Dies können Sie nachvollziehen, in dem sie über die IoT4School-Datenbank einen Blink-Befehl an den Mikrocontroller senden.

In der WebREPL-Konsole erscheint folgende Ausgabe:
weprepl_blink

Der erste Mikrocontroller ist damit bereits programmiert.
Das Projekt kann bei Bedarf mithilfe des Herunterladen-Symbols (download_button) lokal als .xml abgespeichert werden.
Über das Hochladen-Symbol (upload_button) kann die so abgespeicherte Datei wieder aufgerufen werden.

Um mit der Programmierung des anderen Mikrocontrollers über BIPES zu starten, kann die Seite einfach aktualisiert werden.
Alternativ können Sie über das Mülleimer-Symbol (trash_button) alle Blöcke oder, durch das Auswählen einzelner Blöcke und dem Betätigen der ENTF-Taste, ausgewählte Blöcke entfernen.
Sollten Sie alle Blöcke entfernen, fügen Sie den IoT4School-Setup Block wieder hinzu:

Die Programmierung des zweiten Mikrocontrollers, unter Benutzung der RGB_LED, geschieht analog zum ersten Mikrocontroller:

(In diesem Beispiel wurde die Modul-ID zu Leuchti geändert und ein anderer Zugriffs-PIN benutzt.
Der Grund für die veränderte PIN-Auswahl wird hier ausgeführt.)

Achten Sie darauf, unter Network nun die entsprechenden Zugangsdaten für den zweiten Mikrocontroller einzugeben.
(In diesem Beispiel wurde für den zweiten Mikrocontroller die Geräte-ID wemos2 verwendet.)

Hiermit ist die blockbasierte Initialisierung innerhalb von BIPES abgeschlossen.

Blockbasierte Einrichtung der Kommunikation zwischen den Modulen (Node-RED)

Greifen Sie erneut auf die IoT4School-Webseite zu und navigieren Sie zum Reiter Node-RED.

Hier stehen Ihnen fünf verschiedene Node-RED Instanzen zur Verfügung. Wählen Sie eine beliebige hiervon aus.
Sollten Sie die Zugangsdaten nicht verändert haben, entnehmen Sie diese der folgenden Wiki-Seite: Vorkonfigurierte Zugangsdaten

Im linken Teil der Node-RED Benutzeroberfläche stehen Ihnen im Bereich IoT4School diverse Node-RED Knoten zur Verfügung:

Ziehen Sie den Sensor-Knoten in den Arbeitsbereich und konfigurieren diesen mittels Doppelklick auf den Knoten:

Sollten die Werte in der Klappliste nicht verfügbar sein, können Sie neue Werte über das Stift-Symbol () hinzufügen.

  • Server: Eingabe der Raspberry Pi IP-Adresse oder des Hostnamens
  • Geräte ID: Enstpricht dem Namen des Mikrocontrollers (unter anderem aus der Datenbank ablesbar)
  • Sensor: Name des Sensors
    • Entnehmen Sie diesen aus dem Initialisierungsblock von BIPES. Initialisiere ### [...] (### entspricht dem Namen, den man unter Sensor einträgt)
  • Modul ID: In BIPES vergebener Name des Moduls
  • QoS: Dienstgüte, mit dem die Kommunikation zwischen den Beteiligten stattfindet
    • Für weitere Informationen zu MQTT QoS schauen Sie hier
  • Name: Name zur Identifizierung innerhalb von Node-RED (Kann frei gewählt werden)

Ziehen Sie den Aktor-Knoten in den Arbeitsbereich und konfigurieren diesen ebenfalls:

Fügen Sie den, für den Smart_Button speziell entwickelten, Klick-Dekodierer hinzu.
Dieser leitet, je nach getätigtem Klick (Einfacher Klick, Doppelklick, ...), die Nachricht an den dafür vorgesehenen Ausgang weiter.

An diesen können Sie nun Knoten hängen, mit dem die RGB_LED gesteuert werden kann.

In diesem Beispiel wurde der erste Ausgang (Einfacher Klick) mit dem Eingang eines RGB-Knotens verbunden sowie der Eingang eines Helligkeits-Knotens mit dem zweiten Ausgang (Doppeklick) des Klick-Dekodierers:

Diese Knoten können Sie auch über einen Doppelklick konfigurieren.

Abschließend verbinden Sie noch den eingerichteten Sensor-Knoten und den Aktor-Knoten, wie auf folgendem Bild zu sehen:

Bestätigen Sie die vorgenommenen Änderungen durch Klick auf den Übernahme (deploy)-Button in der oberen, rechten Ecke der Benutzeroberfläche:
node_red_deploy

Das Ergebnis dieser Implementierung sollte nun wie folgt aussehen:

  • Bei einem einfachen Klick auf das Smart_Button-Modul sollte die RGB_LED mit einer Helligkeit von 100% leuchten
    • Wurde kein Farbwert definiert, leuchtet die LED nach Moduldefinition standardmäßig mit folgendem RGB-Wert: (0,177,193)
  • Bei einem Doppelklick wird der vordefinierte Farbwert in diesem Fall durch den RGB-Wert (255,0,0) ersetzt, was der Farbe rot entspricht.

Realisierung weiterer IoT4School-Projekte mithilfe von BIPES und Node-RED

Das, in den beiden vorherigen Abschnitten, definierte Beispiel soll exemplarisch das Arbeiten mit IoT4School veranschaulichen.
Sowohl Node-RED und BIPES verfügen über weitere Blöcke beziehungsweise Knoten, die genutzt werden können, um noch eine Vielzahl weiterer IoT-Projekte zu realisieren.
Jedoch kann aufgrund des Zeitaufwandes nicht für jeden Block oder Knoten ein Anwendungsszenario zur Verfügung gestellt werden.

Um jedoch eine Hilfestellung bei der Implementierung der weiteren Blöcke zu erhalten, stehen Ihnen sowohl in BIPES als auch Node-RED Kurzinfos zur Verfügung, die Ihnen bei der Implementation helfen sollen.

BIPES:
Fahren Sie mit der Maus über den gewünschten Block, um sich für diesen eine Kurzinfo anzeigen zu lassen:
bipes_tooltip

Zusätzlich enthalten die Blöcke eine Eingabe-Validierung, sodass falsche Werte automatisch korrigiert werden.
Über fehlende Eingaben werden Sie ebenfalls benachrichtigt:
bipes_warning

Node-RED:
Klicken Sie auf den Knoten, zu dem Sie weitere Informationen erhalten wollen.
Durch einen Klick auf das Buch-Symbol in der oberen, rechten Ecke der Benutzeroberfläche, können Sie sich die Hilfe anzeigen lassen:

Außerdem befindet sich eine kurze Dokumentation der jeweiligen Knoten auf folgender Webseite: node-red-contrib-iot4school