Änderungen

LoRaWAN

6.933 Byte hinzugefügt, 20:00, 2. Feb. 2021
/* Was ist das The Things Network (TTN) */
= Aktuell: Workshop Vortrag auch zu LoRa und , LoRaWAN und TheThingsNetwork auf der Make Darmstadt 2019 =Auf der [http://make-darmstadt.de/ Make Darmstadt] hat Lutz Lisseck vom Hackerspace FFM ein Vortrag zum Thema "Die lizenzfreie Übertragung kleiner Datenmengen per Funk" gehalten, die Folien zum Vortrag gibt es auch hier: [[Datei:Die_lizenzfreie_Übertragung_kleiner_Datenmengen.pdf]]
Am 25. Februar 2018 von 15 bis etwa 21 Uhr findet der 1. Teil des Workshops = Rückblick: Workshop zu LoRa und LoRaWAN bei uns im Hackerspace statt. =
'''Bitte um Anmeldung über unsere Mailingliste oder an [[Datei:EmailAm 25.gif‎]]Februar 2018 von 15 bis etwa 21 Uhr fand der 1. Teil des Workshops zu LoRa und LoRaWAN bei uns im Hackerspace statt. Der Workshop 2. Teil ist auch offen für Nicht-Mitgliedergeplant an einem Sonntag im April, allerdings wird für Teilnehmer, die weder Mitglied ebenfalls von 15 bis etwa 21 Uhr 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 /stand auf der Agenda:
== Vorläufige Agenda Teil 1 ==[[Datei:IMG_20180225_184530744.jpg|400px]]
* Begrüßungsrunde
** Anwendungfälle der Teilnehmer: Bienenstöcke vor Diebstahl schützen, Stratosphärenballon, Feinstaubmessungen
* Vortrag Teil A: LoRa
** Was ist LoRa und wie funktioniert es?
* Schlussbesprechung
 
== Vorläufige Agenda-Ideen Teil 2: (Termin steht noch nicht fest) ==
Datei:Ra-01_Ai-Thinker_LoRa_Modul_443_MHz_und_Antennen.jpg|Ra-01 Ai-Thinker LoRa Modul - hier für 433 MHz mit Antennen in unterschiedlichen Bauformen
Datei:ESP32_mit_SSD1306_OLED_und_LoRa_und_Antenne.jpg|link=Heltec_Wifi_LoRa_32|ESP32 mit OLED und LoRa und Antenne für <strike>868 MHz</strike> 433 MHz (hat ein SX1278)
Datei:LoRa TestBoards.jpg|link=MikroEckeBauteile|Zwei Testboards aus unserem Workshop sind in der [[MikroEcke]] zu finden
</gallery>
=== 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).
 
== Antenne ==
 
Antennen sind für eine bestimmte Frequenz optimiert. In Europa wird das ISM-Band mit 868 Mhz verwendet.<br>
Die Wellenlänge berechnet sich nach folgender Formel: [[Datei:Wavelength.PNG]]<br>
f = frequency in hertz (Hz) <br>
λ = wavelength in meters (m)<br>
c = speed of light (299.792.458 m/s)<br><br>
[[Datei:Wavelength_of_868.PNG]]<br>
Die Antenne muss also 34.5 cm lang sein oder ein 1/2λ = 17.25, 1/4λ = 8.63, 1/8λ = 4.31, ...
== LoRa Bibliotheken ==
* [https://github.com/sandeepmistry/arduino-LoRa 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.
* [http://www.airspayce.com/mikem/arduino/RadioHead/ 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.
 
== Hardware ==
 
{| class="wikitable" style="text-align:center"
!RFM95
!Arduino
|-
|VCC
|3.3V
|-
|GND
|GND
|-
|SCK
|SCK
|-
|MISO
|MISO
|-
|MOSI
|MOSI
|-
|NSS
|10
|-
|NRESET
|9
|-
|DIO0
|2
|-
|DIO2
|3 (LoRaWan)
|}
== Quellen ==
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.
[https://hackaday.com/2017/09/11/the-things-network-sets-702-km-distance-record-for-lorawan/ Reichweitenrekord von 702 Km.] == Was ist das [https://www.thethingsnetwork.org/ The Things Network ] (kurz: TTN)? ==Das [https://www.thethingsnetwork.org/ 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. [[Datei:LoRaGoPort_aufRPi.jpg|600px|LoRaWAN Gateway mit LoRaGo Port auf Raspberry Pi]] LoRaGo PORT einrichten für TTN: http://sandboxelectronics.com/?p=2696#Extra_Using_the_onboard_GPS_data_as_gateway_location === Gateway Infos ===* <pre>sudo tcpdump -AUq port 1700</pre> zeigt Verkehr mit TTN an* Mehr über Antennen: https://www.thethingsnetwork.org/forum/t/the-big-and-small-antenna-topic-part-1/7880 === Applikation einrichten ===Unter "Applications" mit "add application" eine neue Anwendung erstellen.<br>Danach die Application auswählen. Oben rechts den Reiter "Devices" anwählen und "register device" drücken z.B. "pondtempsensornode" als id eingeben.<br>Unter "Device Overview" die "Activation Method" von OTAA auf ABP stellen und "Frame counter checks" anhaken. == LoRaWAN Bibliotheken ==Wichtig: '''Nicht''' die LoRaWAN Bibliothek aus dem Arduino Library Manager verwenden, sonder manuel diese hier installieren: * [https://github.com/matthijskooijman/arduino-lmic LMIC für Arduino von Matthijs Kooijman] Am meisten beim TTN referenziert. Kann auch interessant sein (ungetestet):* [https://github.com/mcci-catena/arduino-lorawan MCCI Catena Arduino-Lorawan] Nicht so wichtige Infos:<pre> // Enable data rate adaptation (only useful for nodes with fixed location) 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);</pre> Kurzer LMIC Code (ungetestet): [https://github.com/SensorsIot/LoRa/blob/master/Nodes/Dragino/HelloWorld/HelloWorld.ino] === Erweiterung um Packete zu 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> == Konfiguration für bestimmte Hardware ===== ESP32 ===Der ESP32 hat eine sog. Schaltmatrix und man kann damit sämtliche wichtigen IO-Funktionen auf andere Pinne "umbiegen". Das Umbiegen gelingt unter Arduino meist indem beim XXX.begin() die Pinne als Parameter übergeben werden (wo normalerweise nix übergeben wird). Um typische ESP32 + OLED + LoRA-Module richtig zu befeuern, muss man daher im Setup noch vor dem LMIC-Init eine Zeile hinzufügen, die die Pinne entsprechend für die SPI zuordnet - bei mir ging das mit folgender Zeile:<pre>SPI.begin(5, 19, 27, 18);</pre> Die Syntax ergibt sich dabei übrigens aus den Headern des ESP32 Arduino Moduls - hier mal einige Zeilen aus den Headern, aus denen hervorgeht, wie man Pinne umbelegen kann:<pre>void begin(int8_t sck=-1, int8_t miso=-1, int8_t mosi=-1, int8_t ss=-1); // SPI.hvoid begin(int sda=-1, int scl=-1, uint32_t frequency=100000); // Wire.hvoid begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false); // Hardware-Serial</pre> Folgendes Pinmapping wurde dann noch LMIC übergeben:<pre>const lmic_pinmap lmic_pins = { .nss = 18, .rxtx = LMIC_UNUSED_PIN, .rst = 14, .dio = {26, 33, 32},};</pre> Damit war die Belegung für den LoRa-Chip wie folgt:{| class="wikitable" style="text-align:center"! RFM95 Pin! ESP32 GPIO#|-|DIO2|32|-|DIO1|33|-|DIO0|26|-|MISO|19|-|MOSI|27|-|SCK|5|-|NSS|18|-|RESET|14|} Achtung: GPIO5 (SCK) kollidiert manchmal mit I2C was für OLED Displays benutzt wird! === ESP8266 ===Hier hat der TTN Zugang mit folgender Konfiguration geklappt: {| class="wikitable" style="text-align:center"! RFM95 Pin! ESP8266 GPIO#! ESP8266 D#|-|DIO1|4|D2|-|DIO0|5|D1|-|MISO|12|D6|-|MOSI|13|D7|-|SCK|14|D5|-|NSS|15|D8|-|RESET|16|D0|} <pre>const lmic_pinmap lmic_pins = { .nss = D8, .rxtx = LMIC_UNUSED_PIN, .rst = D0, .dio = {D1, D2, LMIC_UNUSED_PIN},};</pre> === 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):<pre>[env:feather32u4]platform = atmelavrboard = feather32u4framework = arduinoupload_flags = -P$UPLOAD_PORTupload_port = /dev/ttyACM3monitor_port = /dev/ttyACM3monitor_baud = 9600</pre> Das Pinmapping für die LMIC Bücherei ist wie folgt:<pre>const lmic_pinmap lmic_pins = { .nss = 8, .rxtx = LMIC_UNUSED_PIN, .rst = 4, .dio = {7, 6, LMIC_UNUSED_PIN},};</pre> '''Obacht, uffbasse:''' Auf dem Board eine Brücke zwischen Pin 6 und DIO1 (IO-Pin 6 und der IO1 des LoRa-Moduls) setzen/löten!!1!einself Wenn die fehlt, dann kann kein LoRaWAN-Paket erfolgreich übermittelt werden, weil ein Interrupt fehlt.
== Sonstige Bibliotheken ==* [Dateihttps:LoRaGoPort_aufRPi//github.jpg|600px|LoRaEAN Gateway mit LoRaGo Port auf Raspberry Picom/rocketscream/Low-Power Low-Power Library für Arduino]* [https://lcd-web.nl/ttngenerator/ TTN Generator]
1.993
Bearbeitungen