LoRaWAN: Unterschied zwischen den Versionen
(→LoRa32u4 Board) |
Tut (Diskussion | Beiträge) (→LoRaWAN) |
||
Zeile 97: | Zeile 97: | ||
* [https://github.com/mcci-catena/arduino-lorawan MCCI Catena Arduino-Lorawan] | * [https://github.com/mcci-catena/arduino-lorawan MCCI Catena Arduino-Lorawan] | ||
− | + | Infos für Lutz (nicht so wichtich): | |
<pre> | <pre> | ||
// Enable data rate adaptation | // Enable data rate adaptation | ||
Zeile 108: | Zeile 108: | ||
Kurzer LMIC Code: [https://github.com/SensorsIot/LoRa/blob/master/Nodes/Dragino/HelloWorld/HelloWorld.ino] | Kurzer LMIC Code: [https://github.com/SensorsIot/LoRa/blob/master/Nodes/Dragino/HelloWorld/HelloWorld.ino] | ||
+ | |||
+ | === Packete empfangen === | ||
+ | <pre> | ||
+ | case EV_TXCOMPLETE: | ||
+ | Serial.print(F("EV_TXCOMPLETE: ")); | ||
+ | if (LMIC.txrxFlags & TXRX_ACK) { | ||
+ | rxcounter++; | ||
+ | Serial.println(F("Received ack.")); | ||
+ | } | ||
+ | if (LMIC.dataLen) { | ||
+ | Serial.print(F("Received ")); | ||
+ | Serial.print(LMIC.dataLen); | ||
+ | Serial.print(F(" bytes of payload: ")); | ||
+ | for(int d=0; d<LMIC.dataLen; d++) { | ||
+ | Serial.print(*(uint8_t *)(LMIC.frame+LMIC.dataBeg+d), HEX); | ||
+ | Serial.print(" "); | ||
+ | } | ||
+ | rxcounter2 += LMIC.dataLen; | ||
+ | } | ||
+ | // Schedule next transmission | ||
+ | Serial.print(F(" txChn1 ")); | ||
+ | Serial.print(LMIC.txChnl); | ||
+ | Serial.print(F(", datarate ")); | ||
+ | Serial.println(LMIC.datarate); | ||
+ | os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send); | ||
+ | break; | ||
+ | </pre> | ||
== Fertige Hardware (Boards) == | == Fertige Hardware (Boards) == |
Version vom 25. Februar 2018, 20:22 Uhr
Inhaltsverzeichnis
Aktuell: Workshop zu LoRa und LoRaWAN
Am 25. Februar 2018 von 15 bis etwa 21 Uhr findet der 1. Teil des Workshops zu LoRa und LoRaWAN bei uns im Hackerspace statt.
Bitte um Anmeldung über unsere Mailingliste oder an . Der Workshop ist auch offen für Nicht-Mitglieder, allerdings wird für Teilnehmer, die weder Mitglied im Hackerspace FFM noch im CCC FFM sind, um eine Spende zugunsten unserer Vereinskasse gebeten.
Please note: The main language of the workshop will be German, so the presentations of the workshop will be held in German language. However, there will be a lot of people who can assist you if you have issues in understanding the language and of course I am open to answer your questions in English as well.
Folgendes steht auf der Agenda:
Vorläufige Agenda Teil 1
- Begrüßungsrunde
- Vortrag Teil A: LoRa
- Was ist LoRa und wie funktioniert es?
- Verfügbare LoRa Module und mit LoRa ausgestattete Boards
- Legale Nutzung von LoRa: Nutzbare Frequenzen, Duty-cycle und Bandbreite Beschränkungen, maximale Leistung
- Wie macht man eine LoRa Punkt-zu-Punkt-Verbindungen mit Arduino?
- Workshop Teil A:
- Ziel: Erreichen einer Punkt-zu-Punkt-Verbindung via LoRa unter Arduino
- Anschluss von LoRa (RFM95) Modulen an Arduino-Boards (433MHz und 868MHz)
- Konfiguration und Einstellungen für LoRa unter Arduino
- Senden und Empfangen von LoRa Paketen
- Vortrag Teil B: LPWAN / LoRaWAN / The Things Network
- Wozu LPWAN? Derzeitige Situation der konkurierenden Systeme
- Was ist ein LoRaWAN?
- The Things Network: Spoilervideo :-)
- Was kann man damit alles machen?
- Wie baut man eine Node?
- Wie kommt man an die Daten und verarbeitet sie weiter?
- Workshop Teil B:
- Ziel: Aus dem Setup von Teil A eine Node fürs TTN machen und die Daten im TTN empfangen
- Zurechtfinden in der (leider etwas weniger intuitiven) Standard Node Software für Arduino (LMIC)
- ABP Einstellungen, um die Node zum TTN hinzuzufügen
- Empfang der Telegramme in der Console von thethingsnetwork.org
- Field-Day: Wir testen die Reichweite der Node
- Schlussbesprechung
Vorläufige Agenda-Ideen Teil 2: (Termin steht noch nicht fest)
- Mitmachen und Erweitern des TheThingsNetworks durch ein eigenes Gateway (=Basisstation, =Konzentrator)
- Was ist ein LoRaWAN Konzentrator?
- Aufbau des TheThingsNetwork
- Standortanforderungen für Gateways
- Komponenten zum Selbstbau oder Einkauf für LoRaWAN Gateways
- Antennen (ggf. Selbstbau) für Gateways
- Workshop: Aufbau eines Gateways und Verbinden mit dem TTN. Antennenbau und Reichweitentests
LoRa
Was ist LoRa?
LoRa steht für Long Range und ist eine proprietäre Chirp Spread Spectrum Modulationstechnik, mit der sich deutlich höhere Reichweiten als mit klassischen Modulationsverfahren erreichen lassen. Bei gleicher Sendeleistung und im gleichen Frequenzbereich lassen sich damit Reichweiten im km-Bereich realisieren, wo mit klassischen Modulationsverfahren nur ca. 100m erreicht werden. Der Kompromiss ist dabei allerdings eine deutlich reduzierte Übertragungsgeschwindigkeit gegenüber den klassischen Modulationsverfahren. Dieser kann über den sogenannten Spreizfaktor je nach Situation eingestellt werden - mit dem höchsten Spreizfaktor (SF12) kann die größte Reichweite erziehlt werden, allerdings liegt die Datenrate dann auch nur noch bei ca. 300 bit/s.
Wie nutze ich das?
Für LoRa gibt es einerseits relativ kleine Funkmodule, die man unter den Namen RFM95 oder nach dem typischerweise verwendeten Chip SX1276 (868MHz) bzw. SX1278 (433MHz) oder andererseits gleich als Kombo mit ESP32 und Display kaufen kann. Es gibt sie in einschlägigen Shops und auch aus China (aus der "Bucht") relativ günstig (ab 6 EUR/Stk). Die RFM95 werden mit einem Stückchen Draht als Antenne versehen und über SPI an einen von Arduino unterstütztes Mikrocontrollerboard angeschlossen. Da das Modul nur mit 3.3V Pegeln arbeitet, empfiehlt es sich auch ein mit 3.3V arbeitendes Mikrocontrollerboard einzusetzen.
Ai-Thinker Ra-01 oder Ra-02
Der Unterschied zwischen Ra-01 und Ra-02 ist lediglich der, dass der Ra-01 die Antenne an einem der Pads herausgeführt hat (und meist eine Federantenne dabei liegt), während beim Ra-02 eine Buchse für einen Antennenstecker dran ist (IPEX).
LoRa Bibliotheken
Hier gibt es folgende Bibliotheken:
- LoRa by Sandeep Mistry Einfach nur zur Ansteuerung des LoRa-Moduls in Arduino ohne viel Balast und ohne Schnick-Schnack. Sinnvoll daher für Punkt-zu-Punkt Verbindungen, aber nicht für Netzwerke.
- RadioHead Hier die Bibliothek für sehr viele verschiedene Funkmodule. Hiermit können auch (Mesh-)Netzwerke aufgebaut werden und das IP-Protokoll über Funk abgewickelt werden. LoRaWAN fürs TTN wird allerdings hiermit nicht unterstützt.
Quellen
Decoding the LoRa PHY - Dissecting a Modern Wireless Network for the Internet of Things
Ein Vortrag vom 33c3 der den physikalischen Layer von LoRa näher beleuchtet.
LoRaWAN
Was ist LoRaWAN?
LoRaWAN steht für Long Range Wide Area Network. Basierend auf der LoRa Modulation wird hier ein Netzwerk aufgebaut, dass wegen der hohen Reichweite mit relativ wenig Gateways recht große Flächen abdecken kann.
Was ist das The Things Network (kurz: TTN)?
Das The Things Network biete basierend auf der LoRa Technologie ein Community betriebenes Wide Area Network. Im Empfangsbereich eines Gateways kann man so mit einer LoRa-Node gebührenfrei Daten ins Internet funken, allerdings nur einige Bytes jede Minute. Wenn noch kein Gateway im Empfangsbereich ist, kann man das Netzwerk selbst um eigene Gateways erweitern.
Gateway Infos
-
sudo tcpdump -AUq port 1700
zeigt Verkehr mit TTN an - Mehr über Antennen: https://www.thethingsnetwork.org/forum/t/the-big-and-small-antenna-topic-part-1/7880
LoRaWAN Bibliotheken
- LMIC für Arduino von Matthijs Kooijman Am meisten beim TTN referenziert.
- MCCI Catena Arduino-Lorawan
Infos für Lutz (nicht so wichtich):
// Enable data rate adaptation LMIC_setAdrMode(1); // Increase RX1 Windows by 1% in case of clock error on board (crystal shift) // This clearly increase son OTAA Join request to works first time even with SF7 LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
Kurzer LMIC Code: [1]
Packete empfangen
case EV_TXCOMPLETE: Serial.print(F("EV_TXCOMPLETE: ")); if (LMIC.txrxFlags & TXRX_ACK) { rxcounter++; Serial.println(F("Received ack.")); } if (LMIC.dataLen) { Serial.print(F("Received ")); Serial.print(LMIC.dataLen); Serial.print(F(" bytes of payload: ")); for(int d=0; d<LMIC.dataLen; d++) { Serial.print(*(uint8_t *)(LMIC.frame+LMIC.dataBeg+d), HEX); Serial.print(" "); } rxcounter2 += LMIC.dataLen; } // Schedule next transmission Serial.print(F(" txChn1 ")); Serial.print(LMIC.txChnl); Serial.print(F(", datarate ")); Serial.println(LMIC.datarate); os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send); break;
Fertige Hardware (Boards)
Lora32u4
Dieses Board gibts von BSFrance und auch als feather32u4 von Adafruit. Wenn man mit PlatformIO das Board in Betrieb nehmen will braucht man folgendes Target in der platformio.ini (Port durch lokale Eintellung ersetzen):
[env:feather32u4] platform = atmelavr board = feather32u4 framework = arduino upload_flags = -P$UPLOAD_PORT upload_port = /dev/ttyACM3 monitor_port = /dev/ttyACM3 monitor_baud = 9600
Das Pinmapping für die LMIC Bücherei ist wie folgt:
const lmic_pinmap lmic_pins = { .nss = 8, .rxtx = LMIC_UNUSED_PIN, .rst = 4, .dio = {7, 6, LMIC_UNUSED_PIN}, };