Ebyte LoRa E22 per Arduino, esp32 o esp8266: specifiche ed utilizzo base – 1

Spread the love

Ebyte LoRa E22 per Arduino, esp32 o esp8266: specifiche ed utilizzo base
Ebyte LoRa E22 per Arduino, esp32 o esp8266: specifiche ed utilizzo base

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 4000 a 10000 m).

Ebyte LoRa E22 per Arduino, esp32 o esp8266 2 dispositivi
Ebyte LoRa E22 per Arduino, esp32 o esp8266 2 dispositivi

Puoi trovarlo qui AliExpress (433MHz 5.5Km) - AliExpress (433MHz 10Km) - AliExpress (868MHz 915Mhz 5.5Km) - AliExpress (868MHz 915Mhz 10Km)

Testeremo l’E22-400T22D and E22-400T22S. È un modulo ricetrasmettitore wireless, funziona da 410 a 493 MHz basato sull’originale RFX SX1268 di SEMTECH, e permette la trasmissione trasparente, livello TTL. Il modulo adotta la tecnologia dello spettro di diffusione LORA.

Comeil fratello minore Ebyte e22 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.

Dispositivi Ebyte LoRa E22 per Arduino, esp32 o esp8266 sensibilità segnale
Dispositivi Ebyte LoRa E22 per Arduino, esp32 o esp8266 sensibilità segnale

Ma in più rispetto l’e22 ha una features denominata “carrier sense (sensore della trasmissione)” che aspetta ad eseguire la trasmissione se ci sono interferenze temporanee, può essere usato come repeater, ha un watchdog che in caso di errore riavvia il dispositivo e continuare a lavorare, ha una modalità deep sleep per un migliore risparmio energetico, e prima di tutto l’sx1268 garantisce con meno consumi più potenza.

Dispositivi Ebyte LoRa E22 funzione ripetitore per trasmissioni a lunga distanza
Dispositivi Ebyte LoRa E22 funzione ripetitore per trasmissioni a lunga distanza

Si può configurare o leggere la configurazione da remoto inviando pacchetti in modalità wireless.

Ed infine ha un’importante features che è l’RSSI cioè è possibile sapere l’intensità del segnale all’invio di ogni messaggio.

Dispositivi Ebyte LoRa E22 per Arduino, esp32 o esp8266 potenza del segnale RSSI
Dispositivi Ebyte LoRa E22 per Arduino, esp32 o esp8266 potenza del segnale RSSI

Modalità operativa e di trasmissione

Questo dispositivo ha alcune funzioni interessanti:

Trasmissione

LoRa E22 transmitting scenarios

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.
LoRa E22 Fixed message to a specified device
  • Mandare messaggi di broadcast su un determinato canale.
Broadcast message to a set of channel devices

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:

Main ParametersValueRemarks
Min.TypicalMax
Operating voltage(V)2.3 5.05.5≥5.0 V ensures output power
Communication level(V)3.3For 5V TTL, it may be at risk of burning down
Operating temperature(℃)-40 85Industrial design
Operating frequency(MHz)410.125433.125493.125 Support ISM band
TX Current(mA)110Instant power consumption
RX current(mA) 12
Sleep current(μA)2Software is shut down
Max Tx power(dBm) 21.5 22.0 22.5
Receiving sensitivity(dBm)-146 -147 -148Air data rate is 0.3 kbps
Air data rate(bps) 0.3k2.4k 62.5kControlled via user’s programming

Main parameter DescriptionRemarks
Distance for reference 5kmTest condition:clear and open area, antenna gain: 5dBi,antenna height:2.5m,air data rate: 2.4kbps
TX length 240 ByteCan be configured via command as 32/64/128/240 bytes per packet totransmit
Buffer1000 Byte
ModulationLoRaNew generation LoRa modulation technology
Communication interface UARTTTL level
PackageDIP
Connector1*7*2.54mm
Size 21*36 mm
Antenna SMA50 ohm impedance
  • Interfaccia di comunicazione: UART – 8N1, 8E1, 8O1, otto tipi di baud rate UART, da 1200 a 115200 bps (impostazione predefinita: 9600)
Electronic parameter Min. Typ. Max. Unit Condition
Power supply 3.3 3.6 5.5 V  
Communication level 3.0 3.3 3.6 V  
Transmitting current 95 100 105 mA 22dBm(160mW)
Receiving current 6 6.5 7 mA  
Sleep current 1 2 3 nA  
Operating temperature -40 20 +85  
Operating humidity 10 60 90 %  
Storage temperature -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

E32 TTL 100
1M0Input(weak pull-up)Lavora con M1 e decide le quattro modalità operative. Non può essere lasciato libero, può essere messo a terra.
2M1Input(weak pull-up)Lavora con M1 e decide le quattro modalità operative. Non può essere lasciato libero, può essere messo a terra.
3RXDInputIngressi UART TTL, connessione a pin di uscita TXD esterno (MCU, PC). Può essere configurato come ingresso open-drain o pull-up.
4TXDOutputUscite 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).
6VCCAlimentazione 2.3V~5.5V DC
7GNDTerra

Come puoi vedere, puoi impostare varie modalità tramite i pin M0 e M1.

ModeM1M0Explanation
Normal00UART and wireless channel are open, transparent transmission is on
WOR mode01Can be defined as WOR transmitter and WOR receiver
Configuration mode10Users can access the register through the serial port to control the working state of the module
Deep sleep mode11Sleep mode.

Collegamento in normal mode

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.

LoRa E22-TTL-100 Wemos D1 breadboard

È importante aggiungere una resistenza di pull-up (4,7Kohm) per ottenere una buona stabilità.

M0GND (Set normal mode)
M1GND (Set normal mode)
RXPIN D2 (PullUP 4,7KΩ)
TXPIN D3 (PullUP 4,7KΩ)
AUXNot connected
VCC3.3v
GNDGND

Connettere l’esp32 per utilizzo base

Come il WeMos, la logica dell’esp32 lavora a 3.3v ma avendo 3 Hardware Serial possiamo usare la Serial2 per la connessione.

Ebyte LoRa E22 device esp32 dev kit v1 breadboard transparent transmission (normal mode)
Ebyte LoRa E22 device esp32 dev kit v1 breadboard transparent transmission (normal mode)
M0GND (Set normal mode)
M1GND (Set normal mode)
RXTX2 (PullUP 4,7KΩ)
TXRX2 (PullUP 4,7KΩ)
AUXNot connected
VCC3.3v
GNDGND

Connettere l’Arduino MKR per l’utilizzo base

Ebyte LoRa Exx Arduino MKR WiFi 1010 normal mode connected breadboard
Ebyte LoRa Exx Arduino MKR WiFi 1010 normal mode connected breadboard
M0GND (Set normal mode)
M1GND (Set normal mode)
TXPIN 14 Tx (PullUP 4,7KΩ)
RXPIN 13 Rx (PullUP 4,7KΩ)
AUXPIN 1 (PullUP 4,7KΩ)
VCC5V
GNDGND

Connettere l’Arduino UNO per utilizzo 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.

LoRa E22-TTL-100 Arduino breadboard
M0GND (Set normal mode)
M1GND (Set normal mode)
RXPIN D2 (PullUP 4,7KΩ & Voltage divider)
TXPIN D3 (PullUP 4,7KΩ)
AUXNot connected
VCC3.3v
GNDGND

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.

Arduino sketch

/*
 * LoRa E22 
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- 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 --> e22 TX - Arduino TX --> e22 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());
  }
}

Wemos D1 mini (esp8266) sketch

/*
 * LoRa E22 
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22         ----- 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 --> e22 TX - WeMos TX --> e22 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 per esp32

/*
 * LoRa E22 
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- 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());
  }
}

Ma questo utilizzo di base è abbastanza inutile, quindi nel prossimo capitolo useremo la mia libreria e approfondiremo le funzionalità del dispositivo.

Sketch per Arduino MKR

/*
 * LoRa E22 
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- 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"

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());
  }
}

Libreria

EByte LoRa E22 E32 gestore librerie Arduino
EByte LoRa E22 E32 gestore librerie Arduino

Qui l’ultimo esempio usando la mia libreria:

Arduino sketch

/*
 * LoRa E22
 * Write on serial to transfer a message to other device
 * https://mischianti.org
 *
 * E22        ----- 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_E22.h"

LoRa_E22 e22ttl(2, 3); // Arduino RX --> e22 TX - Arduino TX --> e22 RX

void setup() {
  Serial.begin(9600);
  delay(500);

  Serial.println("Hi, I'm going to send message!");

  // Startup all pins and UART
  e22ttl.begin();

  // Send message
  ResponseStatus rs = e22ttl.sendMessage("Hello, world?");
  // Check If there is some problem of successfully send
  Serial.println(rs.getResponseDescription());
}

void loop() {
	// If something available
  if (e22ttl.available()>1) {
	  // read the String message
	ResponseContainer rc = e22ttl.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();
	  e22ttl.sendMessage(input);
  }
}

Sketch Wemos D1 (esp8266)

/*
 * LoRa E22
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- 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_E22.h"

LoRa_E22 e22ttl(D2, D3); //  WeMos RX --> e22 TX - WeMos TX --> e22 RX

void setup() {
  Serial.begin(9600);
  delay(500);

  Serial.println("Hi, I'm going to send message!");

  // Startup all pins and UART
  e22ttl.begin();

  // Send message
  ResponseStatus rs = e22ttl.sendMessage("Hello, world?");
  // Check If there is some problem of successfully send
  Serial.println(rs.getResponseDescription());
}

void loop() {
	// If something available
  if (e22ttl.available()>1) {
	  // read the String message
	ResponseContainer rc = e22ttl.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();
	  e22ttl.sendMessage(input);
  }
}

Sketch per esp32

/*
 * LoRa E22
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- 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_E22.h"

LoRa_E22 e22ttl(&Serial2); // WeMos RX --> e22 TX - WeMos TX --> e22 RX

void setup() {
  Serial.begin(9600);
  delay(500);

  Serial.println("Hi, I'm going to send message!");

  // Startup all pins and UART
  e22ttl.begin();

  // Send message
  ResponseStatus rs = e22ttl.sendMessage("Hello, world?");
  // Check If there is some problem of successfully send
  Serial.println(rs.getResponseDescription());
}

void loop() {
	// If something available
  if (e22ttl.available()>1) {
	  // read the String message
	ResponseContainer rc = e22ttl.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();
	  e22ttl.sendMessage(input);
  }
}

Sketch per Arduino MKR

/*
 * LoRa E22
 * Start device or reset to send a message
 * https://mischianti.org
 *
 * E22        ----- Arduino MKR
 * M0         ----- GND
 * M1         ----- GND
 * RX         ----- 14 (PullUP)
 * TX         ----- 13 (PullUP)
 * AUX        ----- 1  (PullUP)
 * VCC        ----- 3.3v/5v
 * GND        ----- GND
 *
 */
#include "Arduino.h"
#include "LoRa_E22.h"

LoRa_E22 e22ttl(&Serial1); // WeMos RX --> e22 TX - WeMos TX --> e22 RX

void setup() {
  Serial.begin(9600);
  delay(500);

  Serial.println("Hi, I'm going to send message!");

  // Startup all pins and UART
  e22ttl.begin();

  // Send message
  ResponseStatus rs = e22ttl.sendMessage("Hello, world?");
  // Check If there is some problem of successfully send
  Serial.println(rs.getResponseDescription());
}

void loop() {
	// If something available
  if (e22ttl.available()>1) {
	  // read the String message
	ResponseContainer rc = e22ttl.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();
	  e22ttl.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 = e22ttl.getConfiguration();
	Configuration configuration = *(Configuration*) c.data;
	Serial.println(c.status.getResponseDescription());
	configuration.CHAN = 0x17;
	configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
	e22ttl.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.

  1. Ebyte LoRa E22 per Arduino, esp32 o esp8266: specifiche ed utilizzo base
  2. Ebyte LoRa E22 per Arduino, esp32 o esp8266: libreria
  3. Ebyte LoRa E22 per Arduino, esp32 o esp8266: configurazione
  4. Ebyte LoRa E22 per Arduino, esp32 o esp8266: trasmissione fissa, broadcast, monitor e RSSI
  5. Ebyte LoRa E22 per Arduino, esp32 o esp8266: risparmio energetico ed invio di dati strutturati
  6. Ebyte LoRa E22 per Arduino, esp32 o esp8266: ripetitore e configurazione remota
  7. Ebyte LoRa E22 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per Arduino
  8. Ebyte LoRa E22 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per il WeMos D1 mini
  9. Ebyte LoRa E22 per Arduino, esp32 o esp8266: WOR il microcontrollore e lo shield per l’esp32 dev v1

Shield e PCB


Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *