Wie hier bereits angekündigt, steige ich etwas in das Thema LoRaWAN ein. Nun ist es auch soweit und ich werde versuchen meinen ersten LoRaWAN Node selber zu bauen. Da ich leider noch nicht die Teile für ein Gateway habe, muss es erst mal der Node sein. Ich hoffe einfach mal, dass ich in der Reichweite eines der verfügbaren Gateways in Köln bin, ansonsten weiß ich nicht ob es wirklich klappt. In Köln gibt es aktuell drei Gateways, von denen zwei vollwertig sind, somit ist meine Chance gar nicht mal so schlecht etwas ins Netz zu bekommen. Der Node wird erst mal nur Hello World schicken, da ich keinen Sensor habe. Der Aufbau stellt also das absolute Minimum dar.
Grundsätzlich bin ich nach dieser Anleitung vorgegangen, musste aber das Pin Mapping anpassen, damit ich erfolg hatte.
Verwendete Hartware für den LoRaWAN Node
Der Aufbau besteht nur aus drei Komponenten:
- Dragino LoRa Bee
- Arduino Nano
- USB Netzteil
Dazu dann noch die üblichen Drähte.
!! ACHTUNG. Der von mir verwendete Arduino Nano verwendet an seinen Ausgängen 5V, was aber für den Dragino Bee zu viel ist. Für einen Testaufbau mag es ok sein, aber auf Dauer ist das nicht empfehlenswert. Ein Arduino Pro Mini in der 3,3 Volt Variante ist besser geeignet. Ansonsten muss ein Pegelwandler eingebaut werden !!
Hier seht ihr wie ich meinen LoRaWAN Node zusammengebaut habe:
Bezeichnung | Arduino Nano | Dragino Bee |
VCC | 3.3V | 1 |
GND | GND | 10 |
DIO0 | 2 | 12 |
DIO1 | 3 | 13 |
NSS | 10 | 17 |
MOSI | 11 | 11 |
MISO | 12 | 4 |
SCK | 13 | 18 |
In der Schaubild, seht ihr zwar einen Adafruit RFM95 aber die Anschaltung ist ähnlich.
Einen TTN Account registrieren und eine Application erstellen
Solltet ihr noch keinen Account für TTN haben, dann solltet ihr dieses jetzt hier nachholen. Anschließend fügt ihr in euerer Konsole eine Applikation hinzu, indem ihr auf add application drückt.
Ihr gebt der Applikation einen ID und eine Beschreibung, mehr benötigt es nicht um die reine Applikation zu erstellen.
Eurer Applikation ist aber noch kein Device zugeordnet, was wir aber jetzt nachholen werden. In eurer Applikation wählt ihr Devices und anschließend register devices. Ihr vergebt wieder eine ID und lasst euch eine Device EUI zuweisen. Damit eine EUI generiert wird, drückt ihr auf das Doppelpfeil-Symbol.
Anschließend wechselt ihr in die Settings eueres Device und ändert die Activation Method von OTAA ABP.
Zurück in der Übersicht könnt ihr euch jetzt bereits die Device Address und den Network- bzw. App-Session Key kopieren. Die Keys müssen im msb Format kopiert werden, dieses ist aber der Default. Um brauchbare Werte zu bekommen drückt ihr vorher auf den Doppelpfeil ( <>) und danach auf kopieren. Diese drei Werte benötigt ihr für euren Arduino Sketch.
Konfiguration des Arduinos
Ihr müsst euch erst mal die Arduino IDE laden und installieren. Die Software gibt es hier. Anschließend passt ihr unter Werkzeuge euer Board und den Com-Port an.
Anschließend müsst ihr die IBM LMIC Bibliothek einbinden. Dazu geht ihr unter Sketch >> Bibliothek verwalten >> Bibliothek einbinden. In dem daraufhin erscheinenden Fenster gebt ihr als Suchbegriff lmic ein und installiert die Bibliothek.
In der LMIC Bibliothek ist bereits ein Beispielprogramm (Sketch) enthalten, dieses werden wir fast unverändert in den Arduino einspielen. Einzig das Pinmapping für den Dragino müssen wir anpassen und natürlich die eben ausgelesenen Keys eintragen. Den Sketch findet ihr unter Eigene Dokumente >> Arduino >> libraries >> IBM_LMIC >> examples >> ttn.
[code lang=“java“]
// LoRaWAN NwkSKey, network session key
// This is the default Semtech key, which is used by the prototype TTN
// network initially.
static const PROGMEM u1_t NWKSKEY[16] = { 0xE7, 0x11, 0xA6, 0xFD, 0xE2, 0x1B, 0x60, 0x6F, 0x65, 0x0C, 0x8B, 0x26, 0xAA, 0xBB 0xCC, 0xDD };
// LoRaWAN AppSKey, application session key
// This is the default Semtech key, which is used by the prototype TTN
// network initially.
static const u1_t PROGMEM APPSKEY[16] = { 0x71, 0x68, 0x53, 0xE9, 0x4C, 0x9A, 0x08, 0xED, 0xD0, 0x14, 0x00, 0xEE, 0xAA, 0xBB, 0xCC, 0xDD };
// LoRaWAN end-device address (DevAddr)
// See http://thethingsnetwork.org/wiki/AddressSpace
static const u4_t DEVADDR = 0x12345678 ; // <– Change this address for every node!
[/code]
[code lang=“java“]
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 10,
.rxtx = LMIC_UNUSED_PIN,
.rst = LMIC_UNUSED_PIN,
.dio = {2, 3},
};
[/code]
Anschließend könnt ihr den Sketch überprüfen und in euren Arduino hochladen.
Test des LoRaWAN Nodes
Der Arduino ist bespielt und alles zusammengesteckt, nun sollten wir auch mal schauen ob alles funktioniert. Wenn ihr den seriellen Monitor startet, den ihr unter Werkzeuge >> Serieller Monitor findet, solltet ihr folgendes sehen. Euer LoRaWAN Node versendet Daten, damit habt ihr es fast geschafft.
Solltet ihr etwas sehen wie
Starting
FAILURE
/(Path)/IBM_LMIC_framework/src/lmic/radio.c:659
dann kann euer Dragino Bee, bzw. der RFM95W auf ihm, nicht initialisiert werden. Überprüft in diesem Fall alle Steckverbindungen. Bei mir lag der Fehler im Mapping. Hier kann eine Google-Suche helfen. Ein Hardwaredefekt ist natürlich auch möglich, aber davon wollen wir erst mal nicht ausgehen.
Also der Arduino versucht zu senden. Um jetzt zu sehen ob Daten auch wirklich Empfangen werden, müssen wir zu TTN wechseln. Wenn ihr auf euer Device geht und den Reiter Data öffnet, solltet ihr empfangene Daten sehen.
Um die HEX-Daten in lesbares Umzuwandeln, könnt ihr erst mal diese Webseite benutzen. Und siehe da, der Node sagte Hello, world!
Ich hoffe ich konnte euch etwas helfen und wünsche viel Spaß mit LoRaWAN.
Der Arduino Nano arbeitet an den IOs mit 5V, der RFM95 mit 3,3V.
Bei diesem Aufbau läuft man Gefahr, dass der RFM95 beschädigt wird.
Danke für den wichtigen Hinweis. Ich war mir der Tatsache bisher nicht bewusst, aber du hast recht.
Hallo Björn,
schöne Anleitung, leider habe ich keinen Erfolg.
Ausgabe an der Arduino Konsole ist identisch wie im Beitrag. Aber weder am Gateway (eigenes) noch am Device kommen Daten an. Ich habe ein eigenes GW und einen LHT65-Sensor – beides funktioniert.
Device-Status ist (grüner Punkt) „never seen“.
LMIC Lib ist von https://github.com/mcci-catena/arduino-lmic
Hast Du einen Tipp, wie ich zum Erfolg komme?
vG
LS
Hi,
hast du die lmic_project_config.h angepasst. Per Default ist das amerikanische Frequenzband aktiv.
Auf die Zeile kommt es an:
#define CFG_eu868 1
Grüße,
Björn
Hallo Björn,
danke für den Hinweis. Hatte Erfolg mit der Lib https://github.com/matthijskooijman/arduino-lmic
Die ist scheinbar älter. Allerdings ist dort die richtige Frequenz schon definiert.
Werde es nun mit Deinen Hinweis und der im Beitrag angegebenen Lib umsetzen.
vG
LS