Mit 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.
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);
}
Mehr zum SX1278 auf dieser Seite (in Klammern die Anzahl der verwendeten Module):
|