Corso di LoRa - Configurazione board E200
Table of Contents
Impostazioni base
La porzione del seguente codice si basa sull'utilizzo delle librerie dal sito di Renzo Mischianti e permettono di definire un oggetto di tipo LoRa per la configurazione e l'utilizzo. Inoltre le tabelle seguenti sono sempre estrapolate dal predetto sito.
#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 Nano 33 IoT ------------- // LoRa_E220 e220ttl(&Serial1, 2, 4, 6); // RX AUX M0 M1 // ------------------------------------------------- // ------------- Arduino MKR WiFi 1010 ------------- // LoRa_E220 e220ttl(&Serial1, 0, 2, 4); // RX AUX M0 M1 // ------------------------------------------------- // ---------- esp32 pins -------------- // LoRa_E220 e220ttl(&Serial2, 15, 21, 19); // RX 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 // ------------------------------------- // ---------- Raspberry PI Pico pins -------------- // LoRa_E220 e220ttl(&Serial2, 2, 10, 11); // RX AUX M0 M1 // ------------------------------------- // ---------------- STM32 -------------------- //HardwareSerial Serial2(USART2); // PA3 (RX) PA2 (TX) //LoRa_E220 e220ttl(&Serial2, PA0, PB0, PB10); // RX AUX M0 M1 // ------------------------------------------------- // Startup all pins and UART e220ttl.begin(); ResponseStructContainer c; c = e220ttl.getConfiguration(); // It's important get configuration pointer before all other operation Configuration config = *(Configuration*) c.data;
Basic configuration option
Indirizzo
Il valore delle delle due parti dell'indirizzo puo' essere in decimale o esadecimale.
- parte bassa indirizzo
config.ADDL = 0x00;
- parte alta indirizzo
config.ADDH = 0x01;
Canale
Il valore puo' essere in decimale o esadecimale.
config.CHAN = 0x00;
Impostazioni permanenti
Per rendere permenenti le impostazioni utilizzare la costante WRITE_CFG_PWR_DWN_SAVE
altrimenti utilizzare la costante WRITE_CFG_PWR_DWN_LOSE
.
... Serial2.setPins(shell::myPIN["TX"], shell::myPIN["RX"]); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX LoRa_E220 e220ttl(&Serial2, shell::myPIN["AUX"], shell::myPIN["M0"], shell::myPIN["M1"]); e220ttl.begin(); ... ResponseStatus rs = e220ttl.setConfiguration(config, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code);
Figure 1: Tabella delle opzioni di base
SPEED
Le costanti indicate nelle seguenti tabelle sono certamente valide con l'uso delle librerie di Renzo Mischianti. Di seguito la definizione di Velocita' in bound :
\begin{align} {7.3728 \,\mathrm{MHz} \over 16} = 460,800 \text{baud} \\ \\ {7.3728 \,\mathrm{MHz} \over 64} = 115,200 \text{baud} \end{align}Velocita' di trasmissione Metodo config.SPED.air
Imposta la velocita' del trasmettitore
Figure 2: Tabella della velocita' di trasmisisone
Velocita' di trasmissione della UART Metodo config.SPED.uartBaudRate
Imposta la velocita' di trasmisisone della velocita' della porta UART
Figure 3: Tabella dei valori della velocita' della porta UART
Parita' della UART Metodo config.SPED.uartParity
Imposta la parita' della porta UART
Figure 4: Tabella dei valori della parita'
OPTION
Lunghezza del pacchetto config.OPTION.subPacketSetting
Questa è la lunghezza massima del pacchetto. Quando i dati inviati dall’utente sono inferiori alla lunghezza del sottopacchetto, l’uscita seriale del ricevente appare come un’uscita continua. Se i dati sono meno della dimensione verrà inviato in pacchetto.
Figure 5: valori della variabile Sub packet setting lunghezza del pacchetto
Gestione del rumore config.OPTION.RSSIAmbientNoise
Questo comando può abilitare/disabilitare il tipo di gestione di RSSI. Prestare attenzione non è il parametro RSSI nel messaggio.
Quando abilitati, i comandi C0, C1, C2, C3 possono essere inviati in modalità di trasmissione o in modalità di trasmissione WOR per leggere il registro. Registro 0x00: RSSI rumore ambientale attuale Registro 0X01: RSSI quando i dati sono stati ricevuti l’ultima volta.
Figure 6: Valori di RSSI Abilita rumore ambientale
Potenza di trasmissione config.OPTION.transmissionPower
Puoi modificare questo insieme di costanti applicando una definizione in questo modo:
#define E220_22 // default value without set Applicabile per E220 con 22dBm come potenza massima.
#define E220_30 // Applicable for E220 with 30dBm as max power.
La trasmissione a bassa potenza non è consigliata a causa della sua bassa efficienza di alimentazione.
Figure 7: Tabella delle costanti della potenza
TRANSMISSIONMODE
Abilita RSSI config.OPTION.RSSIAmbientNoise
Quando abilitato, il modulo riceve dati wireless e seguirà un byte di forza RSSI dopo l’uscita tramite la porta seriale TXD
Figure 8: Tabella dei valori RSSI
Modo di trasmissione config.TRANSMISSION_MODE.fixedTransmission
Modalità di trasmissione: i primi tre byte del frame di dati di ciascun utente possono essere utilizzati come indirizzo alto/basso e canale in modalità di trasmissione fissa. Il modulo cambia indirizzo e canale quando viene trasmesso. E tornerà all’impostazione originale dopo aver completato il processo.
Figure 9: Tabella delle modalita' di trasmissione della board LoRa
Monitorare i dati prima della trasmissione config.TRANSMISSION_MODE.enableLBT
Se abilitato, i dati wireless verranno monitorati prima di essere trasmessi, evitando in una certa misura le interferenze, ma potrebbero causare ritardi nei dati.
Figure 10: Tabella dei valori ammessi per il parametro
Ciclo WOR (Wake on Radio) config.TRANSMISSION_MODE.WORPeriod
Se il WOR sta trasmettendo: dopo che il ricevitore WOR ha ricevuto i dati wireless e li ha emessi tramite la porta seriale, attenderà 1000 ms prima di immettere nuovamente il WOR. Gli utenti possono inserire i dati della porta seriale e restituirli via wireless durante questo periodo. Ogni byte seriale verrà aggiornato per 1000 ms. Gli utenti devono trasmettere il primo byte entro 1000 ms.
Periodo T = (1 + WOR) * 500 ms, massimo 4000 ms, minimo 500 ms Più lungo è il periodo dell’intervallo di monitoraggio WOR, minore è il consumo energetico medio, ma maggiore è il ritardo dei dati Sia il trasmettitore che il ricevitore devono essere gli stessi (molto importante).
Figure 11: Tabella dei valori ammessi per il parametro WOR
Esempio di utilizzo dei valori
// ----------------------- FIXED RECEIVER ----------------------- configuration.ADDL = 0x03; // puo' assumere un valore decimale configuration.ADDL = 3; configuration.ADDH = 0x00; // puo' assumere un valore decimale configuration.NETID = 0x00; // puo' assumere un valore decimale 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_240_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.enableRepeater = REPEATER_DISABLED; configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;