Erfahrungsbericht: LoRa-Kommunikation mit Dragino Shields

In diesem kleinen Projekt wollte ich erstmals praktisch ausprobieren, wie einfach sich eine Punkt‑zu‑Punkt‑Kommunikation über LoRa realisieren lässt – und zwar mit zwei Dragino‑Shields, die jeweils auf einem Arduino‑Board sitzen. LoRa eignet sich hervorragend für energieeffiziente Funkverbindungen über große Entfernungen, ohne dass dafür ein Gateway oder WLAN nötig ist.

Für Europa ist besonders wichtig: LoRa nutzt hier das lizenzfreie 868‑MHz‑Band. Die häufig erwähnte 434‑MHz‑Frequenz ist in Deutschland kein LoRa‑ISM‑Band und ist daher nicht zulässig. Wer mit Dragino‑Shields experimentiert, sollte also unbedingt bei 868 MHz mit maximaler Senderleistung von 25 mW (14 dBm) bleiben und nicht dauerhaft senden. Duty‑Cycle‑Beschränkungen 1%

Mit diesem Hintergrundwissen habe ich mich daran gemacht, zunächst einfache Testdaten zwischen den beiden Shields auszutauschen und anschließend das GPS‑Modul des Dragino LoRa/GPS Shield v1.3 einzubinden, um Positionsdaten zu übertragen und auf einem OLED‑Display anzuzeigen.

Hardware:
Dragino LoRa/GPS Shield v1.3 (Sender)
Herstellerdaten: Datasheet Lora GPS Shield
Belegungsplan

Dragino LoRa Shield v1.4 (Empfänger)

Ziele des Projekts

  • Aufbau einer Punkt-zu-Punkt-LoRa-Kommunikation.
  • Übertragung von GPS-Daten vom Sender zum Empfänger.
  • Anzeige der empfangenen Daten auf einem OLED-Display.

Um erstmal Testdaten zwischen dem Dragino LoRa Shield v1.4 und dem Dragino LoRa/GPS Shield v1.3 auszutauschen, wurden beide Shields mit Arduino-Boards verbunden und eine einfache LoRa-Kommunikation zwischen ihnen einrichtet. Hier meine Schritt-für-Schritt-Anleitung:

1. Hardware-Setup

  • Dragino LoRa Shield v1.4: Dieses Shield an ein Arduino Uno angeschlossen.
  • Dragino LoRa/GPS Shield v1.3: Dieses Shield an ein Arduino Mega angeschlossen.

Und an beide die Antennen angebracht.

2. Bibliothek installieren

Um die LoRa-Kommunikation zu ermöglichen, muste ich die LoRa-Bibliothek in der Arduino IDE installieren.

  • Öffnen die Arduino IDE.
  • Gehe zu Sketch > Include Library > Manage Libraries.
  • Suche nach LoRa und installiere die Bibliothek von Sandeep Mistry.

3. Beispielcode für den Sender (Dragino LoRa/GPS Shield v1.3)

#include <SPI.h>
#include <LoRa.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!LoRa.begin(868E6)) { // Frequenz in Europa (868 MHz)
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }
  Serial.println("LoRa Sender initialisiert.");
}

void loop() {
  Serial.println("Sende Testdaten...");
  LoRa.beginPacket();
  LoRa.print("Hallo, Prilchen!");
  LoRa.endPacket();

  delay(5000); // Sende alle 5 Sekunden
}

4. Beispielcode für den Empfänger (Dragino LoRa Shield v1.4)

#include <SPI.h>
#include <LoRa.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!LoRa.begin(868E6)) { // Frequenz in Europa (868 MHz)
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }
  Serial.println("LoRa Empfänger initialisiert.");
}

void loop() {
  // Versuche, ein Paket zu empfangen
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // Paket empfangen
    Serial.print("Empfangene Daten: ");

    // Lese die Daten aus dem Paket
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

    // Zeige die Signalstärke (RSSI) des empfangenen Pakets an
    Serial.print(" mit RSSI ");
    Serial.println(LoRa.packetRssi());
  }
}

5. Testen der Kommunikation

  • Schalte beide Arduino-Boards ein.
  • Öffne den Serial Monitor in der Arduino IDE für beide Boards.
  • Der Sender sendet alle 5 Sekunden eine Nachricht.
  • Der Empfänger hat wie gewünscht die Nachricht empfangen und im Serial Monitor anzeigt.

6. Fehlerbehebung

  • Wenn keine Kommunikation: Stelle sicher, dass beide Shields auf der gleichen Frequenz arbeiten (z.B. 868 MHz in Europa).
  • Schlechte Signalqualität: Überprüfen Sie die Antennen und stellen Sie sicher, dass die Shields nicht zu weit voneinander entfernt sind.

Versuch die GPS Daten auszulesen und zu senden

Nach dem die Datenübertragen so unkompliziert möglich war, will ich mal schauen, ob ich mit dem GPS-Modul, was mit auf dem Dragino LoRa/GPS Shield v1.3 verbaut wurde, GPS-Daten erfassen kann und diese Werte dann über LoRa zu senden, während der Dragino LoRa Shield v1.4 als Empfänger dient und diese Werte auf einem OLED Display ausgibt.
Hier meine Schritt-für-Schritt-Anleitung:

1. Bibliothek installieren

Für diese Erweiterung benötige ich zusätzlich zwei Bibliotheken:

  1. TinyGPS
  2. Adafruit SSD1306
  3. Adafruit GFX Library

Installation:

  • Öffne die Arduino IDE.
  • Gehe zu Sketch > Include Library > Manage Libraries.
  • Suche und installiere:
  • TinyGPS++ von Mikal Hart.
  • Adafruit SSD1306
  • Adafruit GFX Library

3. Sketch für den Sender (Dragino LoRa/GPS Shield v1.3)

#include <SPI.h>
#include <LoRa.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>

// GPS-Modul über SoftwareSerial verbinden (RX, TX)
SoftwareSerial gpsSerial(8, 9); // RX an Pin 8, TX an Pin 9
TinyGPSPlus gps;

void setup() {
  Serial.begin(9600);
  gpsSerial.begin(9600); // GPS-Modul initialisieren

  // LoRa initialisieren
  if (!LoRa.begin(868E6)) { // Frequenz in Europa (868 MHz)
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }
  Serial.println("LoRa Sender mit GPS initialisiert.");
}

void loop() {
  // GPS-Daten lesen
  while (gpsSerial.available() > 0) {
    gps.encode(gpsSerial.read());
  }

  // Wenn GPS-Daten verfügbar sind, sende sie über LoRa
  if (gps.location.isValid()) {
    String gpsData = "Lat: " + String(gps.location.lat(), 6) + 
                     ", Lon: " + String(gps.location.lng(), 6) +
                     ", Alt: " + String(gps.altitude.meters(), 2) + "m";

    Serial.println("Sende GPS-Daten: " + gpsData);

    LoRa.beginPacket();
    LoRa.print(gpsData);
    LoRa.endPacket();
  } else {
    Serial.println("Keine gültigen GPS-Daten verfügbar.");
    LoRa.beginPacket();
    LoRa.print(„keine gpsData“);
    LoRa.endPacket();
   }

  delay(5000); // Sende alle 5 Sekunden
}

4. Sketch für den Empfänger (Dragino LoRa Shield v1.4)

#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// OLED-Display-Einstellungen
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  while (!Serial);

  // LoRa initialisieren
  if (!LoRa.begin(868E6)) { // Frequenz in Europa (868 MHz)
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }
  Serial.println("LoRa Empfänger initialisiert.");

  // OLED-Display initialisieren
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C-Adresse des Displays (0x3C oder 0x3D)
    Serial.println("OLED-Display nicht gefunden. Überprüfen Sie die Verbindungen.");
    while (true);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("LoRa Empfänger bereit.");
  display.display();
}

void loop() {
  // Versuche, ein Paket zu empfangen
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    String gpsData = "";

    // Lese die Daten aus dem Paket
    while (LoRa.available()) {
      gpsData += (char)LoRa.read();
    }

    // Zeige die empfangenen GPS-Daten auf dem OLED-Display an
    display.clearDisplay();
    display.setCursor(0, 0);
    display.println("Empfangene GPS-Daten:");
    display.println(gpsData);
    display.display();

    // Zeige die Daten auch im Serial Monitor an
    Serial.println("Empfangene GPS-Daten: " + gpsData);
  }
}

Ergebnisse:

  1. LoRa-Kommunikation:
    • Die LoRa-Übertragung auf 868 MHz (für Europa) funktioniert einwandfrei.
    • Datenpakete wurden erfolgreich zwischen den beiden Shields ausgetauscht.
  2. GPS-Modul:
    Das GPS-Modul des Dragino LoRa/GPS Shield v1.3 hat trotz mehrerer Versuche keine gültigen Daten geliefert.
    Mögliche Ursachen: Verdeckte Sicht, Hardware-Defekt oder Probleme mit der Antenne.
  3. OLED-Display:
    • Ein 0,96-Zoll-OLED-Display (I2C) wurde erfolgreich integriert, leider nur die Strings aber ohne die GPS-Daten wurden angezeigt.

Herausforderungen

  • GPS-Modul: Trotz klarer Sicht zum Himmel und langer Wartezeit wurden keine gültigen GPS-Daten empfangen. Werde es zu gegebener Zeit mal mit externer aktiver Antenne versuchen.
  • Jumper-Konfiguration: Die korrekte Einstellung der Jumper auf dem Shield war entscheidend, um Konflikte zwischen LoRa und GPS zu vermeiden. Beim Dragino v1.3 teilen sich GPS‑UART und LoRa‑SPI teilweise Pins mit dem Arduino‑Board. Die Jumper müssen so gesetzt werden, dass GPS und LoRa nicht dieselben Pins verwenden. Gerade beim Arduino Uno kommt es sonst zu Konflikten.

Fazit

Hier hat sich mal wieder gezeigt, dass im Nachhinein eine bessere Hardware‑Auswahl genommen werden sollte – und dass dieses kleine Projekt viel größer wurde, als es am Anfang aussah. Was als einfache LoRa‑Spielerei begann, hat sich schnell zu einer Reise entwickelt, die weit über das typische Maker‑Basteln hinausgeht.

Denn sobald Funktechnik ins Spiel kommt, verändert sich alles:
Plötzlich geht es nicht mehr nur um Code, Pins und Libraries, sondern um Frequenzen, gesetzliche Vorgaben, Antennen, Störungen, Signalstärken und Hardware‑Eigenheiten, die man vorher gar nicht auf dem Radar hatte.

Und genau das macht solche Projekte so spannend – aber eben auch herausfordernd. Man stolpert, man lernt, man flucht ein bisschen… und am Ende versteht man wieder ein Stück mehr von dieser faszinierenden Welt, in der unsere kleinen Mikrocontroller funken, lauschen und miteinander sprechen.

Dieses Projekt war für mich ein Anfang, kein Abschluss. Das GPS‑Modul wird noch einmal eine eigene Bühne bekommen, und auch die LoRa‑Reichweite möchte ich später ausführlicher testen. Aber schon jetzt hat sich gezeigt:

LoRa ist kein „mal eben schnell“-Thema. Es ist ein eigenes Universum.

Und genau deshalb lohnt es sich, dranzubleiben.


Update:
Habe inzwischen weitere Informationen gefunden:
https://github.com/dragino/Arduino-Profile-Examples/blob/master/libraries/Dragino/examples/GPS/tinygps_example/tinygps_example.ino

https://www.instructables.com/Dragino-LoRa-GPS-Tracker-1


,
Schlagwörter
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzerkomfort bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst und hilft uns zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.