La telemetria dati wireless LoRa o Long Range è una tecnologia introdotta da Semtech che opera a una frequenza inferiore rispetto al NRF24L01 (433 MHz, 868 MHz o 916 MHz contro 2,4 GHz per NRF24L01) ma a una distanza tripla (da 5000 m a 11000 m).
Ora proviamo ad esaminare meglio come configurare il dispositivo LoRa Ebyte E220 UART basato sui moduli wireless LLCC68.
Qui alcuni dispositivi: E220-400T22D 433MHz 5Km - E220-400T30D 433MHz 10Km - E220-900T22D 868MHz 915MHz 5Km - E220-900T30D 868MHz 915MHz 10Km
Ho creato questa libreria per gestire gli EBYTE E220 ma soprattutto per semplificare il processo di configurazione perché può essere molto noioso.
Se hai problemi di blocco del dispotivo, devi inserire una resistenza di pull-up da 4,7k o meglio collegarti al pin AUX del dispositivo.
Libreria
Puoi trovare la mia libreria qui, ed è disponibile anche dal Library Manager dell’Arduino IDE.
Per scaricare:
Clicca sul bottone DOWNLOADS sull’angolo in alto a destra, e rimonima la cartella decompressa come LoRa_E220.
Controlla che la cartella LoRa_E220 contenga LoRa_E220.cpp e LoRa_E220.h.
Posizione la cartella della libreria LoRa_E220 nella tua cartella /libraries/.
Potresti aver bisogno di creare la cartella libraries se è la prima volta.
Riavvia l’IDE.
Schemi di connessione per la programmazione
Per l’utilizzo di base, abbiamo utilizzato una configurazione specifica per Arduino. Tuttavia, stai lavorando solo in “Modalità normale” in quella configurazione. Ora gestiremo solo i pin dinamici necessari (RX, TX) per semplificare il processo di programmazione e gli altri in modo statico.
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 |
Come puoi vedere, puoi impostare varie modalità tramite i pin M0 e M1.
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) |
Configurazione normale (trasparente)
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
TX | PIN 2 (PullUP 4,7KΩ) |
RX | PIN 3 (PullUP 4,7KΩ & Voltage divider) |
AUX | Non connesso (PullUP 4,7KΩ) |
VCC | 5v |
GND | GND |
e questa configurazione per Wemos D1 mini:
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
TX | PIN D2 (PullUP 4,7KΩ) |
RX | PIN D3 (PullUP 4,7KΩ) |
AUX | Non connesso (PullUP 4,7KΩ) |
VCC | 3.3v/5v |
GND | GND |
ESP-32:
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
RX | TX2 (PullUP 4,7KΩ) |
TX | RX2 (PullUP 4,7KΩ) |
AUX | Non connesso (PullUP 4,7KΩ) |
VCC | 3.3v/5v |
GND | GND |
Arduino MKR WiFi 1010:
M0 | GND (Imposta modalità normale) |
M1 | GND (Imposta modalità normale) |
TX | PIN 14 Tx (PullUP 4,7KΩ) |
RX | PIN 13 Rx (PullUP 4,7KΩ) |
AUX | Non connesso (PullUP 4,7KΩ) o al Pin 1 |
VCC | 3.3v/5V |
GND | GND |
Connessione per la modalità di programmazione/sleep
Per configurarlo, è necessario impostare M0 e M1 su alto (ricordarsi di utilizzare 3.3v).
Ma se colleghi tutti i pin, la libreria imposta in ALTO o BASSO i pins a secondo necessità senza problemi.
M0 | VCC (Set programming/sleep mode) |
M1 | VCC (Set programming/sleep mode) |
TX | PIN D2 (PullUP 4,7KΩ) |
RX | PIN D3 (PullUP 4,7KΩ) |
AUX | Non connesso (PullUP 4,7KΩ) |
VCC | 3.3v/5v |
GND | GND |
M0 | 3.3v (Set programming/sleep mode) |
M1 | 3.3v (Set programming/sleep mode) |
TX | PIN 2 (PullUP 4,7KΩ) |
TX | PIN 3 (PullUP 4,7KΩ & Voltage divider) |
AUX | Non connesso (PullUP 4,7KΩ) |
VCC | 3.3v/5v |
GND | GND |
M0 | 3.3v (Set programming/sleep mode) |
M1 | 3.3v (Set programming/sleep mode) |
RX | TX2 (PullUP 4,7KΩ) |
TX | RX2 (PullUP 4,7KΩ) |
AUX | Non connesso (PullUP 4,7KΩ) o D18 |
VCC | 3.3v/5v |
GND | GND |
M0 | 3.3v (Set programming/sleep mode) |
M1 | 3.3v (Set programming/sleep mode) |
TX | PIN 14 Tx (PullUP 4,7KΩ) |
RX | PIN 13 Rx (PullUP 4,7KΩ) |
AUX | Not connected (PullUP 4,7KΩ) o al Pin 1 |
VCC | 3.3v/5V |
GND | GND |
In questa modalità è possibile gestire la configurazione del dispositivo
Opzione di configurazione di base
Name | Description | Address |
---|---|---|
ADDH | Indirizzo High del modulo (impostazione predefinita 00H) | 00H |
ADDL | Indirizzo Low del modulo (impostazione predefinita 00H) | 01H |
SPED | Informazioni sul bit di parità della velocità dei dati e sulla velocità dei dati via etere | 02H |
OPTION | Tipo di trasmissione, settaggi pull-up, tempo di wake-up, FEC, potenza trasmisisone | 03H |
CHAN | Canale di comunicazione(410M + CHAN*1M), default 17H (433MHz), valido solo per i dispositivi a 433Mhz controlla sotto per cambiare la frequenza | 04H |
TRANSMISSION_MODE | Molti parametri per specificare le varie modalità di trasmissione | 05H |
CRTYPT_H | Criptaggio | 06H |
CRTYPT_L | Criptaggio | 07H |
Puoi trovare le opzioni di configurazione nell’articolo Libreria.
Ottienere la configurazione
Sketch di esempio dell’Arduino MKR WiFi 1010 (completamente connesso rimuovi M0, M1 e AUX se vuoi)
/*
* LoRa E220 LLCC68
* Get configuration.
* https://mischianti.org
*
* E220 ----- Arduino MKR
* M0 ----- 2 (or 3.3v)
* M1 ----- 3 (or 3.3v)
* RX ----- 14 (PullUP)
* TX ----- 13 (PullUP)
* AUX ----- 1 (PullUP) o (PullUP)
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "EByte_LoRa_E220_library.h"
// ---------- esp8266 pins --------------
//LoRa_E220 e220ttl(RX, TX, AUX, M0, M1); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(D3, D4, D5, D7, D6); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1
//LoRa_E220 e220ttl(D2, D3); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(&mySerial, D5, D7, D6); // AUX M0 M1
// -------------------------------------
// ---------- Arduino pins --------------
// LoRa_E220 e220ttl(4, 5, 3, 7, 6); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1
//LoRa_E220 e220ttl(4, 5); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(4, 5); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(&mySerial, 3, 7, 6); // AUX M0 M1
// -------------------------------------
// ------------- Arduino MKR WiFi 1010 -------------
LoRa_E220 e220ttl(&Serial1, 2, 4, 6); // Serial AUX M0 M1
// -------------------------------------------------
// ---------- esp32 pins --------------
// LoRa_E220 e220ttl(&Serial2, 15, 21, 19); // Serial AUX M0 M1
//LoRa_E220 e220ttl(&Serial2, 22, 4, 18, 21, 19, UART_BPS_RATE_9600); // esp32 RX <-- e220 TX, esp32 TX --> e220 RX AUX M0 M1
// -------------------------------------
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
void setup() {
Serial.begin(9600);
while(!Serial){};
delay(500);
Serial.println();
// Startup all pins and UART
e220ttl.begin();
ResponseStructContainer c;
c = e220ttl.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters(configuration);
ResponseStructContainer cMi;
cMi = e220ttl.getModuleInformation();
// It's important get information pointer before all other operation
ModuleInformation mi = *(ModuleInformation*)cMi.data;
Serial.println(cMi.status.getResponseDescription());
Serial.println(cMi.status.code);
printModuleInformation(mi);
c.close();
}
void loop() {
}
void printParameters(struct Configuration configuration) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX);
Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX);
Serial.println(F(" "));
Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription());
Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription());
Serial.println(F(" "));
Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting());
Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable());
Serial.println(F(" "));
Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());
Serial.println("----------------------------------------");
}
void printModuleInformation(struct ModuleInformation moduleInformation) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD: ")); Serial.print(moduleInformation.COMMAND, HEX);Serial.print(" ");Serial.print(moduleInformation.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(moduleInformation.LENGHT, DEC);
Serial.print(F("Model no.: ")); Serial.println(moduleInformation.model, HEX);
Serial.print(F("Version : ")); Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : ")); Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");
}
Ecco il risultato dello sketch
Success
1
----------------------------------------
HEAD : C1 0 8
AddH : 0
AddL : 3
Chan : 23 -> 433MHz
SpeedParityBit : 0 -> 8N1 (Default)
SpeedUARTDatte : 11 -> 9600bps (default)
SpeedAirDataRate : 10 -> 2.4kbps (default)
OptionSubPacketSett: 0 -> 200bytes (default)
OptionTranPower : 0 -> 22dBm (Default)
OptionRSSIAmbientNo: 0 -> Disabled (default)
TransModeWORPeriod : 11 -> 2000ms (default)
TransModeEnableLBT : 0 -> Disabled (default)
TransModeEnableRSSI: 1 -> Enabled
TransModeFixedTrans: 0 -> Transparent transmission (default)
----------------------------------------
Success
1
----------------------------------------
HEAD: C1 8 3
Model no.: 20
Version : A
Features : 16
----------------------------------------
Come puoi vedere, aggiungo molti costruttori per ogni dispositivo, se cambi la prima configurazione puoi cambiare il dispositivo con lo stesso codice.
Per avere le informazioni corrette, aggiungo alcuni #define per cambiare il tipo di dispositivo (lo stesso #define
gestisce più dispositivi, ne creo solo uno per tipo per semplicità).
#define E220_22
#define E220_30
Puoi selezionarne solo uno. Il parametro modifica la costante di potenza di trasmissione come descritto nello schema di configurazione.
Allo stesso modo è possibile selezionare una frequenza di riferimento
#define FREQUENCY_433
#define FREQUENCY_170
#define FREQUENCY_470
#define FREQUENCY_868
#define FREQUENCY_915
Puoi sceglierne solo uno. Il parametro modifica le frequenze di riferimento solo a scopo di visualizzazione,
Imposta configurazione
Naturalmente, quando hai una configurazione e vuoi cambiarla per il tuo scopo, penso che tu possa prendere la configurazione dal dispositivo, modificare ciò che vuoi e reimpostarla.
Ma nello sketch di esempio, aggiungo un set di configurazioni commentate, puoi decommentare la configurazione che vuoi. Negli altri esempi in libreria, c’è un riferimento alla relativa configurazione da applicare.
Ricorda che il parametro saveType è fondamentale per mantenere le opzioni al riavvio del dispositivo, WRITE_CFG_PWR_DWN_LOSE naturalmente perderai le impostazioni con WRITE_CFG_PWR_DWN_SAVE non perderai le impostazioni.
Ecco uno sketch dell’Arduino MKR WiFi 1010 (completamente connesso rimuovi M0, M1 e AUX se vuoi):
/*
* LoRa E220
* set configuration.
* https://mischianti.org
*
* E220 ----- Arduino MKR
* M0 ----- 2 (or 3.3v)
* M1 ----- 3 (or 3.3v)
* RX ----- 14 (PullUP)
* TX ----- 13 (PullUP)
* AUX ----- 1 (PullUP) o (PullUP)
* VCC ----- 3.3v/5v
* GND ----- GND
*
*/
#include "Arduino.h"
#include "LoRa_E220.h"
// ---------- esp8266 pins --------------
//LoRa_E220 e220ttl(RX, TX, AUX, M0, M1); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(D3, D4, D5, D7, D6); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1
//LoRa_E220 e220ttl(D2, D3); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(D2, D3); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(&mySerial, D5, D7, D6); // AUX M0 M1
// -------------------------------------
// ---------- Arduino pins --------------
//LoRa_E220 e220ttl(4, 5, 3, 7, 6); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1
//LoRa_E220 e220ttl(4, 5); // Config without connect AUX and M0 M1
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(4, 5); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX
//LoRa_E220 e220ttl(&mySerial, 3, 7, 6); // AUX M0 M1
// -------------------------------------
// ------------- Arduino MKR WiFi 1010 -------------
LoRa_E220 e220ttl(&Serial1, 1, 2, 3); // Serial AUX M0 M1
// -------------------------------------------------
// ------------- Arduino Nano 33 IoT -------------
// LoRa_E220 e220ttl(&Serial1, 2, 4, 6); // Serial AUX M0 M1
// -------------------------------------------------
// ---------- esp32 pins --------------
// LoRa_E220 e220ttl(&Serial2, 15, 21, 19); // Serial AUX M0 M1
//LoRa_E220 e220ttl(&Serial2, 22, 4, 18, 21, 19, UART_BPS_RATE_9600); // esp32 RX <-- e220 TX, esp32 TX --> e220 RX AUX M0 M1
// -------------------------------------
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
void setup() {
Serial.begin(9600);
while(!Serial){};
delay(500);
Serial.println();
// Startup all pins and UART
e220ttl.begin();
ResponseStructContainer c;
c = e220ttl.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters(configuration);
// ----------------------- DEFAULT TRANSPARENT -----------------------
configuration.ADDL = 0x03;
configuration.ADDH = 0x00;
configuration.CHAN = 23;
configuration.SPED.uartBaudRate = UART_BPS_9600;
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
configuration.SPED.uartParity = MODE_00_8N1;
configuration.OPTION.subPacketSetting = SPS_200_00;
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower = POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- DEFAULT TRANSPARENT WITH RSSI -----------------------
// configuration.ADDL = 0x03;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- FIXED SENDER -----------------------
// configuration.ADDL = 0x02;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
//
// ----------------------- FIXED RECEIVER -----------------------
// configuration.ADDL = 0x03;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_ENABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- FIXED SENDER RSSI -----------------------
// configuration.ADDL = 0x02;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
//
// ----------------------- FIXED RECEIVER RSSI -----------------------
// configuration.ADDL = 0x03;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- WOR SENDER -----------------------
// configuration.ADDL = 0x02;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
//
// ----------------------- WOR RECEIVER -----------------------
// configuration.ADDL = 0x03;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_500_000;
// ----------------------- BROADCAST MESSAGE 1 -----------------------
// configuration.ADDL = 0x04;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- BROADCAST MESSAGE 2 -----------------------
// configuration.ADDL = 0x05;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// ----------------------- BROADCAST MESSAGE 3 -----------------------
// configuration.ADDL = 0x06;
// configuration.ADDH = 0x00;
//
// configuration.CHAN = 23;
//
// configuration.SPED.uartBaudRate = UART_BPS_9600;
// configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
// configuration.SPED.uartParity = MODE_00_8N1;
//
// configuration.OPTION.subPacketSetting = SPS_200_00;
// configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
// configuration.OPTION.transmissionPower = POWER_22;
//
// configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
// configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
// configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
// configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
// Set configuration changed and set to not hold the configuration
ResponseStatus rs = e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
c = e220ttl.getConfiguration();
// It's important get configuration pointer before all other operation
configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters(configuration);
c.close();
}
void loop() {
}
void printParameters(struct Configuration configuration) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX);
Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX);
Serial.println(F(" "));
Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription());
Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription());
Serial.println(F(" "));
Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting());
Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable());
Serial.println(F(" "));
Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());
Serial.println("----------------------------------------");
}
void printModuleInformation(struct ModuleInformation moduleInformation) {
Serial.println("----------------------------------------");
Serial.print(F("HEAD: ")); Serial.print(moduleInformation.COMMAND, HEX);Serial.print(" ");Serial.print(moduleInformation.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(moduleInformation.LENGHT, DEC);
Serial.print(F("Model no.: ")); Serial.println(moduleInformation.model, HEX);
Serial.print(F("Version : ")); Serial.println(moduleInformation.version, HEX);
Serial.print(F("Features : ")); Serial.println(moduleInformation.features, HEX);
Serial.println("----------------------------------------");
}
Ecco il risultato sulla console
Success
1
----------------------------------------
HEAD : C1 0 8
AddH : 0
AddL : 3
Chan : 23 -> 433MHz
SpeedParityBit : 0 -> 8N1 (Default)
SpeedUARTDatte : 11 -> 9600bps (default)
SpeedAirDataRate : 10 -> 2.4kbps (default)
OptionSubPacketSett: 0 -> 200bytes (default)
OptionTranPower : 0 -> 22dBm (Default)
OptionRSSIAmbientNo: 0 -> Disabled (default)
TransModeWORPeriod : 11 -> 2000ms (default)
TransModeEnableLBT : 0 -> Disabled (default)
TransModeEnableRSSI: 1 -> Enabled
TransModeFixedTrans: 0 -> Transparent transmission (default)
----------------------------------------
Success
1
Success
1
----------------------------------------
HEAD : C1 0 8
AddH : 0
AddL : 3
Chan : 23 -> 433MHz
SpeedParityBit : 0 -> 8N1 (Default)
SpeedUARTDatte : 11 -> 9600bps (default)
SpeedAirDataRate : 10 -> 2.4kbps (default)
OptionSubPacketSett: 0 -> 200bytes (default)
OptionTranPower : 0 -> 22dBm (Default)
OptionRSSIAmbientNo: 0 -> Disabled (default)
TransModeWORPeriod : 11 -> 2000ms (default)
TransModeEnableLBT : 0 -> Disabled (default)
TransModeEnableRSSI: 0 -> Disabled (default)
TransModeFixedTrans: 0 -> Transparent transmission (default)
----------------------------------------
La libreria è abbastanza semplice, ma nel prossimo capitolo testeremo varie opzioni del dispositivo.
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)