2023
HOME

LoRa und RadioLib - Senden und Empfangen ohne Lizenz | Sad-Ham
LoRa-Empfänger SX1278
LoRa-Empfang mit dem ESP8266 als Vorstufe zum LoRa-Gateway

Logo ESP8266BASICNachdem sowohl der Raspberry Pi Pico, als auch ein ESP8266 erfolgreich als LoRa-Sender funktionieren, ist die Zeit reif für einen LoRa-Empfänger mit dem SX1278. Dazu bleibt der erste SX-Baustein der Sender mit RP Pico, wie er bereits aufgebaut ist. Der zweite SX-Baustein soll zunächst mit dem verwendeten ESP8266 als Empfänger programmiert werden, um dann die Kern-Temperatur des Pi Pico über eine größere Entfernung zu empfangen und möglicherweise per WiFi weiter zu leiten.

Abbildung: ESP8266, SX1278, Oled1306, Powerbank

Zunächst erfolgt das Anbringen der Header-Pins am zweiten SX1278, um ihn dann entsprechend der Sketchangaben mit einem Wemos D1 mini ESP8266 zu verschalten. Die Verdrahtung entspricht dabei exakt der Tabelle: Lora Sender mit ESP8266 Hardware

Die einzelnen Abschnitte:


SX1278 Register auslesen


Die LoRa-Bibliothek kennt den Aufruf Registerdump. Die Funktion liefert den Inhalt aller SX-Register und gibt sie seriell aus. Da der Empfänger mit einem jungfräulichen Chip aufgebaut wird, soll der Factory-Zustand festgehalten werden.

Um zu vermeiden, dass die Register durch einen noch im ESP8266 vorhandenen LoRa-Sketch beim Einschalten ungewollt geändert werden, erfolgt vorsichtshalber die Trennung der Leitungen MOSI, Vcc und GND zunächst. Erst wenn der Registerdump-Sketch zum ESP übertragen ist, erfolgt die Verbindung erneut.

Mit dem nun folgenden Sketch für den ESP8266 am SX1278 landen die Registerinhalte im seriellen Monitor. Ärgerlicherweise haben die Coder der IDE 2.1.0 die Möglichkeit der elementaren Markier- und Kopierfunktion der seriellen Ausgabe nicht entsprechend der üblichen Verfahrensweise eingebaut. Aus diesem Grund erfolgt der Dump mit der IDE 1.x.x.

Eine leicht modifizierte Variante des LoRa-Examples LoRaDumpRegisters:

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

// ESP8266 Wemos D1 Mini D8 nss, D7 mosi, D6 miso, D5 sck, D0 rst 
#define ss 15
#define rst 16
#define dio0 2

void setup() 
{Serial.begin(9600);  // initialize serial
 delay(4000);
 while (!Serial);  
 Serial.println("LoRa Dump Registers");
 LoRa.setPins(ss, rst, dio0);
 if (!LoRa.begin(433E6))Serial.println("LoRa init failed.");
 LoRa.dumpRegisters(Serial);
}

void loop() {
Serial.print('.');
delay(1000);
}
Das Ergebnis ist in der Datei loradump.txt abgelegt. Mit diesen Daten kann der Baustein wieder in den Auslieferungszustand gesetzt werden. Es folgt ein LoRa Sende-Test, wie zuletzt mit dem PicoW, um die Funktion des zweiten Moduls zu testen. Ausgabe und Kontrolle via RTLSDR und HDSDR. Dabei kann ein direkter Vergleich der beiden Sendervarianten aufschlussreich sein. Insbesondere die verwendeten Antennen am SX zeigen oft überraschende Ergebnisse und Unterschiede beim Empfang via RTL-SDR am PC.

ESP8266 LoRa Empfänger Software


Zum Empfang wird der zur Bibliothek gehörende Beispielsketch mit der für den ESP notwendigen Pin-Modifikation LoRa.setPins(ss, rst, dio0); versehen und übertragen. Zusätzlich werden alle Übertragungsparameter gleich eingestellt (SpreadingFactor,SignalBandwidth).

Wie zu erwarten gelingt der Empfpang nicht. Erst durch Streichung der geänderten Übertragungsparameter bei Sender und Empfänger kommen im seriellen Monitor empfangene Daten an. Zur Überprüfung wird ein OLED-Display am Receiver angeschlossen, damit auch ohne PC Übertragungen angezeigt werden können. Die Einbindung der Bibliothek OLED_SSD1306_-_SH1106 bietet einen wunderbaren TTY-Modus mit endlosem vertikalen Scroll, wie sie auch im espBASIC für den RP2040 verwendet wird. Streicht man alle Zeilen zu OLED/display, so funktioniert der Sketch auch nur seriell.

Der modifizierte LoRaReceive-Sketch für den ESP8266 und SX1278 mit OLED 1306 128x64:

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

// ESP8266 D8 nss, D7 mosi, D6 miso, D5 sck, D0 rst 
#define ss 15
#define rst 16
#define dio0 2
bool lora = false;

OLED display(4,5,NO_RESET_PIN,OLED::W_128,OLED::H_64);

void setup() 
{Serial.begin(9600);
 while (!Serial);
 display.begin();
 display.setTTYMode(true);
 display.println("LoRa Receiver 433");
 Serial.println("LoRa Receiver");
 LoRa.setPins(ss, rst, dio0);
 lora = LoRa.begin(433E6); 
 if(!lora)Serial.println("Starting LoRa failed!");
 delay(100);
}

void loop() 
{int packetSize = LoRa.parsePacket();
 if(packetSize) 
 {Serial.print("Received packet '");
  while (LoRa.available()) 
  {char c = (char)LoRa.read();
   Serial.print(c);display.printf("%c",c);
  }
  Serial.print("' with RSSI ");
  display.printf(" %d\n",LoRa.packetRssi());
  Serial.println(LoRa.packetRssi());
 }
}


RP Pico Sender Sketch für ESP-Empfänger


Alle Sende- und Empfangsparameter gehorchen auf beiden Seiten den Voreinstellungen. Dadurch zeigt sich im Wasserfall eines SDR-Empfängers nur noch alle drei Sekunden ein breiter Burst. Die charakteristischem Chirps sind nicht mehr erkennbar, da zu schnell.
#include <SPI.h>
#include <LoRa.h>

// PicoW miso 16, sck 18, mosi 19 default
#define ss 17
#define rst 15
#define dio0 14

// ESP8266 D8 nss, D7 mosi, D6 miso, D5 sck, D0 rst 
//#define ss 15
//#define rst 16
//#define dio0 2

bool lora = false;
int counter = 0;

void setup()
{Serial.begin(115200);
 Serial.println("LoRa Send 'Core Temperature' every 3 seconds\n");
 LoRa.setPins(ss, rst, dio0);
 lora = LoRa.begin(433E6); 
 if(!lora)Serial.println("Starting LoRa failed!");
 delay(100);
}

void loop() {
 Serial.print("Sending packet: ");
 Serial.println(counter);
 // send packet
 if(lora)
 {LoRa.beginPacket();
  LoRa.printf("#%4d %5.2f", counter, analogReadTemp());
  LoRa.endPacket();
 }
 else  Serial.println("Starting LoRa failed!");
 counter++;
 delay(3000);
}
Ein kurzer Test der Reichweite mit dem Sender auf einem innen gelegenen Fensterbrett im 2. Stock und dem oben dargestellten mobilen Receiver zeigt im Wohnviertel mit dichter Bebauung erfreuliche Ergebnisse. Die richtig positionierte Antenne des Senders und die entsprechende Anpassung erweisen sich als ziemlich kritisch. Bedauerlicherweise ist keine UHF-Yagi mehr vorhanden. Die OLED-Anzeige zeigt neben der Temperatur im RP Pico Sender auch noch die Signalstärke in dB. Der angezeigte Wert im Bild ergibt sich aus der Übertragung zwischen Zimmern einmal durch das Haus mit zwei unangepassten Antennen (WiFi).

Software/Radio

.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt