RadioShuttle Sketch-Installation für ESP32

Dieses Kapitel behandelt die Installation von RadioShuttle-Sketches. Informationen zum „ECO Power“-Board finden Sie hier. Für Hinweise zur Inbetriebnahme lesen bitte dieses Kapitel.

Eine einfache RadioShuttle-Testanwendung („RadioTest“) ist für den Einstieg gedacht. Es gibt zwei Geräte, die miteinander kommunizieren und eine einfache Nachricht austauschen. Ein Gerät nennt sich Knoten und das zweite ist eine Station. Per Tastendruck (Taste A) wird eine Nachricht vom Knoten zur Station übertragen. Das geht auch umgekehrt, die Station kann auch eine Nachricht an den Knoten übertragen.

Beispielanwendung „RadioTest“ aktivieren

Laden Sie das Beispiel „RadioTest“ über den Menüpunkt „Datei > Beispiele > RadioShuttle > RadioTest“ in die IDE. Mit diesem Beispielprogramm kann man Nachrichten von einem Knoten zu einer Station oder umgekehrt verschicken. Es besteht aus den Dateien „PinMap.h“, „RTCUtil.cpp“ und „RadioTest.ino“.

Folgende Anpassungen müssen vor der Verwendung vorgenommen werden:

PinMap.h anpassen

„PinMap.h“ definiert die Anschlussverbindungen der ESP32 MCU mit dem Funkchip und der übrigen Peripherie. Sie muss auch später in den Dateiordner eines jeden Programms kopiert werden. Man findet sie anschließend in der Arduino IDE oben als zusätzlichen Reiter.

Damit Programmcode und Board-Revision zusammen passen, suchen Sie nach #elif defined(ARDUINO_ESP32_DEV) und stellen sicher, dass diese Zeile aktiv ist. Sollten Sie eine andere Version des „ECO Power“-Boards besitzen, aktivieren Sie die entsprechende Zeile und deaktivieren Sie ggf. die ältere „ECO Power“-Revision:

#define ESP32_ECO_POWER_REV_1 // our rev1 ESP32 ECO Power Boards

RadioTest.ino anpassen

Der Reiter „RadioTest“ zeigt den Programmcode der Datei „RadioTest.ino“ an. Im Bereich setup() ist unter remoteDeviceID = 1 die individuelle Geräte-ID der Gegenstation bzw. des Servers, mit der das RadioTest-Beispiel kommuniziert, einzutragen.

Die eindeutige ECO Power Geräte-ID in der Variable „myDeviceID“ (welche gleichzeitig als LoRa-Knotennummer genutzt wird) sowie ein Board-Code der Variable „myCode“ werden automatisch über Properties gesetzt. Diese Properties kommen aus dem ESP32 eFuse Speicher, welcher während der Produktion einmalig eingestellt wurde. Eigene Properties, die im ESP32 Flash-Speicher abgelegt werden und auch nach dem Upload eines neuen Sketches erhalten bleiben, können ebenfalls gesetzt werden.

remoteDeviceID = XXX // die Geräte-ID der Station (Server)

In der Zeile remoteDeviceID = wird die Geräte-ID der Gegenstation, mit der das RadioTest-Beispiel kommuniziert, eingetragen.

Die Zeile: #define USE_DEMOBOARD_PAIR kann wie folgt auskommentiert werden:
// #define USE_DEMOBOARD_PAIR

Diese Zeile diente dazu, die ausgelieferten Boardpärchen automatisch aufeinander abzustimmen.

Hier ein Beispiel für den neuen setup()-Block für Server und Client:

#ifdef RADIO_SERVER
 remoteDeviceID = 432; // usually this is the board ID of the other board
 server = true;
#else // client
 remoteDeviceID = 431; // usually this is the board ID of the other board
 server = false;
#endif
// #define USE_DEMOBOARD_PAIR

Ein weiteres Beispiel für den neuen setup()-Block für Server und Client, wobei hier der Stromsparmodus „deepsleep“ per RS_Node_Offline aktiv wird:

#ifdef RADIO_SERVER
 remoteDeviceID = 432; // usually this is the board ID of the other board
 server = true;
#else // client
 remoteDeviceID = 431; // usually this is the board ID of the other board
 server = false;
 useNodeOffline = true;
#endif
// #define USE_DEMOBOARD_PAIR

RS_Node_Offline hat beim ESP32 die Besonderheit, dass während nichts zu tun ist, das Board die MCU abschaltet und im „deepsleep“ mit extrem geringem Energieverbrauch verweilt. Nach ca. 10 Sekunden startet das Board erneut und prüft, ob etwas zu tun ist. Nach Abarbeitung aller Aufgaben geht das Board wieder in den „deepsleep“-Modus.

Beispielanwendung „RadioTest“ für den Server aktivieren

Öffnen Sie im Reiter „RadioTest“ in der Arduino IDE den anzupassende Sketch.
Für den Server muss folgende Zeile so aussehen:
server = true

Jetzt kann die Software „RadioTest“ kompiliert und auf das Board (Server) hochgeladen werden.

Beispielanwendung „RadioTest“ für den Knoten aktivieren

Öffnen Sie im Reiter „RadioTest“ in der Arduino IDE den anzupassende Sketch.
Für den Knoten muss folgende Zeile so aussehen:
server = false

Die Software „RadioTest“ muss danach erneut kompiliert und dann auf das Board (Knoten) hochgeladen werden.

Beispielanwendung „RadioTest“ prüfen

Einfach am Knoten die „User“-Taste drücken. Daraufhin wird eine Netzwerknachricht vom Knoten zum Server geschickt. Bei der Nachrichtenübertragung sollten die Sende- und Empfangs-LEDs kurz blinken. Das ist auch umgekehrt möglich, indem am Server die Taste „User“ gedrückt wird und der Knoten eine Nachricht empfangen sollte.

Zusätzlich werden die Nachrichten im Konsolenfenster „Serieller Monitor“ angezeigt.

Arduino-Fenster „Serieller Monitor“ öffnen

Es empfiehlt sich, das Arduino-Konsolenfenster „Serieller Monitor“ immer geöffnet zu haben, da hier wichtige Meldungen angezeigt werden. Voraussetzung ist natürlich ein angeschlossener Programmieradapter. Auch Reset-Meldungen wie Watchdog-Reset, Stromausfall-Reset (Brownout) und Bootmeldungen werden dort angezeigt.

Empfangene RadioShuttle-Meldungen und versendete Nachrichten werden hier ebenfalls angezeigt. Über die Funktion EnablePacketTrace() kann die Protokollierung von Meldungen abgestellt bzw. angepasst werden.

Sollte das Fenster „Serieller Monitor“ erst später geöffnet werden, sind vorherige Meldungen natürlich nicht sichbar.

Beispiel A: Erfolgreicher Start der RadioShuttle-Software

Unmittelbar nach Start oder Reset des Boards sollte im Fenster „Serieller Monitor“ eine Meldung ähnlich der obigen zu sehen sein. Wichtige Parameter, wie z.⁥ B. Frequenz, Bandbreite sowie der Spreading-Faktor sind ersichtlich. Die „TimeOnAir“-Meldung signalisiert, wie lange die Daten mit den eingestellten Parametern unterwegs sind. Die Uhrzeit wird, falls vorhanden, von der RTC-Zeit übernommen, ansonsten wird die Compile-Zeit genutzt. Wichtig ist auch die Information der Knotennummer (hier „ID=14“) sowie die Einstellung, ob das System als Knoten („Node“) oder Station läuft.

Beispiel B: Nachricht erfolgreich versendet

Nach Drücken der Taste „A“ wurde eine Testnachricht an einen zweiten Knoten gesendet. Dieser hat den Empfang bestätigt.

Beispiel C: Time-out beim Verschicken einer Nachricht

Nach Drücken der Taste „A“ wurde eine Testnachricht gesendet. Der Empfang wurde aber nicht bestätigt. Nach drei Versuchen wird dieser Vorgang abgebrochen und eine Time-Out-Fehlermeldung („MSG_SentTimeout“) erscheint.

LED-Zustände im Beispiel „RadioTest“

LED 2 (grüne LED rechts):

  • Aus 
    Das Board hat keinen Strom oder es befindet sich im „deepsleep“-Modus
  • Blinkt kurz alle 10 Sekunden
    Das Board läuft und befindet sich im ESP32 „deepsleep“-Modus, um möglichst wenig Energie zu verbrauchen, der Prozessor wird dabei weitgehend abgeschaltet. Das kuze Aufblinken signalisiert, dass es regelmäßig aktiv wird um zu prüfen, ob es etwas zu tun gibt
  • Leuchtet permanent schwach 
    Das Board ist aktiv und arbeitet in der Arduino „loop“ Ergeignisse ab. Danach nutzt es einen einfach „sleep“ und wird ca. 1000 mal pro Sekunde durch das Betriebssystem aufgeweckt
  • Flackert etwas
    Hiermit wird der Empfang von LoRa-Funkdaten signalisiert
  • Dauerhaft an
    Das Board ist aktiv und arbeitet in der Arduino „loop“. Während diese durchläuft, ist die LED an; wenn also die „loop“ permanent aktiv ist (Dauerläufer), leuchet die LED durchgängig. Für den energieoptimierten Einsatz sollte die „loop“ natürlich so wenig wie möglich laufen bzw. nur wenn es etwas zu Verarbeiten gibt. Stichwort: kein Polling

LED 1 (rote LED links):

  • Aus 
    Im Regelfall leuchet die rote LED nicht, kann aber vom Anwender genutzt werden
  • Flackert etwas
    Beim Senden von LoRa-Funkdaten leuchtet die rote LED – abhängig von der Datenlänge – kurz auf. Dies passiert während des Sendens bei jeder Nachricht

Natürlich lassen sich die LEDs vom Anwender auch indivuell oder zusätzlich nutzen.

Permanentspeicher für Einstellungen

Es gibt einen Speicher, in dem Einstellungen, die nach einer neuen Programminstallation („Sketch“) auf dem Board erhalten bleiben sollen, permanent gespeichert werden können. Hier bietet es sich an, Einstellungen wie WiFi-Zugangsdaten o.⁥ ä. zu speichern. Die Beispielanwendungen „PropertyEditor“ und „PropertyTest“ (siehe Tabelle unten) können dazu verwendet werden. Die Seite Permanentspeicher für Einstellungen erklärt dies detailliert.

Übersicht aller Beispielanwendungen

Name Library Erklärung
Blinky Arduino-mbed-APIs Periodisches Blinken einer LED
BlinkyEnhanced Arduino-mbed-APIs Timergesteuertes Blinken einer LED
BlinkyEnhanced_C_Plus_Plus Arduino-mbed-APIs Timergesteuertes Blinken einer LED (in C++)
CPUBench Arduino-mbed-APIs Misst die Float- und Integer-CPU-Leistung
DisplayI2CSample Arduino-mbed-APIs Verwendung eines OLED-Displays (128×64 Pixel, I2C)
ESP32AsyncHTTPClient Arduino-mbed-APIs Ein einfaches HTTP-Clientprogramm, das einen HTTP GET– oder POST-Request ausführt. Das ganze passiert asynchron ohne die Arduino-Hauptschleife (loop) zu blockieren
ESP32BlinkyDeepSleep Arduino-mbed-APIs „deepsleep“-Beispiel (geringer Energiebedarf); blinkt alle 10 Sek. während des „deepsleep“, LED2 blinkt jede Minute beim Wakeup
ESP32FrequencyThrottle Arduino-mbed-APIs MCU-Prozessortaktung auf 2 MHz herabsetzen um Energie zu sparen
ESP32MQTTAlarmSystem Arduino-mbed-APIs Kleines Alarmsystem, das per Bewegungsmelder einen Alarm über MQTT auslöst, inklusive Status- und Temperaturdaten per Display
ESP32MQTTClient Arduino-mbed-APIs Stellt eine WiFi-Verbindung zu einem MQTT-Broker her, verschickt Nachrichten dorthin und empfängt registrierte Topics vom Broker
ESP32RadioShuttleMQTT Arduino-mbed-APIs Empfängt Daten von Knoten und leitet diese an einen MQTT-Broker weiter. Empfangene MQTT-Nachrichten können an LoRa-Knoten weitergeleitet werden
HelloWorld Arduino-mbed-APIs Einfaches Ausgabebeispiel; erläutert verschiedene „printf“-Optionen
PropertyEditor Arduino-mbed-APIs Programm zum Setzen von Einstellungen (Properties), welche im Board permanent gespeichert werden. Bleiben nach dem Neustart bzw. auch nach dem Aufspielen eines neuen Programms erhalten. Siehe auch Permanentspeicher für Einstellungen
PropertyTest Arduino-mbed-APIs Zeigt, wie Properties, z.⁥ B. Strings und Nummernwerte in permanentem Flash-Speicher für die Verwendung in Sketches gespeichert werden können. Siehe auch Permanentspeicher für Einstellungen
RTC3231Calibration Arduino-mbed-APIs Kalibrierungswerkzeug zum Messen von Frequenzfehlern der RTC des „ECO Power“-Boards
TimerTest Arduino-mbed-APIs Beispiel, welches mehrere asynchrone Timer aufruft, die Erledigungsfunktionen aufrufen, wenn ein Timeout ansteht. Arbeitet präzise und energiesparend
RadioTest RadioShuttle Siehe detailliertes Beispiel oben
PMSensorRadio RadioShuttle Umweltsensor; misst periodisch die Staubkonzentration in µg/m3 (nach PM10- und PM2.5-Standard)

PDF-Datenblatt »