Installation der Entwicklungsumgebung
Wir gehen einmal davon aus, dass die Arduino-IDE schon in einer Version größer 1.8.6 installiert ist, aber die ESP8266-Werkzeuge (tool chain, SDK) noch fehlen.
Die Installation besteht aus den Schritten:
- Eintragen der Board-Verwalter-URL http://arduino.esp8266.com/stable/package_esp8266com_index.json in den Voreinstellungen (Datei>Voreinstellungen)
- Installieren der ESP8266-Boards über den Boardverwalter. Der Boardverwalter ist etwas versteckt im Werkzeuge-Menue unter dem Menu-Punkt Board: zu finden. Wobei für den zuletzt ausgewählten Arduino steht. Im Untermenu des Boards ist der Boardverwalter zu finden. Im Boardverwalter gibt man am einfachsten den Namen des eigenen ESP-Boards an, dann sollten alle tool chains, die das Board unterstützen, erscheinen. In unserem Fall ist das das Paket esp8266. (Das Paket passt für die meisten ESP8266-Boards)
Installation der Bibliotheken
Den Bibliotheksverwalter findet man wieder versteckt unter dem Menupunkt Sketch>Bibliothek einbinden>Bibliotheken verwalten… . (Wer hätte ihn auch nicht da vermutet? – sarkastische, rhethorische Frage). Eine Suche im Bibliotheksverwalter nach dem Begriff “lorawan” liefert einige Treffer. Welche die richtige Bibliothek ist, hängt von mehreren Aspekten ab. Der erste ist, welchen LoRa-Chip hat mein Projekt. In unserem Fall war es ein RFM95-Modul. Deshalb erweitern wir die Suche zu “lorawan rfm95”. Damit bleiben zwei Bibliotheken. Die weiteren Aspekte sind: wie gut funktioniert die Bibliothek, wie gut ist sie dokumentiert, funktionieren die Beispiele, wie gut wird die Bibliothek gepflegt? Diese Aspekte sind schwieriger einzuschätzen. Meist ist eine kurze Recherche empfehlenswert. Ein guter Einstiegspunkt ist die Entwicklerseite zum Beispiel auf Github. In unserem Fall haben wir die beiden Bibliotheken “IBM LMIC framework” und “MCCI LoRaWAN LMIC library” gefunden. Dummerweise haben beide nicht funktioniert. Unsere Lösung ist im Abschnitt “Bibliothek aus ZIP-Datei installieren” zu finden.
Der Link “More info” führt beim IBM LMIC framework zu einer allgemeinen IBM-Seite. Das gefällt mir schon einmal weniger. Bei der MCCI LoRaWAN library führt der Link zur Github-Seite des Projekts. Auf der Github-Seite findet man eine vernünftige Dokumentation und die letzte Änderung ist weniger als eine Woche alt. Es arbeitet noch jemand an der Bibliothek… Diese Bibliothek gefällt mir deutlich besser. Also probieren wir sie aus.
Ausprobieren der MCCI LoRaWAN library
Wir installieren die MCCI LoRaWAN library mit einem Klick auf installieren in der Version 2.3.1.
Der erste Schritt beim Ausprobieren ist immer ein passendes Beispielprogramm der Bibliothek auf das Gerät zu laden und auszuprobieren.
Die MCCI LoRaWAN library bringt einige Beispielprogramme mit. Da wir vorher schon mit der Provisionierungsmethode ABP gearbeitet haben. Probieren wir einmal das Beispielprogramm ttn-abp aus.
Im Beipielprogramm ersetzen wir die FILLMEINs für den NWKSKEY, APPSKEY und DEVADDR mit den Werten aus unserem in TTN angelegten Device. (Tipp, man kann die Anzeige durch Klicken aus <> in eine Komma separierte Liste mit 0x formatierten Hexwerten umschalten.) Die Pins für unser Board müssen wir noch in der Datenstruktur lmic_pins anpassen.
Dummerweise startete mein ESP8266 nicht richtig mit dem Beispielprogramm. Der ESP8266 gibt auf der seriellen Schnittstelle folgenden Text aus:
ets Jan 8 2013,rst cause:2, boot mode:(1,7)
ets Jan 8 2013,rst cause:4, boot mode:(1,7)
wdt reset
Das heißt, dass das Programm die loop()
-Funktion nicht erreicht und der Watchdog Timer die Auführung des Programms abbricht.
Der folgende Kodeschnipsel war das Problem.
while (!Serial); // wait for Serial to be initialized
Serial.begin(115200);
Das Beispielprogramm wartet in einer Schleife darauf, dass die serielle Schnittstelle bereit ist, bevor es sie initialisiert. Nachdem wird sie auskommentiert haben, scheint das Beispielprogramm zu funktionieren. Die Betonung liegt auf scheint.
Das Programm gibt tapfer Erfolgsmeldungen (?) aus:
1709619: EV_TXSTART
Packet queued
1947719: EV_TXCOMPLETE (includes waiting for RX windows)
2572738: EV_TXSTART
Packet queued
2755682: EV_TXCOMPLETE (includes waiting for RX windows)
Aber bei TTN kommt nichts an.
IBM LMIC framework ausprobieren
Wir installieren das IBM LMIC framework mit einem Klick auf installieren in der Version 1.5.0+arduino-0. Das Beispielprogramm behalten wir aber vorerst.
In dieser Version gibt es das Symbol EV_TXSTART
nicht. Da es nur eine Debug-Ausgabe ist kommentieren wir die Auswahl aus, übersetzen das Programm neu und wir haben einen Kompilierfehler:
/home/user/Arduino/libraries/IBM_LMIC_framework/src/hal/hal.cpp: In function 'void hal_printf_init()':
/home/user/Arduino/libraries/IBM_LMIC_framework/src/hal/hal.cpp:223:54: error: '_FDEV_SETUP_WRITE' was not declared in this scope
fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
^
/home/user/Arduino/libraries/IBM_LMIC_framework/src/hal/hal.cpp:223:71: error: 'fdev_setup_stream' was not declared in this scope
fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
^
exit status 1
Error compiling for board TTGO LoRa32-OLED V1.
Die Arduino-IDE hat hier eine kleine “Besonderheit”. Es wird nicht die neueste Version als Standard für das Installieren ausgewählt, sondern die älteste. Wählt man die Version 1.5.0+arduino-2 aus dem Pull-Down-Menu aus, funktioniert das Test-Programm und es kommen Daten bei TTN an. Hurra! Ich habe das aber erst herausbekommen, nachdem ich den nächsten Abschnitt “Bibliothek aus ZIP-Archive installieren” durchprobiert hatte.
Bibliothek aus ZIP-Datei installieren
Auf Github findet man auch eine LMIC-Bibliothek von Matthijs Kooijman für den Arduino. Diese kann man als ZIP-Datei herunterladen und unter Sketch>Bibliothek einbinden>.ZIP-Bibliothek hinzufügen… installieren.
Mit dieser Bibliothek funktioniert das kleine Testprogramm und liefert “Hello, World!” an TTN.
Ausblick
Da wir unsere Experimente während einer Weiterbildung zum Thema LoRaWAN und TTN (The Things Network) an der Karl-Kübel-Schule in Bensheim vom 12.-13. Dezember 2018 begonnen hatten (großen Dank an Rainer Wieland), wussten wir, dass es mit der zur Verfügung gestellten Version funktioniert. Das Problem ist, dass die neuere Version nicht funktioniert. Den Kommentaren im Arduino-Bibliotheksverwalter nach müsste die MCCI LMIC library die Weiterentwicklung des IBM LMIC frameworks sein. Bis jetzt ist nicht klar, warum das MCCI LMIC framework so tut, als ob es Daten an TTN liefert, aber keine ankommen. Der große Knaller ist, dass man schnell das IBM LMIC framework wegen eines Fehlers (seien wir einmal ehrlich das ist keine Besonderheit) als defekt beseite legt.
Zur Zeit lautet die Empfehlung: “Nimm das IBM LMIC framework in Version 1.5.0+arduino-2!” Das funktioniert auch mit den TTGO ESP LoRa32 V1 Modulen. (Natürlich muss man dann auch die ESP32 Werkzeuge installieren, aber das funktioniert ganz ähnlich wie oben für den ESP8266 beschrieben.)