Home › Forum › Le librerie ospitate nel sito › EBYTE E32 dispositivi LoRa UART sx1278/sx1276. › E32 433T30D – Problemi di configurazione e trasmissione
- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno fa da
Renzo Mischianti.
-
AutorePost
-
-
2 Maggio 2024 alle 11:53 #30670
Buongiorno, sono nuovo del forum quindi mi presento.
Sono Daniele, appassionato di elettronica e microcontrollori da circa un paio di anni, ancora alle prime armi. Insegno in una scuola superiore e mi diletto con Arduino per progetti scolastici e personali, ad ogni modo senza scopo di lucro. Di formazione sono laureato in fisica con qualche anno di esperienza di programmazione nel mondo dei database.
Mi sto affacciando ora al mondo della trasmissione dati via radio e sono finito su questo fantastico spazio in cui trovo che sia tutto molto dettagliato, complimenti!
Ho qualche domanda sulla configurazione e sul trasferimento dati con la scheda sopra citata E32 433T30D.
Ho seguito tutti i passi indicati in questo sito per il cablaggio e per la configurazione, ho ancora un po’ di problemi di trasferimento e di comprensione del codice.
Domanda sul cablaggio: io ho collegato tutti i pin della scheda LORA come indicato nei vari schemi di collegamento, con resistenze di pull up sui pin RX e TX. Ho quindi collegato i pin M0, M1 e AUX direttamente alle porte GPIO di Arduino, rispettivamente su 7, 6 e 5. Ho quindi richiamato i pin di riferimento nel costruttore nel seguente modo:
LoRa_E32 e32ttl(2, 3, 5, 7, 6);
Quando si parla di gestire i valori di M0 e M1 via codice, io ho pensato di impostarli aggiungendo una define dei due pin e portando a “HIGH” o “LOW” i pin di riferimento direttamente da codice per impostare le varie mode, nel seguente modo:
#define M0PIN 7
#define M1PIN 6
pinMode(M0PIN, OUTPUT);
pinMode(M1PIN, OUTPUT);
digitalWrite(M0PIN, HIGH);
digitalWrite(M1PIN, HIGH);
Mi chiedo se è corretto impostare le varie “mode” della scheda in questo modo, nell’esempio riportato sopra sarei in modalità sleep.
Devo portare a HIGH anche il pin di AUX?Per quanto riguarda la trasmissione in transparent mode, riesco a ricevere il messaggio dall’Arduino ricevente, ma con caratteri indecifrabili. Ad esempio se invio il messaggio “Ciao“, nel monitor seriale del ricevente ottengo caratteri del tipo “ÿ@ÿ“. Ho provato a cercare online e non ho capito quale potrebbe essere il problema.
Domanda in merito alla trasmissione in fixed transmission.
- Dal manuale tecnico del modulo Lora leggo che in Mode 3 (M0=M1=HIGH), la trasmissione e l’invio dei dati risulta N/A.
- Nelle guide presenti sul sito leggo che per la trasmissione in fixed mode devo impostare M0=M1=HIGH
Non capisco quindi: in modalità fixed point to point, come devono essere impostati i pin M0 e M1?
Nel tutorial leggo di replicare la seguente condizione per il dispositivo che invia:
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0;
configuration.ADDH = 1;
configuration.CHAN = 2;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
e la seguente per il dispositivo che riceve:
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0;
configuration.ADDH = 3;
configuration.CHAN = 4;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
Tali impostazioni devo impostarle con il codice di configuration setup o direttamente dallo sketch che uso per inviare/ricevere i dati?
La domanda mi sorge perché vedo che nella parte iniziale degli sketch di invio/ricezione dati c’è una parte di configurazione di ADDH, ADDL e CHAN, quindi mi sembra ridondante far girare prima il configuration setup e poi il codice che invia/riceve perché la configurazione verrebbe sovrascritta dal secondo codice.
Domanda sui canali di invio/ricezione.
Nell’esempio riportato nel tutorial per il codice di invio, si dice di usare il seguente (invio solo un estratto):
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0x01;
configuration.ADDH = 0x00;
configuration.CHAN = 0x04;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
printParameters(configuration);
// ---------------------------
}
// The loop function is called in an endless loop
void loop()
{
delay(2000);
Serial.println("Send message to 00 03 04");
ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 0x04, "Message to 00 03 04 device");
Serial.println(rs.getResponseDescription());
Mi sembra di capire che qui sto impostando l’indirizzo del trasmettitore su 01 00 04 e sto inviando un messaggio all’indirizzo 00 03 04.
Nell’esempio per il codice del ricevente vedo che si imposta quanto segue:
ResponseStructContainer c;
c = e32ttl.getConfiguration();
Configuration configuration = *(Configuration*) c.data;
configuration.ADDL = 0x03;
configuration.ADDH = 0x00;
configuration.CHAN = 0x04;
configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION;
e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
printParameters(configuration);
// ---------------------------
Serial.println();
Serial.println("Start listening!");
}
Qua mi sembra di capire che imposto l’indirizzo del ricevente su 03 00 04.
Se invio il messaggio verso 00 03 04, non dovrei avere la stessa impostazione di ADDH, ADDL e CHAN nel codice del ricevente? Per quale motivo ADDH, ADDL non coincidono nella configurazione del ricevente con l’indirizzo al quale sto inviando il messaggio nel codice del trasmettitore?
In ogni caso, anche cambiando gli indirizzi di invio/ricezione non riesco a ricevere dati. Nel monitor seriale vedo solo il messaggio “Start listening” ma non ricevo mai nulla, infatti anche facendo una print di e32ttl.available(), questa vale sempre 0, quindi non entra nel loop di ricezione.
Ho controllato i cablaggi varie volte e non capisco cosa può esserci che non vada.
Ultima domanda: nel codice vedo spesso questo commento:
// After set configuration comment set M0 and M1 to low
// and reboot if you directly set HIGH M0 and M1 to program
Non capisco come usare questa informazione.
Mi scuso per le troppe domande ma sto lavorando a un progetto scolastico per il quale questa parte di invio dati è fondamentale ma non so bene come muovermi per risolvere i problemi.
Grazie in anticipo della disponibilità e buona giornata!
Daniele 🙂
-
9 Maggio 2024 alle 19:00 #30708
Ciao Daniele,
il tuo messaggio era finito in spam, lo vedo solo ora.
Il problema dei caratteri non corretti potrebbe essere causato da un’errata configurazione del dispositivo o dal solito problema di corrente non sufficiente.
I pinMode dei pin dell’E32 non sono necessari lascia fare alla libreria.
Per quanto riguarda M0 e M1, ti puoi affidare alla libreria che se ne occupa senza fare nulla.La configurazione la puoi impostare sullo stesso sketch, ma ti conviene usare un sketch a parte, tanto poi usando
WRITE_CFG_PWR_DWN_SAVE
rimane memorizzato sull’E32.Se imposti
ADDL ADDH e CHAN 0 1 4 sul config dell’inviante
e
ADDL ADDH e CHAN 0 2 4 sul config del riceventel’inviante dovrà usare un comando tipo
ResponseStatus rs = e32ttl.sendFixedMessage(0, 2, 4, "Message to 00 02 04 device");
Ciao Renzo
-
22 Maggio 2024 alle 10:18 #30751
Buongiorno Renzo,
Grazie molte per la risposta, questa volta sono arrivato in ritardo io 🙂
Ho risolto il problema dei caratteri strani, mea culpa 🙂 Questo succede solo quando trasmittente e ricevente sono collegati allo stesso PC, su porte seriali diverse. Se apro il seriale di chi riceve, ricevo i messaggi ma con questi caratteri strani.
Se collego trasmittente e ricevente a due PC diversi non c’è nessun problema di caratteri strani, quindi riesco a inviare e ricevere messaggi con successo, in modalità trasparente!
Purtroppo ho avuto dei problemi di distanza di trasmissione con l’antenna ricevente, credo di dover utilizzare una trasmittente omnidirezionale e una ricevente unidirezionale, per aumentarne l’efficienza (almeno in campo aperto).
Nel codice che ho usato io fino a oggi ho impostato i pin da codice in modo da gestire la modalità di trasmissione, adesso proverò senza specificare nulla, in modo da far gestire tutto alla libreria. Nei prossimi giorni mi dedico ad altre prove per invio in fixed mode 🙂
Grazie molte del supporto e dei tuoi fantastici tutorial!
Daniele
-
-
23 Maggio 2024 alle 22:30 #30752
Ciao Daniele,
grazie per il feedback, credo che le informazioni che hai postato saranno utili sicuramente a qualcuno.
Ciao Renzo
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.