RadioShuttle Sketch-Installation für LongRa (Arduino Zero kompatibel)

Voraussetzungen

RadioShuttle nutzt modernes C++, welches im Arduino unvollständig aktiviert ist. Zusätzlich ist ein Funktionsname im Arduino und C++ doppelt definiert, daher muss Folgendes in der Arduino-Installation geändert werden, um die RadioShuttle oder ähnliche C++ Lösungen zu nutzen.

C++ richtig aktivieren

Arduino beenden. In der Datei „platform.txt“ unter folgenden Pfad (ab Benutzerordner) bitte folgendes ändern:
Mac: „Library/Arduino15/packages/arduino/hardware/samd/1.6.17“
Windows: „AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.17“
Alt: compiler.c.elf.cmd=arm-none-eabi-gcc
Neu: compiler.c.elf.cmd=arm-none-eabi-g++

Achtung, die Änderungen werden bei einer neuen Arduino-Installation ggf. gelöscht und müssen dann wieder geändert werden.

Hinweis: Bei folgender Fehlermeldung ist der obige Schritt nicht durchgeführt worden:

… undefined reference to `std::__detail::_List_node_base …

RadioShuttle Library installieren

Die komplette RadioShuttle-Software wird in einem Zip-Archiv ausgeliefert und kann unter Angabe eines achtstelligen Codes hier geladen werden. Den Code finden Sie auf der Platinenrückseite, z. B: 0x67bedf1.
Geladen wird ein Zip-Archiv mit der aktuellen Software, z.⁥ B.: „RadioShuttle-Arduino-2017-08-13.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- und D21-Chip)
  • „ds3231“ (Library für die RTC-Uhr des ECO-Boards)
  • „OLED“ (Library für das Heltec LoRa-Board)
  • „RTCZero“ (RTC-Library für den Atmel D21-Chip)
  • „RadioShuttle“ (Funkprotokollsoftware und Beispiele)
  • „SX1276GenericLib“ (Treiber für den LoRa-Funkchip)

Beispielanwendung „RadioTest“ aktivieren

Nachdem die Arduino IDE neu gestartet wurde, ist unter „Werkzeuge > Board“ für das LongRa-Board der Eintrag „Arduino/Genuino Zero (Native USB-Port)“ auszuwählen, da die Arduino IDE immer nur die Beispiele anzeigt, die auf dem aktuell ausgewählten Board lauffähig sind.

Anschließend kann das Beispiel „RadioTest“ über den Menüpunkt „Datei > Beispiele > RadioShuttle > Radio Test“ 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“ und „RadioTest.ino“.

Folgende Anpassungen müssen vor der Verwendung vorgenommen werden:

PinMap.h anpassen

„PinMap.h“ definiert die Anschlussverbindungen der SAMD21 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 D21_LONGRA_REV_720 und stellen sicher, dass diese Zeile aktiv ist. Sollten Sie eine andere Version des LongRa-Boards besitzen, aktivieren Sie die entsprechende Zeile und deaktivieren Sie die andere Revision:

// #define BOARD_REV_630 1 // board with LiPo power supply …
#define BOARD_REV_720 1 // Maker Faire Hannover revision, micro USB

RadioTest.ino anpassen

Über den Reiter „RadioTest“ gelangt man in den Programmcode der Datei RadioTest.ino. Im Bereich enum SensorsIDs ist unter  #ifdef RADIO_SERVER die individuelle Geräte ID (ohne führende Nullen) und der Code des als Server eingesetzten LongRa-Boards einzutragen – man findet diese Angaben neben dem Batteriefach:
myDeviceID = XXX // individuelle Geräte-ID
myCode = 0xXXXXXXXX  // individueller Code
remoteDeviceID = XXX // die Geräte-ID der Station (Server)

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

Im Bereich „#else“ des Programmteils enum SensorsIDs sind auf gleiche Weise myDeviceID und myCode von dem als Knoten eingesetzten LongRa-Board einzutragen.

Hier ein Beispiel für den enum SensorsIDs-Block:

enum SensorsIDs {
myTempSensorApp = 0x0001,

#ifdef RADIO_SERVER
  myDeviceID = 12,      // the station ID 12
  myCode = 0x20EE91D6,  // code for the station; ID 12
  remoteDeviceID = 11,  // the node ID
#else
  myDeviceID = 11,      // the node ID 11
  myCode = 0x21C3B117,  // code for the node ID 11
  remoteDeviceID = 12,  // the station ID
#endif
};

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 1

Jetzt kann die Software „RadioTest“ kompiliert und auf das Server-Board 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 1

Die Software „RadioTest“ ist danach erneut zu kompilieren und dann auf das Knoten-Board hochgeladen werden.

Beispielanwendung „RadioTest“ prüfen

Einfach am Knoten den linken Taster „A“ bedienen. 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 „A“ 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

Innerhalb von drei Sekunden nach Aufspielen der Software oder einem Reset des Boards muss das Fenster „Serieler Monitor“ geöffnet werden, damit alle Meldungen sichtbar sind. Das Fenster muss beim Aufspielen bzw. Reset erneut geöffnet werden.

Wird das Fenster nicht innerhalb von fünf Sekunden geöffnet, schaltet das Board die USB-Schnittstelle („Serieller Monitor“) ab, und die LED 13 blinkt kurz, womit bestätigt wird, dass USB abgeschaltet wurde. Das Abschalten der USB-Verbindung wird automatisch durchgeführt, um Strom zu sparen.

Beispiel A: Erfolgreicher Start der RadioShuttle-Software

Wenn innerhalb von fünf Sekunden nach Start oder Reset der serielle Monitor geöffnet wird, sollten Sie eine Meldung ähnlich der obigen sehen.
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

HelloWorldArduino-mbed-APIsEinfaches Ausgabebeispiel; erläutert verschiedene „printf“-Optionen

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++)
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
LongRaPowerSwitchTest Arduino-mbed-APIs Zeigt, wie 5 V oder 3,3 V mit einem LongRa-Board aktiviert werden
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
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
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 zum Herunterladen »