Allgemein

ESP32 LoRa: Reichweite testen und erste Funkverbindung aufbauen

„`html

Wie weit funktioniert LoRa in der Praxis eigentlich wirklich? Angaben von mehreren Kilometern klingen beeindruckend, sagen für den Einsatz rund um Haus und Garten aber nur wenig aus. Mauern, Bäume, Gelände und vor allem die verwendeten Antennen haben einen großen Einfluss auf die tatsächliche Reichweite.

Das lässt sich zum Glück recht einfach selbst ausprobieren. Für einen ersten ESP32-LoRa-Reichweitentest reichen zwei LoRa-Boards, zwei Antennen und ein Notebook oder eine mobile Stromversorgung. Ein LoRaWAN-Gateway benötigen wir für diesen Versuch nicht.

Falls du mit LoRa bisher noch nichts gemacht hast, findest du die technischen Grundlagen zunächst in meinem Beitrag LoRa und LoRaWAN einfach erklärt.

Hinweis: Dieser Artikel enthält Affiliate-Links. Wenn du darüber etwas kaufst, erhalte ich eine kleine Provision. Für dich ändert sich der Preis dadurch nicht.

Was brauchen wir für den ESP32-LoRa-Test?

Am einfachsten funktioniert der Versuch mit zwei Entwicklungsboards, bei denen LoRa bereits integriert ist. Dadurch entfällt die Verkabelung eines zusätzlichen Funkmoduls.

Gut geeignet ist beispielsweise das Heltec WiFi LoRa 32 V3. Auf dem Board befinden sich ein ESP32-S3, ein SX1262-LoRa-Chip und ein kleines OLED-Display. Wichtig ist beim Kauf die für Europa geeignete Frequenzversion im Bereich um 868 MHz.

  • 2 × ESP32-LoRa-Board für 868 MHz
  • 2 × passende LoRa-Antenne
  • USB-C-Kabel
  • Notebook oder PC zum Programmieren
  • Powerbank oder Akku für den mobilen Empfänger

Alternativ funktionieren natürlich auch andere ESP32-Boards mit SX1262 oder vergleichbaren LoRa-Funkchips. Bei separaten LoRa-Modulen muss allerdings zusätzlich auf die korrekte Verkabelung zwischen ESP32 und Funkmodul geachtet werden.

Wichtig: LoRa niemals ohne Antenne betreiben

Bevor das Board eingeschaltet und LoRa aktiviert wird, sollte die passende Antenne angeschlossen sein. Ein Funkmodul sollte nicht längere Zeit ohne geeignete Antenne senden.

Außerdem muss die Antenne zum verwendeten Frequenzbereich passen. Für unseren Test in Deutschland verwenden wir eine 868-MHz-Antenne.

Arduino IDE vorbereiten

Für die Programmierung kann die Arduino IDE verwendet werden. Beim Heltec-Board muss anschließend die passende ESP32-Unterstützung beziehungsweise das Heltec-Framework installiert werden.

Nach der Installation sollte das verwendete Board in der Arduino IDE ausgewählt werden. Beim WiFi LoRa 32 V3 handelt es sich um die V3-Version mit ESP32-S3 und SX1262. Gerade ältere Tutorials im Internet beziehen sich häufig noch auf frühere Heltec-Versionen und einen anderen LoRa-Chip.

So funktioniert unser Reichweitentest

Das Prinzip ist einfach. Der erste ESP32 wird zum Sender. Er verschickt alle paar Sekunden ein kleines Datenpaket mit einer fortlaufenden Nummer.

Der zweite ESP32 bleibt im Empfangsmodus. Sobald ein Paket angekommen ist, zeigt er neben der Nachricht auch die Empfangsstärke an.

  1. ESP32 Nummer 1 sendet „Test 1“.
  2. ESP32 Nummer 2 empfängt das Paket.
  3. Der Empfänger zeigt RSSI und SNR an.
  4. Der Abstand zwischen beiden Geräten wird vergrößert.
  5. Die Messwerte werden erneut notiert.

So entsteht schnell ein realistisches Bild davon, welche Reichweite am eigenen Standort erreichbar ist.

LoRa auf 868 MHz einstellen

Für unseren Versuch nutzen wir 868 MHz. Sender und Empfänger müssen außerdem dieselben LoRa-Parameter verwenden.

#define RF_FREQUENCY 868000000
#define TX_OUTPUT_POWER 10

#define LORA_BANDWIDTH 0
#define LORA_SPREADING_FACTOR 7
#define LORA_CODINGRATE 1
#define LORA_PREAMBLE_LENGTH 8

Für den ersten Test verwenden wir damit 125 kHz Bandbreite, Spreading Factor 7 und eine moderate Sendeleistung. Das reicht völlig aus, um die grundsätzliche Verbindung zu testen.

ESP32 als LoRa-Sender programmieren

Der Sender schickt in regelmäßigen Abständen ein kleines Paket. Die fortlaufende Nummer hilft später dabei zu erkennen, ob Pakete verloren gegangen sind.

#include "Arduino.h"
#include "LoRaWan_APP.h"

#define RF_FREQUENCY 868000000
#define TX_OUTPUT_POWER 10

static RadioEvents_t RadioEvents;

bool bereit = true;
unsigned long letzteSendung = 0;
unsigned long zaehler = 1;

void gesendet() {
  Serial.println("Paket gesendet");
  bereit = true;
}

void sendeFehler() {
  Radio.Sleep();
  bereit = true;
}

void setup() {
  Serial.begin(115200);

  Mcu.begin(HELTEC_BOARD, SLOW_CLK_TPYE);

  RadioEvents.TxDone = gesendet;
  RadioEvents.TxTimeout = sendeFehler;

  Radio.Init(&RadioEvents);
  Radio.SetChannel(RF_FREQUENCY);

  Radio.SetTxConfig(
    MODEM_LORA,
    TX_OUTPUT_POWER,
    0,
    0,
    7,
    1,
    8,
    false,
    true,
    0,
    0,
    false,
    3000
  );
}

void loop() {

  if (bereit && millis() - letzteSendung > 5000) {

    char nachricht[30];
    sprintf(nachricht, "Test %lu", zaehler++);

    Serial.print("Sende: ");
    Serial.println(nachricht);

    Radio.Send(
      (uint8_t *)nachricht,
      strlen(nachricht)
    );

    bereit = false;
    letzteSendung = millis();
  }

  Radio.IrqProcess();
}

Im seriellen Monitor sollte anschließend ungefähr alle fünf Sekunden eine neue Nachricht erscheinen.

Zweiten ESP32 als LoRa-Empfänger verwenden

Das zweite Board übernimmt die Gegenstelle. Besonders interessant sind dabei die Werte RSSI und SNR.

#include "Arduino.h"
#include "LoRaWan_APP.h"

#define RF_FREQUENCY 868000000

static RadioEvents_t RadioEvents;

void empfangen(
  uint8_t *payload,
  uint16_t size,
  int16_t rssi,
  int8_t snr
) {

  char text[100];

  memcpy(text, payload, size);
  text[size] = '\0';

  Serial.print("Empfangen: ");
  Serial.println(text);

  Serial.print("RSSI: ");
  Serial.print(rssi);
  Serial.println(" dBm");

  Serial.print("SNR: ");
  Serial.print(snr);
  Serial.println(" dB");

  Serial.println("----------------");

  Radio.Rx(0);
}

void setup() {

  Serial.begin(115200);

  Mcu.begin(HELTEC_BOARD, SLOW_CLK_TPYE);

  RadioEvents.RxDone = empfangen;

  Radio.Init(&RadioEvents);
  Radio.SetChannel(RF_FREQUENCY);

  Radio.SetRxConfig(
    MODEM_LORA,
    0,
    7,
    1,
    0,
    8,
    0,
    false,
    0,
    true,
    0,
    0,
    false,
    true
  );

  Radio.Rx(0);
}

void loop() {
  Radio.IrqProcess();
}

Je nach Version der installierten Heltec-Bibliothek können sich einzelne Funktionen ändern. In diesem Fall lohnt sich ein Blick in die mitgelieferten Beispiele unter LoRaBasic. Entscheidend ist, dass Sender und Empfänger mit denselben Funkparametern arbeiten.

Was bedeuten RSSI und SNR?

Für einen Reichweitentest sind zwei Messwerte besonders interessant.

RSSI

RSSI steht für „Received Signal Strength Indicator“ und beschreibt vereinfacht die Stärke des empfangenen Funksignals.

Der Wert wird in dBm angegeben und ist normalerweise negativ. Je näher der Wert an null liegt, desto stärker ist das Signal. Mit zunehmender Entfernung wird der Wert stärker negativ.

SNR

SNR bedeutet „Signal-to-Noise Ratio“ und beschreibt das Verhältnis zwischen Nutzsignal und Hintergrundrauschen. LoRa kann dabei auch Signale empfangen, deren SNR bereits unter 0 dB liegt.

Für unseren Praxistest sind die absoluten Zahlen zunächst weniger wichtig. Interessanter ist, wie sich RSSI und SNR mit zunehmender Entfernung verändern und ab welchem Punkt Pakete verloren gehen.

Jetzt geht es nach draußen

Für den eigentlichen Reichweitentest bleibt der Sender beispielsweise zu Hause am Fenster stehen. Das zweite Board wird über eine Powerbank versorgt und mitgenommen.

Anschließend kann man verschiedene Entfernungen ausprobieren, beispielsweise 50, 100, 250, 500 und 1.000 Meter.

Ein Smartphone mit Karten-App hilft dabei, die Entfernung später einigermaßen genau nachzuvollziehen.

Messwerte notieren

Für einen reproduzierbaren Test empfiehlt es sich, die Ergebnisse aufzuschreiben.

EntfernungRSSISNRPaketeUmgebung
10 mim Haus
50 mWohngebiet
100 m
250 m
500 m
1.000 m

Noch interessanter wird der Vergleich, wenn anschließend dieselbe Strecke mit einer anderen Antenne gefahren oder gelaufen wird.

Was beeinflusst die LoRa-Reichweite?

Bei den ersten Versuchen fällt schnell auf, dass die reine Entfernung nur ein Teil der Geschichte ist.

  • Gebäude und Stahlbeton
  • Bäume und dichte Vegetation
  • Hügel und Gelände
  • Höhe der Antenne
  • Ausrichtung der Antenne
  • Qualität der Antenne
  • Spreading Factor
  • Bandbreite
  • Sendeleistung

Ein Sender in einem Kellerraum kann deshalb erheblich schlechter funktionieren als derselbe Sender einige Meter höher an einem Fenster.

Die Antennenposition macht einen großen Unterschied

Bevor man mit höherer Sendeleistung oder anderen Funkparametern experimentiert, lohnt sich ein Test mit der Position der Antenne.

Ein paar Meter mehr Höhe können bei einer Funkverbindung erstaunlich viel bewirken. Auch direkt neben großen Metallflächen oder elektronischen Geräten ist die Position häufig ungünstig.

Wer später beispielsweise einen LoRa-Sensor im Garten einsetzen möchte, sollte die Antenne deshalb möglichst sinnvoll im Gehäuse platzieren.

Mehr Reichweite mit einem höheren Spreading Factor

LoRa bietet verschiedene sogenannte Spreading Factors. Für unseren ersten Test haben wir SF7 verwendet.

Wird der Spreading Factor erhöht, kann die Robustheit der Funkverbindung steigen. Dafür benötigt ein Datenpaket länger für die Übertragung.

Für einen zweiten Test kann beispielsweise SF9 ausprobiert werden. Wichtig ist wieder, dass Sender und Empfänger identisch eingestellt sind.

#define LORA_SPREADING_FACTOR 9

Danach lässt sich dieselbe Strecke noch einmal ablaufen. So wird sehr anschaulich sichtbar, welchen Einfluss die Funkparameter auf die Verbindung haben.

LoRa ist noch kein LoRaWAN

Unser Versuch arbeitet mit einer direkten Funkverbindung zwischen zwei Geräten. Das wird häufig als LoRa Point-to-Point bezeichnet.

Ein LoRaWAN-Netzwerk funktioniert umfangreicher. Dort senden Sensoren ihre Daten an ein oder mehrere Gateways. Dahinter befindet sich wiederum ein LoRaWAN Network Server.

Für erste Experimente ist die direkte Verbindung jedoch wesentlich einfacher und hervorragend geeignet, um ein Gefühl für die Reichweite von LoRa zu bekommen.

Was könnte man als Nächstes bauen?

Nach dem erfolgreichen Reichweitentest kann aus dem Versuchsaufbau schnell ein richtiges Smart-Home-Projekt werden.

  • Bodenfeuchtesensor im Garten
  • Temperatursensor im Gewächshaus
  • Wasserstand einer Zisterne messen
  • Briefkasten überwachen
  • Wetterstation anbinden
  • Sensor in einer entfernten Garage
  • Messwerte an Home Assistant übertragen

Besonders interessant wird es, wenn der Empfänger die LoRa-Daten anschließend über WLAN oder MQTT an Home Assistant weitergibt. Damit lassen sich auch weit entfernte Sensoren in das eigene Smart Home integrieren.

Fazit: LoRa-Reichweite selbst testen lohnt sich

Mit zwei ESP32-LoRa-Boards lässt sich innerhalb kurzer Zeit eine eigene Funkstrecke aufbauen. Gerade der anschließende Reichweitentest zeigt sehr deutlich, warum LoRa für IoT-Sensoren so interessant ist.

Statt sich auf theoretische Kilometerangaben zu verlassen, bekommt man Werte für die eigene Umgebung. Häuser, Bäume, Antennenposition und Gelände können schließlich einen enormen Unterschied machen.

Für mich wäre der nächste Schritt nach diesem Versuch ein echter Sensor. Ein Bodenfeuchte- oder Temperatursensor im Garten bietet sich besonders an und zeigt schnell, welchen Vorteil LoRa gegenüber WLAN bei größeren Entfernungen haben kann.

Häufige Fragen zu ESP32 und LoRa

Welche Frequenz sollte ich in Deutschland verwenden?

Für entsprechende LoRa-Anwendungen in Europa wird Hardware für den Frequenzbereich um 868 MHz verwendet. Beim Kauf sollte deshalb auf eine europäische beziehungsweise EU868-Version geachtet werden.

Brauche ich für LoRa ein Gateway?

Für die hier verwendete direkte LoRa-Verbindung zwischen zwei ESP32-Boards ist kein Gateway erforderlich. Ein Gateway wird interessant, wenn ein LoRaWAN-Netzwerk aufgebaut werden soll.

Wie weit reicht ESP32 LoRa?

Das lässt sich nicht pauschal beantworten. Unter guten Bedingungen können große Entfernungen erreicht werden. In Gebäuden und dicht bebauten Gebieten sinkt die Reichweite. Antennen, Montagehöhe und LoRa-Einstellungen haben ebenfalls großen Einfluss.

Kann ich die LoRa-Daten später in Home Assistant nutzen?

Ja. Eine Möglichkeit besteht darin, die empfangenen Daten mit einem ESP32 über WLAN und MQTT an Home Assistant weiterzugeben. Genau daraus lässt sich später ein eigener LoRa-zu-MQTT-Empfänger bauen.

* Affiliate-Link: Bei einem Kauf über diesen Link erhalte ich eine Provision. Für dich bleibt der Preis unverändert.

„`

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert