2023
HOME

LoRa und RadioLib - Senden und Empfangen ohne Lizenz | Sad-Ham
LoRa-Sender SX1278
LoRa-Sender mit dem ESP8266 und Raspberry Pi Pico.

Logo ESP8266BASICMit der LoRa-Bibliothek für den Arduino soll das in der Theorie oft beschriebene Zwitschern/Chirp sichtbar und hörbar gemacht werden. Da das Modul laut Datenblatt mit 3,3 V funktionieren soll, fällt auch aus diesem Grund die Wahl des Mikrocontrollers zunächst auf einen verfügbaren ESP8266 in der Variante Wemos D1 mini.

Abbildung: LoRa-Header im Wasserfall eines Empfängers

Die Bibliothek verwendet die Anschlüsse eines Arduino als Voreinstellung, so dass diese Pinbelegung zunächst sorgfältig angepasst werden muss. Nachdem die Header angebracht sind, folgt der Aufbau auf einem Steckbrett.Logo ESP8266BASIC

Die einzelnen Abschnitte:


ESP8266 LoRa Sender Verbindungen


Die Verschaltung ESP8266 - SX1278 erfolgt wie folgt (optional mit OLED):

ESP8266 Wemos D1 . LoRa SX1278 . Bemerkung
GND --- GND
--- Masse
3.3V --- 3.3V --- Spannung
D8 --- NSS .
SPI CS
D7 --- MOSI .
SPI MOSI TX
D6 --- MISO ---
SPI MISO RX
D5 .--- SCK
SPI Clock
D0 --- RST
Reset
D2
(OLED)
I2C SDA
D1
(OLED)
I2C SCL

Bei eingerichteter Arduino-IDE für den ESP8266 kann nun die Bibliothek Lora von Sandeep Mistry eingebunden werden. Danach findet man unter Examples/LoRa den Sketch LoRaSender. Dieses Beispiel für den Arduino und 915 MHz funktioniert nicht mit dem hier verwendeten Bausteinen ESP8266 und SX1278. Einige wenige Anpassungen sind also notwendig. Das sind zum einen die Frequenz und zum anderen die Pinbelegung, die mit dem Aufruf LoRa.setPins erfolgt. Ein ESP8266 verwendet die GPIO 15, 16 und 2, was bei Wemos und NodeMCU die entsprechenden D-Pins sind.

Mit obiger Verschaltung und den defines für den Aufruf setPins:

#define ss 15
#define rst 16
#define dio0 2

sowie einem LoRa.begin(433E6); sollte der Beispielsketch vielleicht funktionieren. Das Ergebnis beim Empfänger ist allerdings erst einmal enttäuschend, da kein erwartetes Gezwitscher im Spektrum auftaucht, auch wenn scheinbar LoRa fehlerfrei sendet. Der Grund ist die Voreinstellung der LoRa-Bibliothek. Es wird einfach zu schnell gezwitschert! Der folgende Sketch für den ESP8266 zeigt in einem RTL-SDR-Empfänger auf 433 MHz bei entsprechender Einstellung das Bild oben rechts und bei USB-Empfang kann man das Gezwitscher hören.

LoRa.setSpreadingFactor(12);     // ranges from 6-12,default 7 see API docs
LoRa.setSignalBandwidth(20000); 
LoRa.setFrequency(433000000);

Insbesondere die Bandbreite erleichtert das Hören der Chirps und chirpy chirpy cheep cheeps. Der Spreadingfaktor dient der Sichtbarkeit.


ESP8266 LoRa Sender Sketch


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

/* CONNECTION
 MCU esp8266 TO SX1278 Ra02 (16 pin board)
 GND           GND
 3.3V          VCC
 D8  GP15      NSS  cs    
 D7  GP13      MOSI (HW)
 D6  GP12      MISO (HW)
 D5  GP14      SCK  (HW)
 D0  GP16      RST  reset
 D4  GP02      DIO0       
*/

#define ss 15
#define rst 16
#define dio0 2

bool lora = false;

void setup()
{Serial.begin(115200);
 while (!Serial);
 Serial.println("\nLoRa Send 'Y' every 3 seconds\n");
 LoRa.setPins(ss, rst, dio0);
 lora = LoRa.begin(433E6);
 if(!lora)Serial.println("Starting LoRa failed!");
 delay(100);
 LoRa.setSpreadingFactor(12);
 LoRa.setSignalBandwidth(20000);
 LoRa.setFrequency(433000000);
}

void loop() 
{Serial.print("Sending packet Y ");
 if(lora)  // send packet
 {LoRa.beginPacket();
  LoRa.println("Y");
  LoRa.endPacket();
 }
 else  Serial.println("Starting LoRa failed!");
 delay(3000);
}


HDSDR zeigt LoRa-Sendung im Spektrum bei 433 MHz


Audioaufnahme der LoRa-Modulation


Mit diesem Sketch ist nun erstmals das tatsächliche Gezwitscher hörbar und kann entsprechend aufgezeichnet werden. Deutlich auch hier, wie im Spektrum, klar erkennbar: Ein Header mit 10 Chirps in die eine und anschließend zwei Chirps in die andere Richtung.


Audacity zeigt Audio des LoRa-Signals

Zur Aufnahme dieses Signals ist unter HD-SDR eine USB-Bandbreite von 20 kHz eingestellt. Als Soundkarte wird ein VB-Vitual Cable verwendet, von dem Audacity die NF-Daten aufnehmen kann.


Raspberry Pi Pico LoRa Sender Verbindungen


Die tatsächliche Hardwarebelegung der voreingestellten SPI-GPIO erfordert etwas Recherche im Dickicht der Internet Falschinformationen. Nach einer Weile findet man:
Raspberry Pi Pico Default SPI Pins: GPIO19 (TX), GPIO18 (SCK), GPIO17 (CS) and GPIO 16 (RX)

Die Verschaltung RP Pico - SX1278 erfolgt wie folgt:

RP Pico
GPIO
. LoRa SX1278 . Bemerkung
GND --- GND --- Masse
3.3V --- 3.3V --- Spannung
17 --- NSS .
SPI CS
19 --- MOSI .
SPI MOSI TX
16 --- MISO ---
SPI MISO RX
18 .--- SCK
SPI Clock
15 --- RST
Reset
14 --- DIO0
(Optional)

Bei eingerichteter Arduino-IDE für den RP Pico kann nun die Bibliothek Lora von Sandeep Mistry eingebunden werden. Danach findet man unter Examples/LoRa den Sketch LoRaSender. Dieses Beispiel für den Arduino und 915 MHz funktioniert nicht mit dem hier verwendeten Bausteinen RP Pico und SX1278. Einige wenige Anpassungen sind hier notwendig. Das sind zum einen die Frequenz und zum anderen die Pinbelegung, die mit dem Aufruf LoRa.setPins erfolgt. Ein Raspberry Pi Pico verwendet die GPIO 17, 15 und 14.

Mit obiger Verschaltung und den defines für den Aufruf setPins:

#define ss 17
#define rst 15
#define dio0 14

sowie einem LoRa.begin(433E6); sollte der Beispielsketch vielleicht funktionieren. Das Ergebnis beim Empfänger ist allerdings erst einmal enttäuschend, da kein erwartetes Gezwitscher im Spektrum auftaucht, auch wenn scheinbar LoRa fehlerfrei sendet. Der Grund ist die Voreinstellung der LoRa-Bibliothek. Es wird einfach zu schnell gezwitschert! Der folgende Sketch für den RP Pico zeigt in einem RTL-SDR-Empfänger auf 433 MHz bei entsprechender Einstellung das Bild oben und bei USB-Empfang kann man das Gezwitscher hören.

LoRa.setSpreadingFactor(12);     // ranges from 6-12,default 7 see API docs
LoRa.setSignalBandwidth(20000); 
LoRa.setFrequency(433000000);

Insbesondere die Bandbreite erleichtert das Hören der Chirps und chirpy chirpy cheep cheeps. Der Spreadingfaktor dient der Sichtbarkeit.


RP Pico LoRa Sender Sketch


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

/* CONNECTION
 MCU RP Pico TO SX1278 Ra02 (16 pin board)
 GND           GND
 3.3V          VCC
 GPIO17        NSS  cs    
 GPIO19        MOSI (HW)
 GPIO16        MISO (HW)
 GPIO18        SCK  (HW)
 GPIO15        RST  reset
 GPIO14        DIO0       
*/

#define ss 17
#define rst 15
#define dio0 15

bool lora = false;

void setup()
{Serial.begin(115200);
 while (!Serial);
 Serial.println("\nLoRa Send 'Y' every 3 seconds\n");
 LoRa.setPins(ss, rst, dio0);
 lora = LoRa.begin(433E6);
 if(!lora)Serial.println("Starting LoRa failed!");
 delay(100);
 LoRa.setSpreadingFactor(12);
 LoRa.setSignalBandwidth(20000);
 LoRa.setFrequency(433000000);
}

void loop() 
{Serial.print("Sending packet Y ");
 if(lora)  // send packet
 {LoRa.beginPacket();
  LoRa.println("Y");
  LoRa.endPacket();
 }
 else  Serial.println("Starting LoRa failed!");
 delay(3000);
}


													


												

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