EByte LoRa E32 & MicroPython: specifiche, panoramica e primo utilizzo – 1
L’Internet delle Cose (IoT) è diventato sempre più popolare, creando una domanda per tecnologie di comunicazione a lunga distanza e a basso consumo energetico.
LoRa (Long Range) è una tecnologia di rete a larga area a bassa potenza (LPWAN) progettata per soddisfare queste esigenze, rendendola ideale per applicazioni IoT. Uno dei dispositivi che utilizza la tecnologia LoRa è la serie Ebyte LoRa E32, una collezione di moduli trasceiver wireless. In questa serie di articoli, esploreremo il dispositivo Ebyte LoRa E32 e la sua integrazione con MicroPython. Questo primo articolo si concentrerà sulle specifiche e sull’uso di base del dispositivo.
Ecco la mia selezione di dispositivi LoRa E32 AliExpress (433MHz 5Km) - AliExpress (433MHz 8Km) - AliExpress (433MHz 16Km) - AliExpress (868MHz 915MHz 5.5Km) - AliExpress (868MHz 915MHz 8Km)
Stiamo per testare l’E32-433T20D che è un modulo, che si interconnette tramite seriale, wireless basato sul chip RF SX1278 di Semtech (livello TTL), prevede una modalità di trasmissione trasparente, funzionante nella banda di frequenza 410-441MHz (predefinita 433MHz), utilizzando la tecnologia a spettro espanso LoRa.
Il SX1278 è un modulo LoRa che supporta la tecnologia a spettro espanso, offrendo numerosi vantaggi per applicazioni di comunicazione a bassa velocità. Con la sua lunga distanza di comunicazione, robuste capacità anti-interferenza e forte riservatezza, il SX1278 è diventato una scelta popolare in vari settori. Questo articolo discuterà delle caratteristiche chiave, dei vantaggi e delle applicazioni del modulo LoRa SX1278.
Panoramica SX1278
Il modulo LoRa SX1278 è progettato per prestazioni ottimali in applicazioni di comunicazione a bassa velocità. Ha una velocità di trasmissione aria predefinita di 2,4 kbps e una potenza di trasmissione di 20 dBm. Il modulo incorpora un oscillatore a cristallo di grado industriale, garantendo stabilità, coerenza e un’accuratezza inferiore a 10 ppm. Attualmente, il SX1278 è in produzione di massa stabile ed è ampiamente utilizzato nell’industria, nella trasformazione IoT e nelle applicazioni di mobili intelligenti.
Vantaggi del modulo LoRa SX1278
- Tecnologia a Spettro Espanso: Il SX1278 supporta la modulazione LoRa avanzata, offrendo vantaggi di lunga distanza e anti-interferenza rispetto alla tecnologia GFSK tradizionale.
- Distanza di Comunicazione: In condizioni ideali, la distanza di comunicazione può raggiungere fino a 3 km.
- Modalità di trasmissione: Il modulo supporta la trasmissione punto-punto, la trasmissione broadcast e il monitoraggio del canale.
- Risveglio Aereo: La funzione di consumo energetico ultra-basso rende SX1278 adatto per applicazioni alimentate a batteria.
- Correzione degli errori in avanti (FEC): Il modulo supporta FEC per migliorare la stabilità della comunicazione.
- Potenza di trasmissione regolabile: La potenza di trasmissione massima è di 100 mW, con diversi livelli regolabili tramite software.
- Banda di frequenza: SX1278 opera nella banda di frequenza globale senza licenza ISM 433 MHz.
- Velocità di trasmissione dati: Il modulo supporta velocità di trasmissione dati che variano da 0,3 kbps a 19,2 kbps.
- Alimentazione: È supportata un’alimentazione da 2,3 – 5,5 V, con oltre 3,3 V che garantisce prestazioni ottimali.
- Design di grado industriale: SX1278 è progettato per un uso a lungo termine a temperature comprese tra -40°C e +85°C.
- Antenna: L’interfaccia SMA-K consente un facile collegamento di un cavo coassiale o di un’antenna esterna.
Sicurezza e compressione dei dati
Il modulo SX1278 offre funzioni di crittografia e compressione dei dati, fornendo una comunicazione sicura. I dati trasmessi via etere sono casualizzati e algoritmi rigorosi di crittografia e decrittografia rendono i dati intercettati incomprensibili. La funzione di compressione dei dati aiuta a ridurre il tempo di trasmissione, abbassa la probabilità di interferenze e migliora l’affidabilità e l’efficienza della trasmissione.
Certificazioni
Il modulo E32-433T20D, che incorpora SX1278, aderisce alle specifiche di progettazione FCC, CE e CCC, nonché ad altri standard nazionali e internazionali. Rispetta varie certificazioni RF e requisiti di esportazione.
Tipo di funzionamento e trasmissione
Questo dispositivo ha alcune funzioni interessanti:
Trasmissione
Trasmissione trasparente
Questo può essere considerato una “Modalità Demo”, di default, puoi inviare messaggi a tutti i dispositivi con lo stesso indirizzo e canale configurati.
Trasmissione fissa
In questo tipo di trasmissione, puoi specificare un indirizzo e un canale dove vuoi inviare il messaggio.
Puoi inviare un messaggio a un:
- Dispositivo specifico con un Address Low, Address High e Canale predefiniti.
- Inviare un messaggio in broadcast su un canale predefinito.
Modalità normale
Invia semplicemente un messaggio.
Modalità sveglia e modalità risparmio energetico
Come puoi intendere, se un dispositivo è in modalità sveglia può “svegliare” uno o più dispositivi che sono in modalità risparmio energetico con una comunicazione preliminare.
Modalità programma/sonno
Con questa configurazione, puoi cambiare la configurazione del tuo dispositivo.
Specifiche
Ecco le specifiche per il modulo:
- Dimensioni modulo: 21*36mm
- Tipo di antenna: SMA-K (impedenza 50Ω)
- Distanza di trasmissione: 3000m (max)
- Potenza massima: 2dB(100mW)
- Velocità d’aria: 2.4Kbps (6 livelli opzionali (0.3, 1.2, 2.4, 4.8, 9.6, 19.2kbps))
- Lunghezza emissione: 512Byte
- Lunghezza ricezione: 512Byte
- Interfaccia di comunicazione: UART – 8N1, 8E1, 8O1, otto tipi di baud rate UART, da 1200 a 115200bps (Default: 9600)
- Supporto RSSI: No (Elaborazione intelligente integrata)
- Frequenza di lavoro: 410MHz-441MHz (Default 433MHz), Canale: 32
Parametro elettronico | Min. | Media | Max. | Unità |
---|---|---|---|---|
Alimentazione | 2.3 | 3.3 | 5.5 | V |
Livello di comunicazione | 3.0 | 3.3 | 3.6 | V |
Corrente in trasmissione | 102 | 110 | 118 | mA |
Corrente in ricezione | 12 | 15 | 18 | mA |
Corrente in sonno | 3 | 5 | 8 | μA |
Temperatura di funzionamento | -40 | 20 | +85 | ℃ |
Umidità operativa | 10 | 60 | 90 | % |
Temperatura di conservazione | -40 | 20 | +125 | ℃ |
Devi prestare attenzione al livello di comunicazione che differisce dall’alimentazione, il secondo può ricevere tensione come 3.3v e 5v, ma il primo richiede un 3.3v.
Schema dei pin
Nr. Pin | Elemento Pin | Direzione Pin | Applicazione Pin |
---|---|---|---|
1 | M0 | Input(debole pull-up) | Lavora con M1 e decide le quattro modalità operative. Non è permesso lasciarlo flottante, può essere collegato a terra. |
2 | M1 | Input(debole pull-up) | Lavora con M0 e decide le quattro modalità operative. Non è permesso lasciarlo flottante, può essere collegato a terra. |
3 | RXD | Input | Gli ingressi TTL UART si collegano al pin di output TXD esterno (MCU, PC). Può essere configurato come ingresso open-drain o pull-up. |
4 | TXD | Output | Gli output TTL UART si collegano al pin di ingresso RXD esterno (MCU, PC). Può essere configurato come output open-drain o push-pull. |
5 | AUX | Output | Per indicare lo stato di funzionamento del modulo e svegliare l’MCU esterno. Durante la procedura di inizializzazione del controllo automatico, il pin emette un livello basso. Può essere configurato come output open-drain o push-pull (è consentito flottante). |
6 | VCC | Alimentazione da 2,3V a 5,5V DC | |
7 | GND | Terra |
Come puoi vedere, puoi impostare varie modalità tramite i pin M0 e M1.
Modalità | M1 | M0 | Spiegazione |
---|---|---|---|
Normale | 0 | 0 | UART e il canale wireless sono pronti all’uso |
Sveglia | 0 | 1 | Stesso del normale, ma viene aggiunto un codice preambolo ai dati trasmessi per svegliare il ricevitore. |
Risparmio energetico | 1 | 0 | UART è disabilitato e il wireless è in modalità WOR (sveglia su radio), il che significa che il dispositivo si accenderà quando ci sono dati da ricevere. La trasmissione non è consentita. |
Sonno | 1 | 1 | Utilizzato per impostare i parametri. Trasmissione e ricezione disabilitate. |
Per il prossimo semplice test, useremo la modalità Normale.
Cablaggio
STM32
Ecco la mia selezione di STM32 STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official
Per mettere in funzione la trasmissione trasparente, possiamo mettere M0 e M1 a GND.
Puoi rimuovere il cablaggio AUX per questo test, ma è meglio se lo colleghi.
E32 | STM32F4 |
---|---|
M0 | GND (Set normal mode) |
M1 | GND (Set normal mode) |
RX | PA10 (PullUP 4,7KΩ) |
TX | PA9 (PullUP 4,7KΩ) |
AUX | Non collegato (meglio se imposti un pin, ma non necessario per questo test) |
VCC | 5v |
GND | GND |
esp32
Ecco la mia selezione di esp32 ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S
Lo schema di cablaggio è abbastanza semplice e per ora ho collegato M0 e M1 direttamente a GND per il test.
E32 | esp32 |
---|---|
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
RX | TX2 (PullUP 4,7KΩ) |
TX | RX2 (PullUP 4,7KΩ) |
AUX | Non collegato (meglio se imposti un pin, ma non necessario per questo test) |
VCC | 5v |
GND | GND |
Raspberry Pi Pico
Qui la selezione di rp2040 Official Pi Pico - Official Pi Pico W - Waveshare rp2040-zero - WeAct Studio rp2040
E qui c’è lo schema di collegamento. Per questo test, è possibile rimuovere il collegamento del pin AUX. Si può anche vedere che utilizzo una porta seriale predefinita diversa poiché differisce dall’ambiente Arduino.
Presta attenzione, UART(1) usa pin diversi in MicroPython rispetto all’ambiente seriale Serial1 di Arduino
E32 | rp2040 |
---|---|
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
RX | TX1 GPIO4 (PullUP 4,7KΩ) |
TX | RX1 GPIO5 (PullUP 4,7KΩ) |
AUX | 2 (meglio se imposti un pin, ma non necessario per questo test) |
VCC | 5v |
GND | GND |
Per lo schema dei pin standard di Arduino, devi cambiare la dichiarazione UART così uart2 = UART(1, rx=Pin(9), tx=Pin(8))
Semplice sketch di comunicazione
Ora, andremo a fare uno sketch semplice, senza alcuna libreria, che trasferisce un messaggio utilizzando la trasmissione trasparente che è l’impostazione predefinita per questi dispositivi LoRa.
#############################
#
# Simple send receive test
#
# by Renzo Mischianti
# www.mischianti.org
#
#############################
from machine import UART, Pin
import utime
# UART configuration Raspberry Pi Pico (Arduino)
uart1 = UART(1, 9600, rx=Pin(9), tx=Pin(8))
# UART configuration Raspberry Pi Pico (MicroPython)
# uart1 = UART(1, 9600)
# UART configuration ESP32
# uart1 = UART(2, 9600)
print("Hi, I'm going to send message!")
uart1.write("Hello, world?")
utime.sleep_ms(500)
while True:
if uart1.any():
char = uart1.read(1).decode('utf-8')
print(char, end='')
Ecco la stampa del primo dispositivo avviato
Ciao, sto per inviare un messaggio!
13
Ciao, mondo?
Libreria
Ora facciamo lo stesso esempio con la libreria MicroPython ebyte-lora-e32
. Naturalmente, questo è un esempio banale e non puoi capire il potenziale della libreria, ma puoi capire come usarla.
Per installare la libreria, puoi scaricarla da questo repository GitHub:
Oppure puoi installarla tramite Pypi con il comando:
pip install ebyte-lora-e32
Su Thonny IDE, puoi usare Strumenti --> Gestisci plug-in...
.
Schema di comunicazione con la libreria
Ora facciamo l’esempio precedente con la libreria.
#############################
#
# Simple send receive test
# with the micropython library
# pip install ebyte-lora-e32
#
# by Renzo Mischianti
# www.mischianti.org
#
#############################
from lora_e32 import LoRaE32, print_configuration, Configuration
from lora_e32_operation_constant import ResponseStatusCode
from machine import UART, Pin
# Initialize the LoRaE32 module
# UART configuration Raspberry Pi Pico (Arduino)
uart1 = UART(1, 9600, rx=Pin(9), tx=Pin(8))
# UART configuration Raspberry Pi Pico (MicroPython)
# uart1 = UART(1, 9600)
# UART configuration ESP32
# uart1 = UART(2, 9600)
lora = LoRaE32('433T20D', uart1)
code = lora.begin()
print("Initialization: ", ResponseStatusCode.get_description(code))
# Send a string message (transparent)
message = 'Hello, world!'
code = lora.send_transparent_message(message)
print("Send message: ", ResponseStatusCode.get_description(code))
# Receive a string message (transparent)
while True:
if lora.available() > 0:
code, value = lora.receive_message()
print(ResponseStatusCode.get_description(code))
print(value)
Il risultato nella REPL console è:
Initialization: Success
Send message: Success
Success
Hello, world!