LoRaWAN: Unterschied zwischen den Versionen
Tut (Diskussion | Beiträge) (→Display) |
Tut (Diskussion | Beiträge) |
||
Zeile 72: | Zeile 72: | ||
}; | }; | ||
</pre> | </pre> | ||
+ | |||
+ | == LoRa Bibliotheken == | ||
+ | Hier gibt es folgende Bibliotheken: | ||
+ | * [https://github.com/sandeepmistry/arduino-LoRa LoRa] 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. | ||
= LoRaWAN = | = LoRaWAN = | ||
== Was ist 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. | 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. |
Version vom 29. Januar 2018, 00:26 Uhr
Inhaltsverzeichnis
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).
Heltec Wifi LoRa 32 - ESP32 mit OLED und LoRa
Arduino
Um dieses sehr interessante Modul via Arduino nutzen zu können, reichte bei mir die Standard-ESP32-Arduino Bibliothek, die man wie dort beschrieben installiert. Aus der recht großen Liste der Arduino Boards konnte ich gleich "Heltec_WIFI_LoRa_32" wählen und damit das Modul programmieren. Es gibt auch ein Dokument mit dem Heltec ESP32 Pinout.
Weisse LED
Sollte an Pin 25 sein.
Display
Verbaut ist ein OLED Display vom Typ SSD1306, es ist ein 128x64 Monochrom Display. Es ist NICHT an den Standard-I2C-Leitungen angeschlossen und braucht ein Reset-Signal. Bei manchen Bibliotheken sind daher kleine Modifikationen nötig, um das Display zu benutzen.
Anschlussbelegung
- Pin 4 = SDA (ist nicht der Standard-I2C-Port vom ESP32)
- Pin 15 = SCL (ist nicht der Standard-I2C-Port vom ESP32)
- Pin 16 = RST (muss bei Start kurz auf Low, dann auf High gesetzt werden)
In Verbindung mit dem ESP32 gibt es hierzu mehrere Bibliotheken um es zu nutzen:
- U8x8 und U8g2 - Nur für Monochrome Displays, optimiert auf geringen Ressourcenverbrauch
- U8x8: Minimalistische Version ohne Display-Puffer im uC, nur Textausgabe mit einem 8x8 Monospace Font
- Der folgende Konstruktor funktioniert bei mir:
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
- Der folgende Konstruktor funktioniert bei mir:
- U8g2: Erweiterte Version, enthält Fonts in vielen Größen, auch besonders kleine Fonts.
- Der folgende Konstruktor funktioniert bei mir:
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);
- Der folgende Konstruktor funktioniert bei mir:
- U8x8: Minimalistische Version ohne Display-Puffer im uC, nur Textausgabe mit einem 8x8 Monospace Font
- Adafruit SSD1306 hat viele Funktionen und wird zusammen mit Adafruit_GFX auch für farbige Displays benutzt.
- Wichtig: Ich musste die Library auf der Platte patchen - konkret musste ich in Adafruit_SSD1306.cpp die Zeile auskommentieren, wo nochmal Wire.begin(); (Zeile 206) aufgerufen wurde. Um dann das Beispielprogram 'ssd1306_128x64_i2c' nutzen zu können, hab ich noch mit
#define OLED_RESET 16
die Display-Reset-Leitung angepasst und die Zeile mit dem display.begin(...) wie folgt erweitert:Wire.begin(4,15); display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
.
- Wichtig: Ich musste die Library auf der Platte patchen - konkret musste ich in Adafruit_SSD1306.cpp die Zeile auskommentieren, wo nochmal Wire.begin(); (Zeile 206) aufgerufen wurde. Um dann das Beispielprogram 'ssd1306_128x64_i2c' nutzen zu können, hab ich noch mit
- Ai_Ardulib_SSD1306 Grundtextfunktionen (Monospace Font only), braucht kein Display-Update-Befehl.
- Hier muss in den Beispielen die Zeile wo sonst nur Wire.begin(); steht um folgendes erweitert werden:
pinMode(16,OUTPUT); digitalWrite(16, LOW); // set GPIO16 low to reset OLED delay(50); digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 to high Wire.begin(4,15);
LoRa Radio
Anschlussbelegung
- SX1276 (pin) – ESP32 (pin)
- SCK - GPIO5
- MISO - GPIO19
- MOSI - GPIO27
- CS - GPIO18
- RESET - GPIO14
- DIO0 (8) – GPIO26 (15)
- DIO1 (9) – GPIO33 (13)
- DIO2 (10) – GPIO32 (12)
// Pin mapping for lmic const lmic_pinmap lmic_pins = { .nss = 18, .rxtx = LMIC_UNUSED_PIN, .rst = 14, .dio = {26, 33, 32}, };
LoRa Bibliotheken
Hier gibt es folgende Bibliotheken:
- LoRa 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.
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.