LoRa E32 per Arduino, esp32 o esp8266: specifiche ed utilizzo base – Parte 1

Spread the love
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

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).

LoRa E32-TTL-100

Puoi trovarlo qui

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

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

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 elettroniciMin. 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 ricezione121518mA
Corrente in modalità Sleep358 μA
Temperatura operativa-40 20 +85
Humidità operativa10 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

E32 TTL 100
Pin No. Pin item Pin direction Pin application
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).
6VCC
Alimentazione 2.3V~5.5V DC
7GND
Terra

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

ModalitàM1 M0 Descrizione
Normal00UART e il canale wireless sono a attivi
Wake-Up01Come normale ma viene aggiunto un codice di preambolo ai dati trasmessi per riattivare il ricevitore.
Power-Saving10UART è 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.
Sleep11Utilizzato 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.

LoRa E32-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

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.

LoRa E32-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 E32-TTL-100
 * Start device or reset to send a message
 * https://www.mischianti.org
 *
 * E32-TTL-100----- Arduino UNO
 * M0         ----- GND
 * M1         ----- GND
 * RX         ----- PIN 2 (PullUP & Voltage divider)
 * TX         ----- PIN 3 (PullUP)
 * AUX        ----- Not connected
 * VCC        ----- 3.3v/5v
 * GND        ----- GND
 *
 */
#include "Arduino.h"

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

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 sketch:

/*
 * LoRa E32-TTL-100
 * Start device or reset to send a message
 * https://www.mischianti.org
 *
 * E32-TTL-100----- Wemos D1 mini
 * M0         ----- GND
 * M1         ----- GND
 * RX         ----- PIN D2 (PullUP)
 * TX         ----- PIN D3 (PullUP)
 * AUX        ----- Not connected
 * VCC        ----- 3.3v/5v
 * GND        ----- GND
 *
 */
#include "Arduino.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(D2, D3); // RX, TX

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

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:

Arduino sketch:

/*
 * LoRa E32-TTL-100
 * Write on serial to transfer a message to other device
 * https://www.mischianti.org
 *
 * E32-TTL-100----- Arduino UNO
 * M0         ----- GND
 * M1         ----- GND
 * RX         ----- PIN 2 (PullUP &amp; Voltage divider)
 * TX         ----- PIN 3 (PullUP)
 * AUX        ----- Not connected
 * VCC        ----- 3.3v/5v
 * GND        ----- GND
 *
 */
#include "Arduino.h"
#include "LoRa_E32.h"

LoRa_E32 e32ttl100(2, 3); // RX, TX

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

Qui lo sketch Wemos D1 (esp8266):

/*
 * LoRa E32-TTL-100
 * Start device or reset to send a message
 * https://www.mischianti.org
 *
 * E32-TTL-100----- Wemos D1 mini
 * M0         ----- GND
 * M1         ----- GND
 * RX         ----- PIN D2 (PullUP)
 * TX         ----- PIN D3 (PullUP)
 * AUX        ----- Not connected
 * VCC        ----- 3.3v/5v
 * GND        ----- GND
 *
 */
#include "Arduino.h"
#include "LoRa_E32.h"

LoRa_E32 e32ttl100(D2, D3); // RX, TX

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

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.

Github library

  1. LoRa E32 per Arduino, esp32 o esp8266: specifiche ed utilizzo base
  2. LoRa E32 per Arduino, esp32 o esp8266: libreria
  3. LoRa E32 per Arduino, esp32 o esp8266: configurazione
  4. LoRa E32 per Arduino, esp32 o esp8266: trasmissione fissa
  5. LoRa E32 per Arduino, esp32 o esp8266: power saving ed invio di dati strutturati

  •  
  •  
  •  
  •  
  •  
  •  

Potrebbero interessarti anche...

Lascia un commento

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