Ebyte LoRa E32 per Arduino, esp32 o esp8266: specifiche ed utilizzo base – Parte 1
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 3000 ma 8000 m).
Puoi trovarlo qui AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)
Testeremo l’E32-TTL-100. È un modulo ricetrasmettitore wireless, funziona da 410 a 441 MHz basato sull’originale RFX SX1278 di SEMTECH, e permette la trasmissione trasparente, livello TTL. Il modulo adotta la tecnologia dello spettro di diffusione LORA.
Il modulo presenta l’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 dati interferiti, garantendo una buona affidabilità. Senza FEC, quei pacchetti possono essere eliminati.
Con la crittografia e decrittografia, l’intercettazione dei dati diventa inutile. La funzione di compressione dei dati può ridurre il tempo di trasmissione e la probabilità di interferenze, migliorando l’affidabilità e l’efficienza della trasmissione.
Tipo operativo e di trasmissione
Questo dispositivo ha alcune funzioni interessanti:
Trasmissione
Trasmissione trasparente
Questa può essere considerata come una “modalità demo”, è il valore predefinito ed è possibile inviare messaggi a tutti i dispositivi con lo stesso indirizzo e canale impostati.
Trasmissione fissa
Questo tipo di trasmissione è possibile specificare un indirizzo e un canale a cui si desidera inviare il messaggio.
Puoi inviare un messaggio a:
- Dispositivo specificato con un indirizzo predeterminato basso, un indirizzo alto (per ottenere un indirizzo di 2 byte lo hanno separato in 2 parametri) e un canale.
- Mandare messaggi di broadcast su un determinato canale.
Power saving mode
Normal mode
Invia semplicemente un messaggio.
Wake-up mode e power-saving mode
Come puoi intuire se un dispositivo è in modalità Wake-up puoi “riattivare” uno o più dispositivi che sono in modalità di risparmio energetico con una comunicazione preambolo.
Program/sleep mode
Con questa configurazione è possibile modificare la configurazione del dispositivo.
Specifiche
Ecco le specifiche per il modulo:
- Dimensioni del modulo: 21 * 36 mm
- Tipo di antenna: SMA-K (impedenza 50Ω)
- Distanza di trasmissione: 3000 m (max)
- Potenza massima: 2dB (100mW)
- Tariffe aeree: 2,4 Kbps (6 livelli opzionali (0,3, 1,2, 2,4, 4,8, 9,6, 19,2 kbps)
- Lunghezza delle emissioni: 512 byte
- Lunghezza di ricezione: 512 byte
- Interfaccia di comunicazione: UART – 8N1, 8E1, 8O1, otto tipi di baud rate UART, da 1200 a 115200 bps (impostazione predefinita: 9600)
- Supporto RSSI: No (elaborazione intelligente integrata)
- Frequenza di lavoro: 410 MHz-441 MHz (predefinito 433 MHz), Canale: 32
Parametri elettronici | Min. | Typ. | Max. | Unit |
---|---|---|---|---|
Alimentazione | 2.3 | 3.3 | 5.5 | V |
Communication level | 3.0 | 3.3 | 3.6 | V |
Corrente trasmissione | 102 | 110 | 118 | mA |
Corrente in ricezione | 12 | 15 | 18 | mA |
Corrente in modalità Sleep | 3 | 5 | 8 | μA |
Temperatura operativa | -40 | 20 | +85 | ℃ |
Humidità operativa | 10 | 60 | 90 | % |
Temperatura di conservazione | -40 | 20 | +125 | ℃ |
Devi prestare attenzione al communication level che differisce dall’alimentazione, il secondo può ricevere una tensione sia 3.3v (esp8266 ed esp32) che 5v (Arduino), ma il primo vuole un 3.3v, quindi per connetterti ad un Arduino devi usare un Partitore di tensione (Partitore di tensione (voltage divider): calcolatore e applicazioni) per prevenire danni al dispositivo.
Pinout
Pin No. | Pin item | Pin direction | Pin application |
---|---|---|---|
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 2.3V~5.5V DC | |
7 | GND | Terra |
Come puoi vedere, puoi impostare varie modalità tramite i pin M0 e M1.
Modalità | M1 | M0 | Descrizione |
---|---|---|---|
Normal | 0 | 0 | UART e il canale wireless sono a attivi |
Wake-Up | 0 | 1 | Come normale ma viene aggiunto un codice di preambolo ai dati trasmessi per riattivare il ricevitore. |
Power-Saving | 1 | 0 | UART è disabilitato e il wireless è in modalità WOR (wake on radio), il che significa che il dispositivo si accenderà quando ci sono dati da ricevere. La trasmissione non è consentita. |
Sleep | 1 | 1 | Utilizzato nell’impostazione dei parametri. Trasmissione e ricezione disabilitate. |
Per il prossimo semplice test useremo la modalità normale.
Collegamento di 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à.
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 |
VCC | 3.3v |
GND | GND |
Connessione di Arduino per un utilizzo di base
La tensione di lavoro di Arduino è 5v, quindi è necessario aggiungere un partitore di tensione sul pin RX del modulo LoRa per prevenire danni, è possibile ottenere maggiori informazioni qui Partitore di tensione (voltage divider): calcolatore e applicazioni.
È possibile utilizzare una resistenza da 2Kohm su GND e 1Kohm dal segnale e poi insieme su RX.
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 |
GND | GND |
Connessione ESP32 per un utilizzo di base
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
RX | TX2 (PullUP 4,7KΩ) |
TX | RX2 (PullUP 4,7KΩ) |
AUX | Not connected |
VCC | 3.3v-5v |
GND | GND |
Connessione Arduino MKR WiFi 1010 per un utilizzo di base
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 | PIN 1 (PullUP 4,7KΩ) |
VCC | 5V |
GND | GND |
Sketch per una semplice comunicazione
Se si imposti su 0 pin M1 e M0 si entra in modalità “Normale”, ed è possibile ricevere e trasmettere tutti i dati dal dispositivo A a B, questa modalità viene definita “Trasmissione trasparente”.
Puoi usare 2 Arduinos o 2 Wemos D1 mini o uno di ogni tipo.
All’inizio invia un messaggio e se scrivi in seriale da uno dei dispositivi il testo viene trasferito all’altro dispositivo. Puoi usare 2 Arduinos o 2 Wemos o uno e uno come preferisci.
Sketch Arduino
/*
* LoRa E32-TTL-100
* Start device or reset to send a message
* https://mischianti.org
*
* E32-TTL-100----- 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); // e32 TX e32 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 E32-TTL-100
* Start device or reset to send a message
* https://mischianti.org
*
* E32-TTL-100----- 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); // e32 TX e32 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 E32
* Start device or reset to send a message
* https://mischianti.org
*
* E32 ----- 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 SAMD MKR WiFi 1010
/*
* LoRa E32
* Start device or reset to send a message
* https://mischianti.org
*
* E32 ----- Arduino MKR WiFi 1010
* M0 ----- 2 (or GND)
* M1 ----- 3 (or GND)
* RX ----- 14 (PullUP)
* TX ----- 13 (PullUP)
* AUX ----- 1 (PullUP)
* 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!");
Serial1.begin(9600);
Serial1.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
Qui l’ultimo esempio usando la mia libreria:
Sketch Arduino
/*
* LoRa E32-TTL-100
* Write on serial to transfer a message to other device
* https://mischianti.org
*
* E32-TTL-100----- 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_E32.h"
LoRa_E32 e32ttl100(2, 3); // e32 TX e32 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e32ttl100.begin();
// Send message
ResponseStatus rs = e32ttl100.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e32ttl100.available()>1) {
// read the String message
ResponseContainer rc = e32ttl100.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();
e32ttl100.sendMessage(input);
}
}
Sketch Wemos D1 (esp8266)
/*
* LoRa E32-TTL-100
* Start device or reset to send a message
* https://mischianti.org
*
* E32-TTL-100----- 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_E32.h"
LoRa_E32 e32ttl100(D2, D3); // e32 TX e32 RX
void setup() {
Serial.begin(9600);
delay(500);
Serial.println("Hi, I'm going to send message!");
// Startup all pins and UART
e32ttl100.begin();
// Send message
ResponseStatus rs = e32ttl100.sendMessage("Hello, world?");
// Check If there is some problem of successfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e32ttl100.available()>1) {
// read the String message
ResponseContainer rc = e32ttl100.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();
e32ttl100.sendMessage(input);
}
}
Sketch ESP-32
/*
* EBYTE LoRa E32
* send a transparent message, you must check that the transmitter and receiver have the same
* CHANNEL ADDL and ADDH
*
*
* https://mischianti.org
*
* E32 ----- esp32
* M0 ----- 19 (or GND)
* M1 ----- 21 (or GND)
* RX ----- TX2 (PullUP)
* TX ----- RX2 (PullUP)
* AUX ----- 15 (PullUP)
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E32.h"
// ---------- esp8266 pins --------------
//LoRa_E32 e32ttl(RX, TX, AUX, M0, M1); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(D3, D4, D5, D7, D6); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX AUX M0 M1
//LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // AUX M0 M1
// -------------------------------------
// ---------- Arduino pins --------------
//LoRa_E32 e32ttl(4, 5, 3, 7, 6); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX AUX M0 M1
//LoRa_E32 e32ttl(4, 5); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(4, 5); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(&mySerial, 3, 7, 6); // AUX M0 M1
// -------------------------------------
// ------------- Arduino MKR WiFi 1010 -------------
// LoRa_E32 e220ttl(&Serial1, 1, 2, 3); // RX AUX M0 M1
// -------------------------------------------------
// ---------- esp32 pins --------------
LoRa_E32 e32ttl(&Serial2, 15, 21, 19); // RX AUX M0 M1
//LoRa_E32 e32ttl(&Serial2, 22, 4, 18, 21, 19, UART_BPS_RATE_9600); // esp32 RX <-- e22 TX, esp32 TX --> e22 RX AUX M0 M1
// -------------------------------------
void setup() {
Serial.begin(9600);
delay(500);
// Startup all pins and UART
e32ttl.begin();
Serial.println("Hi, I'm going to send message!");
// Send message
ResponseStatus rs = e32ttl.sendMessage("Hello, world?");
// Check If there is some problem of succesfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e32ttl.available()>1) {
// read the String message
ResponseContainer rc = e32ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
Serial.println(rc.status.getResponseDescription());
}else{
// Print the data received
Serial.println(rc.status.getResponseDescription());
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e32ttl.sendMessage(input);
}
}
Sketch Arduino MKR WiFi 1010
/*
* EBYTE LoRa E32
* send a transparent message, you must check that the transmitter and receiver have the same
* CHANNEL ADDL and ADDH
*
*
* https://mischianti.org
*
* E32 ----- Arduino MKR
* M0 ----- 2 (or GND)
* M1 ----- 3 (or GND)
* RX ----- 14 (PullUP)
* TX ----- 13 (PullUP)
* AUX ----- 1 (PullUP)
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E32.h"
// ---------- esp8266 pins --------------
//LoRa_E32 e32ttl(RX, TX, AUX, M0, M1); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(D3, D4, D5, D7, D6); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX AUX M0 M1
//LoRa_E32 e32ttl(D2, D3); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(&mySerial, D5, D7, D6); // AUX M0 M1
// -------------------------------------
// ---------- Arduino pins --------------
//LoRa_E32 e32ttl(4, 5, 3, 7, 6); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX AUX M0 M1
//LoRa_E32 e32ttl(4, 5); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(4, 5); // Arduino RX <-- e22 TX, Arduino TX --> e22 RX
//LoRa_E32 e32ttl(&mySerial, 3, 7, 6); // AUX M0 M1
// -------------------------------------
// ------------- Arduino MKR WiFi 1010 -------------
LoRa_E32 e220ttl(&Serial1, 1, 2, 3); // RX AUX M0 M1
// -------------------------------------------------
// ---------- esp32 pins --------------
// LoRa_E32 e32ttl(&Serial2, 15, 21, 19); // RX AUX M0 M1
//LoRa_E32 e32ttl(&Serial2, 22, 4, 18, 21, 19, UART_BPS_RATE_9600); // esp32 RX <-- e22 TX, esp32 TX --> e22 RX AUX M0 M1
// -------------------------------------
void setup() {
Serial.begin(9600);
delay(500);
// Startup all pins and UART
e32ttl.begin();
Serial.println("Hi, I'm going to send message!");
// Send message
ResponseStatus rs = e32ttl.sendMessage("Hello, world?");
// Check If there is some problem of succesfully send
Serial.println(rs.getResponseDescription());
}
void loop() {
// If something available
if (e32ttl.available()>1) {
// read the String message
ResponseContainer rc = e32ttl.receiveMessage();
// Is something goes wrong print error
if (rc.status.code!=1){
Serial.println(rc.status.getResponseDescription());
}else{
// Print the data received
Serial.println(rc.status.getResponseDescription());
Serial.println(rc.data);
}
}
if (Serial.available()) {
String input = Serial.readString();
e32ttl.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 = e32ttl100.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
configuration.CHAN = 0x17;
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
ma lo vedremo meglio nel prossimo articolo.
Grazie
Ma questo tipo di utilizzo è molto riduttivo, nei prossimi articoli andremo più in profondità e inizieremo a utilizzare in modo massiccio la libreria per semplificare la configurazione e le impostazioni complesse.
- LoRa E32 per Arduino, esp32 o esp8266: specifiche ed utilizzo base
- LoRa E32 per Arduino, esp32 o esp8266: libreria
- LoRa E32 per Arduino, esp32 o esp8266: configurazione
- LoRa E32 per Arduino, esp32 o esp8266: trasmissione fissa
- LoRa E32 per Arduino, esp32 o esp8266: power saving ed invio di dati strutturati
- LoRa E32 per Arduino, esp32 o esp8266: WOR (wake on radio) il microcontrollore e lo shield per Arduino
- LoRa E32 per Arduino, esp32 o esp8266: WOR (wake on radio) il microcontrollore e lo shield per il WeMos D1 mini
- LoRa E32 per Arduino, esp32 o esp8266 : WOR (wake on radio) del microcontrollore e lo shield per esp32
- LoRa E32 per STM32: WOR (wake on radio) del microcontrollore e lo shield per STM32
- Mischianti Arduino LoRa shield (Open source)
- Mischianti WeMos LoRa shield (Open source)
- Mischianti ESP32 DOIT DEV KIT v1 LoRa shield (Open source)
Ciao,
Complimenti per la libreria, la considero utilissima, purtroppo però quando utilizzo il codice, viene inviato e ricevuto solo il messaggio hello word, dopo di che la seriale rimane bloccata, non riesco a capire cosa succede.
Ciao Giuseppe,
se hai usato l’esempio sopra è normale che vedi solo l’invio del messaggio, l’invio è sul setup e viene eseguito una volta sola.
La ricezione è nel loop ed ogni volta che parte un messaggio dovrebbe riceverlo.
Ciao Renzo
Ciao Renzo,
Grazie per la risposta, perdonami ma credevo che con l’istruzione:
if (Serial.available()) {
String input = Serial.readString();
e32ttl100.sendMessage(input);
}
inserita nel loop, venisse inviato il messaggio scritto nel monitor seriale.
Ciao Giuseppe
Non ti preoccupare, piuttosto grazie per il feedback che mi dai, è molto importante per me sapere se sono sulla giusta strada.
Ciao Renzo
Grazie per il bellissimo articolo. Ho provato ad installare lo skecth su di un ESP32 wroom 32 collegandolo come da indicazioni ad un E32 868T30D ma mi dava libreria mancante su SoftwareSeria. Ho installato allora le librerie EspSoftwareSerial mi ritorna in compilazione un errore però sulla riga:
LoRa_E32 e32ttl100(2, 3); // e32 TX e32 RX
per una conversione di variabile.
Credo dunque che EspSoftwareSerial non sia la libreria corretta.
Hai indicazioni in merito per cortesia?
ciao e grazie ancora
Luca M
Ciao Luca,
grazie, il tuo commento era finito in spam, non so come mai.
Per gli esp32 non va usato il software serial, puoi impostare qualsiasi pin da usare come hardware serial, puoi fare riferimento al costruttore sull’articolo
Ebyte LoRa E32 per Arduino, esp32 o esp8266: libreria – Parte 2
ma ci sono ulteriori informazioni sul forum in inglese
EByte LoRa e32 not working on esp32: sends a random number, the other reads
Se hai altri problemi, puoi usare il forum, e andiamo ad approfondire.
ciao Renzo