La telemetria dei dati wireless LoRa o Long Range è una tecnologia introdotta da Semtech che opera a una frequenza inferiore degli NRF24L01 (433 MHz, 868 MHz o 916 MHz contro 2,4 GHz per NRF24L01) ma copre tre volte la distanza (da 5000 ma 11000 m).
Qui una selezione di dispositivi Ebyte LoRa E220 E220-400T22D 433MHz 5Km - E220-400T30D 433MHz 10Km - E220-900T22D 868MHz 915MHz 5Km - E220-900T30D 868MHz 915MHz 10Km
LLCC68
LoRa Smart Home (LLCC68) è un ricetrasmettitore RF LoRa® sub-GHz per applicazioni wireless a medio raggio da interno e da interno a esterno. Interfaccia SPI. Pin-to-pin compatibile con SX1262. SX1261, SX1262, SX1268 e LLCC68 sono progettati per una lunga durata della batteria con solo 4,2mA di consumo di corrente in ricezione attiva. L’SX1261 può trasmettere fino a +15 dBm e l’SX1262, SX1268 e LLCC68 possono trasmettere fino a +22 dBm con amplificatori di potenza integrati ad alta efficienza.
Questi dispositivi supportano la modulazione LoRa per i casi d’uso LPWAN e la modulazione (G)FSK per i casi d’uso legacy. I dispositivi sono altamente configurabili per soddisfare i diversi requisiti applicativi per l’uso da parte dei consumatori. Il dispositivo fornisce una modulazione LoRa compatibile con i ricetrasmettitori Semtech utilizzati dalla specifica LoRaWAN® rilasciata da LoRa Alliance®. La radio è adatta per i sistemi che mirano alla conformità alle normative radio, inclusi, a titolo esemplificativo, ETSI EN 300 220, FCC CFR 47 Part 15, requisiti normativi cinesi e ARIB T-108 giapponese. La copertura di frequenza continua da 150 MHz a 960 MHz consente il supporto di tutte le principali bande ISM sub-GHz in tutto il mondo.
Caratteristiche
- La nuova tecnologia di modulazione a spettro esteso LoRa sviluppata sulla base dell’LLCC68, offre una distanza di comunicazione più estesa e una maggiore capacità anti-interferenza;
- Supporta gli utenti nell’impostare da soli la chiave di comunicazione e non può essere letta, il che migliora significativamente la riservatezza dei dati dell’utente;
- Supporta la funzione LBT, monitora il rumore ambientale del canale prima dell’invio, il che migliora significativamente il tasso di successo della comunicazione del modulo in ambienti difficili;
- Supporta la funzione dell’indicatore di potenza del segnale RSSI per valutare la qualità del segnale, per migliorare la rete di comunicazione e l’intervallo;
- Supporta la modalità di risveglio via radio, e questo permette un consumo energetico estremamente basso, adatto per applicazioni alimentate a batteria;
- Supporta la trasmissione punto a punto, la trasmissione broadcast;
- Supporta il deep sleep, il consumo energetico dell’intera macchina è di circa 5uA in questa modalità;
- Il modulo ha PA+LNA integrato e la distanza di comunicazione può raggiungere i 5 km in condizioni ideali;
- I parametri vengono salvati dopo lo spegnimento e il modulo funzionerà secondo i parametri impostati dopo l’accensione;
- Design efficiente del watchdog, una volta che si verifica un’eccezione, il modulo si riavvierà automaticamente e continuerà a funzionare secondo le impostazioni dei parametri precedenti;
- Supporta la velocità in bit di 2,4 k~62,5 kbps;
- Supporta l’alimentazione da 3,0 a 5,5 V, l’alimentazione superiore a 5 V può garantire le migliori prestazioni;
- Design standard industriale, che supporta l’uso a lungo termine a -40 + 85 ;
Comparazione
LLCC68 | SX1278-SX1276 | |
---|---|---|
Distanza | > 11Km | 8Km |
Rate (LoRa) | 1.76Kbps – 62.5Kbps | 0.3Kbps – 19.2Kbps |
Consumo energetico durante il sonno | 2µA | 5µA |
Descrizione
Come il fratellino e32, il modulo dispone dell’algoritmo FEC Forward Error Correction, che garantisce un’elevata efficienza di codifica e buone prestazioni di correzione. In caso di interferenza improvvisa, può correggere automaticamente i pacchetti di dati compromessi, migliorando di conseguenza l’affidabilità e il raggio di trasmissione. Ma senza FEC, quei pacchetti potrebbero solo essere eliminati. E con la rigorosa crittografia e decrittografia, l’intercettazione dei dati diventa inutile.
Supporta la funzione LBT, monitora il rumore ambientale del canale prima dell’invio, il che migliora notevolmente il tasso di successo della comunicazione del modulo in ambienti difficili.
Ha una tecnologia a spettro esteso LoRa integrata che aiuta la stabilità della comunicazione.
E infine, hanno una caratteristica essenziale, l’RSSI , puoi controllare la potenza del segnale su tutti i messaggi inviati.
Tipo di funzionamento e trasmissione
Questo dispositivo ha alcune funzioni interessanti:
Trasmissione
Trasmissione transparente
Questa può essere considerata come una “Modalità demo”, per impostazione predefinita è possibile inviare un messaggio a tutti i dispositivi con lo stesso indirizzo e canale configurato.
Trasmissione fissa
Con questo tipo di trasmissione è possibile specificare un indirizzo e un canale dove si desidera inviare il messaggio.
Puoi inviare un messaggio a:
- Dispositivo specificato con indirizzo basso, indirizzo alto e canale predeterminati.
- Trasmetti un messaggio su un canale predeterminato.
Modalità normale
Invia semplicemente un messaggio.
Modalità trasmettitore WOR e ricevitore WOR
Come puoi intendere, se un dispositivo è in modalità trasmettitore WOR (Wake on radio), puoi “risvegliare” uno o più dispositivi in modalità ricevitore WOR con una preambolo sulla comunicazione.
Modalità programma/sleep
Con questa modalità puoi modificare la configurazione del tuo dispositivo.
Specifiche
Ecco le specifiche del modulo:
Main Parameters | Value | Remarks | ||
Min. | Typical | Max | ||
Operating voltage(V) | 3 | 5.0 | 5.5 | ≥5.0 V ensures output power |
Communication level(V) | – | 3.3 | – | For 5V TTL, it may be at risk of burning down |
Operating temperature(℃) | -40 | – | 85 | Industrial design |
Operating frequency(MHz) | 410.125 | 433.125 | 493.125 | Support ISM band |
TX Current(mA) | – | 110 | – | Instant power consumption |
RX current(mA) | – | 16 | – | – |
Sleep current(μA) | – | 2 | – | Software is shut down |
Max Tx power(dBm) | 21.5 | 22.0 | 22.5 | – |
Receiving sensitivity(dBm) | -146 | -147 | -148 | Air data rate is 0.3 kbps |
Air data rate(bps) | 2.4k | 2.4k | 62.5k | Controlled via user’s programming |
Main parameter | Description | Remarks |
Distance for reference | 5km | Test condition:clear and open area, antenna gain: 5dBi,antenna height:2.5m,air data rate: 2.4kbps |
TX length | 200 Byte | Can be configured via command as 32/64/128/200 bytes per packet totransmit |
Buffer | 400 Byte | – |
Modulation | LoRa | New generation LoRa modulation technology |
Communication interface | UART | TTL level |
Package | DIP | – |
Connector | 1*7*2.54mm | – |
Size | 21*36 mm | – |
Antenna | SMA | 50 ohm impedance |
Bisogna fare attenzione a livelli di comunicazione che differiscono dall’alimentatore, il secondo può ricevere voltaggi tipo 3.3v (esp8266, Arduino SAMD ed esp32) e 5v (Arduino), ma il primo vuole un 3.3v, quindi per collegarsi ad un Arduino bisogna usare un partitore di tensione (Partitore di tensione (voltage divider): calcolatore e applicazioni) per evitare danni al dispositivo.
Piedinatura
1 | M0 | Input(weak pull-up) | Lavora con M1 e decide le quattro modalità operative. Non può essere lasciato libero, può essere messo a terra. |
2 | M1 | Input(weak pull-up) | Lavora con M1 e decide le quattro modalità operative. Non può essere lasciato libero, può essere messo a terra. |
3 | RXD | Input | Ingressi UART TTL, connessione a pin di uscita TXD esterno (MCU, PC). Può essere configurato come ingresso open-drain o pull-up. |
4 | TXD | Output | Uscite TTL UART, si collega all’inputpin esterno RXD (MCU, PC). Può essere configurato come uscita open-drain o push-pull |
5 | AUX | Output | Per indicare lo stato di funzionamento del modulo e riattivare l’MCU esterno. Durante la procedura di inizializzazione di autocontrollo, il pin emette una bassa tensione. Può essere configurato come uscita open-drain o output push-pull (è consentito non metterlo a terra). |
6 | VCC | Alimentazione 3V~5.5V DC | |
7 | GND | Terra |
As you can see you can set various modes via M0 and M1 pins.
Mode | M1 | M0 | Explanation |
---|---|---|---|
Normal | 0 | 0 | UART e canale wireless sono open, e la transparent transmission è attiva |
WOR Transmitter | 0 | 1 | Trasmettitore WOR (Wake on radio) |
WOR Receiver | 1 | 0 | Ricevitore WOR (Supporta sveglia via radio) |
Deep sleep mode | 1 | 1 | Il modulo va in sleep (ma si sveglia automaticamente quando riceve i parametri di configurazione) |
Connessione in modalità normale
Per il prossimo semplice test utilizzeremo la modalità Normale.
Collegamento del Wemos D1 mini (esp8266) per un utilizzo di base
esp8266 ha il vantaggio di avere la stessa tensione dell’interfaccia di comunicazione, quindi lo schema di connessione è più semplice di Arduino.
È importante aggiungere una resistenza di pull-up (4,7Kohm) per ottenere una buona stabilità.
E220 | WeMos |
---|---|
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
RX | PIN D2 (PullUP 4,7KΩ) |
TX | PIN D3 (PullUP 4,7KΩ) |
AUX | Not connected (PullUP 4,7KΩ) |
VCC | 3.3v-5v |
GND | GND |
O meglio usare lo shield.
Puoi avere maggiori informazioni sull’articolo relativo (questo shield è adatto per E32, E22 ed E220).
Collegamento di esp32 per un utilizzo di base
Come il WeMos, la logica dell’esp32 funziona a 3.3v ma ha 3 HardwareSerial, quindi useremo Serial2.
E220 | esp32 |
---|---|
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
RX | TX2 (PullUP 4,7KΩ) |
TX | RX2 (PullUP 4,7KΩ) |
AUX | Not connected (PullUP 4,7KΩ) |
VCC | 3.3v-5v |
GND | GND |
Oppure anche per questo potete utilizzare il relativo shield.
Puoi avere maggiori informazioni sull’articolo relativo (questo scudo è adatto per E32, E22 e E220).
Collegamento di Arduino per un utilizzo di base
La tensione di lavoro di Arduino è 5v, quindi dobbiamo aggiungere un partitore di tensione sul pin RX del modulo LoRa per evitare danni, puoi ottenere maggiori informazioni qui Partitore di tensione (voltage divider): calcolatore e applicazioni.
È possibile utilizzare un resistore da 2Kohm su GND e 1Kohm dal segnale RX.
E220 | Arduino |
---|---|
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
RX | PIN D2 (PullUP 4,7KΩ & Voltage divider) |
TX | PIN D3 (PullUP 4,7KΩ) |
AUX | Not connected |
VCC | 3.3v-5v |
GND | GND |
O il relativo shield.
Puoi avere maggiori informazioni sull’articolo relativo (questo shield è adatto per l’E32, E22 e E220).
Arduino MKR WiFi 1010
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
TX | PIN 14 Tx (PullUP 4,7KΩ) |
RX | PIN 13 Rx (PullUP 4,7KΩ) |
AUX | Not connected |
VCC | 5V |
GND | GND |
Semplice sketch di comunicazione
Se si mette a 0 il pin M1 e M0 si entra in modalità “Normale”, allora si possono ricevere e trasmettere tutti i dati dal dispositivo da A a B, questa modalità è definita “Trasmissione trasparente”.
Puoi usare due dispositivi a tua scelta, anche eterogenei
All’avvio invia un messaggio e se scrivi su seriale da uno dei dispositivi il testo viene trasferito all’altro dispositivo. Puoi usare 2 Arduino o 2 Wemo o uno e uno come preferisci.
Sketch Arduino
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Arduino UNO
* M0 ----- GND
* M1 ----- GND
* TX ----- PIN 2 (PullUP)
* RX ----- PIN 3 (PullUP & Voltage divider)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // Arduino RX --> e220 TX - Arduino TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Sketch Wemos D1 mini
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Wemos D1 mini
* M0 ----- GND
* M1 ----- GND
* TX ----- PIN D2 (PullUP)
* RX ----- PIN D3 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(D2, D3); // WeMos RX --> e220 TX - WeMos TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Sketch esp32
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- esp32
* M0 ----- GND
* M1 ----- GND
* TX ----- RX2 (PullUP)
* RX ----- TX2 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
Serial2.begin(9600);
Serial2.println("Hello, world?");
}
void loop() {
if (Serial2.available()) {
Serial.write(Serial2.read());
}
if (Serial.available()) {
Serial2.write(Serial.read());
}
}
Sketch Arduino MKR WiFi 1010
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Arduino MKR
* M0 ----- GND
* M1 ----- GND
* TX ----- RX2 (PullUP)
* RX ----- TX2 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
Serial2.begin(9600);
Serial2.println("Hello, world?");
}
void loop() {
if (Serial1.available()) {
Serial.write(Serial1.read());
}
if (Serial.available()) {
Serial1.write(Serial.read());
}
}
Ma questo utilizzo di base è abbastanza inutile, quindi nel prossimo capitolo useremo la mia libreria e approfondiremo le funzionalità del dispositivo.
Libreria
Ecco l’ultimo esempio con la mia libreria:
Sketch Arduino
/*
* LoRa E220
* Write on serial to transfer a message to other device
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Arduino UNO
* M0 ----- GND
* M1 ----- GND
* TX ----- PIN 2 (PullUP)
* RX ----- PIN 3 (PullUP & Voltage divider)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E220.h"
LoRa_E220 e220ttl(2, 3); // Arduino RX --> e220 TX - Arduino TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e220ttl.begin();
// Send message
ResponseStatus rs = e220ttl.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e220ttl.available()>1) {
// read the String message
ResponseContainer rc = e220ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
rc.status.getResponseDescription();
}else{
// Print the data received
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e220ttl.sendMessage(input);
}
}
Sketch Wemos D1 (esp8266)
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Wemos D1 mini
* M0 ----- GND
* M1 ----- GND
* TX ----- PIN D2 (PullUP)
* RX ----- PIN D3 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E220.h"
LoRa_E220 e220ttl(D2, D3); // WeMos RX --> e220 TX - WeMos TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e220ttl.begin();
// Send message
ResponseStatus rs = e220ttl.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e220ttl.available()>1) {
// read the String message
ResponseContainer rc = e220ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
rc.status.getResponseDescription();
}else{
// Print the data received
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e220ttl.sendMessage(input);
}
}
Sketch esp32
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- esp32
* M0 ----- GND
* M1 ----- GND
* TX ----- RX2 (PullUP)
* RX ----- TX2 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E220.h"
LoRa_E220 e220ttl(&Serial2); // WeMos RX --> e220 TX - WeMos TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e220ttl.begin();
// Send message
ResponseStatus rs = e220ttl.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e220ttl.available()>1) {
// read the String message
ResponseContainer rc = e220ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
rc.status.getResponseDescription();
}else{
// Print the data received
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e220ttl.sendMessage(input);
}
}
Sketch Arduino MKR WiFi 1010
/*
* LoRa E220
* Start device or reset to send a message
* by Renzo Mischianti <https://mischianti.org>
* https://mischianti.org/category/my-libraries/lora-e220-llcc68-devices/
*
* E220 ----- Arduino MKR
* M0 ----- GND
* M1 ----- GND
* TX ----- RX2 (PullUP)
* RX ----- TX2 (PullUP)
* AUX ----- Not connected
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E220.h"
LoRa_E220 e220ttl(&Serial1); // Arduino RX --> e220 TX - Arduino TX --> e220 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e220ttl.begin();
// Send message
ResponseStatus rs = e220ttl.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e220ttl.available()>1) {
// read the String message
ResponseContainer rc = e220ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
rc.status.getResponseDescription();
}else{
// Print the data received
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e220ttl.sendMessage(input);
}
}
Se hai già modificato la configurazione, devi ripristinare i parametri di base:
// If you have ever change configuration you must restore It
ResponseStructContainer c;
c = e220ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
configuration.ADDL = 0x03; // First part of address
configuration.ADDH = 0x00; // Second part
configuration.CHAN = 23; // Communication channel
configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit
configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command
configuration.OPTION.transmissionPower = POWER_22; // Device power
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
c.close();
ma lo vedremo meglio nel prossimo articolo.
Grazie
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: specifiche ed utilizzo base
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: libreria
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: configurazione
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: trasmissione fissa, broadcast, monitor e RSSI
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: power saving ed invio di dati strutturati
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per Arduino
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per il WeMos D1 mini
- Ebyte LoRa E220 LLCC68 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per l’esp32 dev v1
Shield e PCB
- Mischianti Arduino LoRa shield (Open source)
- Mischianti WeMos LoRa shield (Open source)
- Mischianti ESP32 DOIT DEV KIT v1 shield (Open source)