RadioShuttle Sketch-Installation für ESP32

Voraussetzungen

Für einen einwandfreien Betrieb muss die Arduino IDE installiert und zusätzlich eine ESP32-Unterstützung vorhanden sein.

RadioShuttle Library installieren

Die komplette RadioShuttle-Software wird in einem Zip-Archiv ausgeliefert und kann unter Angabe der Board-ID hier geladen werden. Die ID finden Sie auf der Platinenrückseite, z. B: 5678.
Geladen wird ein Zip-Archiv mit der aktuellen Software, z. B.: „RadioShuttle-Arduino-2018-05-10.zip“.
Das Zip-Archiv muss entpackt und dessen Inhalt dann in den Ordner „Documents/Arduino/libraries“ kopiert werden.

Nach dem Kopieren sollte im Ordner „libraries“ Folgendes zu sehen sein:

  • „Adafruit_Si7021“ (Library für den Temperatur-/Luftfeuchtigkeitssensor)
  • „Arduino-mbed-APIs“ (zusätzliche Treiber und neue Timer-Funktionen für den ESP32-Chip)
  • „ds3231“ (Library für die RTC-Uhr)
  • „OLED“ (Library für das Heltec LoRa-Board)
  • „RadioShuttle“ (Funkprotokollsoftware und Beispiele)
  • „SX1276GenericLib“ (Treiber für den LoRa-Funkchip)

Beispielanwendung „RadioTest“ aktivieren

Wenn Sie mit einem Mac arbeiten, muss vor Aktivierung der Beispielanwendung noch der richtige serielle Treiber (CP2102) für das „ECO Power“-Board installiert werden:

Suchen Sie im Internet nach „CP210x VCP Mac OSX Driver“, laden Sie den Treiber von der Download-Seite der Firma Silicon Labs herunter und installieren Sie diesen.

Stellen Sie sicher, dass in der Arduino IDE unter „Werkzeuge > Board“ der Eintrag „ESP32 Dev Module“ und für den Port „/dev/cu.SLAB_USBtoUART“ angezeigt wird und die Baudrate im Fenster „Serieller Monitor“ 115200 beträgt.

Anschließend kann das Beispiel „RadioTest“ über den Menüpunkt „Datei > Beispiele > RadioShuttle > RadioTest“ in die IDE geladen werden. 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 #define BOARD_REV_720 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 die andere Revision:

#define ESP32_ECO_POWER_REV_1 // our rev1 ESP32 ECO Power Boards

RadioTest.ino anpassen

Über den Reiter „RadioTest“ gelangt man in den Programmcode der Datei „RadioTest.ino“. 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 other board
 server = true;
#else // client
 remoteDeviceID = 431; // usually this is the board ID 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 other board
 server = true;
#else // client
 remoteDeviceID = 431; // usually this is the board ID 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.

Beispielanwendungen

Beispielanwendung „RadioTest“ für den Server aktivieren

Im Reiter „RadioTest“ im Arduino IDE-Reiter muss der anzupassende Sketch geöffnet werden.
Für den Server muss folgende Zeile aktiviert sein:
#define RADIO_SERVER

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

Beispielanwendung „RadioTest“ für den Knoten aktivieren

Im Reiter „RadioTest“ im Arduino IDE-Reiter muss der anzupassende Sketch geöffnet werden.
Für den Knoten muss folgende Zeile deaktiviert sein:
// #define RADIO_SERVER

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

Beispielanwendung „RadioTest“ prüfen

Einfach am Knoten den „User“-Taster 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 an der Station der Taster „User“ gedrückt wird und der Server 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.

Übersicht der Beispielanwendungen

Name Sammlung 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++)
BlinkyESP32DeepSleep Arduino-mbed-APIs „deepsleep“-Beispiel (geringer Energiebedarf); blinkt alle 10 Sek. während des „deepsleep“, LED2 blinkt jede Minute beim Wakeup
CPUBench Arduino-mbed-APIs Misst die Float- und Integer-CPU-Leistung
ESP32FrequencyThrottle Arduino-mbed-APIs MCU-Prozessortaktung auf 2 MHz herabsetzen um Energie zu sparen
HelloWorld Arduino-mbed-APIs Einfaches Ausgabebeispiel; erläutert verschiedene „printf“-Optionen
LongRaPowerSwitchTest Arduino-mbed-APIs Zeigt, wie 5 V oder 3,3 V mit einem LongRa-Board aktiviert werden
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
RTC3231Calibration Arduino-mbed-APIs Kalibrierungswerkzeug zum Messen von Frequenzfehlern der RTC
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 »