Abbiamo notato un difetto della libreria ma non siamo sicuri sia un difetto, te lo voglio esporre.
Come prima cosa ti dico che utilizziamo gli Ebyte E220 900MHz in Transparent Transiossion con crittografia attiva e RSSI attivo.
Fino ad ora abbiamo sempre inviato comunicazioni del tipo “##D:1:2:3:4:5:6:7:8:9:10##” 26 Byte e ricevuto sempre bene.
Facendo un pò di test, abbiamo mandato un messaggio di lunghezza 116 Byte quindi “##D:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40##” e abbiamo notato che sul nodo (Arduino con tua libreria) arriva “##D:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:2” ovvero 62 Byte.
Quello che mi sono chiesto è: ma perchè ricevo solamente questi 62 Byte? La libreria l’ho impostata a ricevere e trasmettere 200 Byte quindi con il codice “configuration.OPTION.subPacketSetting = SPS_200_00;”.
Ho provato a fare un test ho estratto il modem dal nodo, che abbiamo fatto con Arduino, e l’ho letto semplicemente con un convertitore USB/UART con un programma per leggere la seriale (AccessPort ma anche IDE Arduino).
Qui arriva l’intero messaggio senza problemi. ANZI ho provato a scrivere fino a 100 nodi, ovvero “D:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99:100” che sono 296 Byte e lo riceve tutto.
Ho notato però un particolare, tenendo fissato il monitor si vede chiaramente che fa scritture differenti molto molto veloce, quindi spezzetta il messaggio in più parti.
Ad esempio ora sul nodo ricevo solamente un parte del messaggio, ovvero “##D:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:1” che sono 41 Byte.
Secondo me in qualche modo il modem intelligentemente prende il messaggio e lo spezzetta trasmettendo un pezzo alla volta ma molto molto velocemente.
Noi con la libreria effettivamente una volta che l’oggetto è aviable “e220ttl->available() > 1” leggiamo il messaggio nel buffer con il codice “ResponseContainer rc = e220ttl->receiveMessageRSSI();” e poi andiamo oltre….
Ma se fosse da metterlo in pausa e vedere se subito dopo c’è altro?
Ho fatto un test: avendo messo due cancelletti “##” a inizio e due a fine messaggio, sò quando il messaggio è arrivato tutto e quindi ho pensato, leggendo l’ultimo carattere se non è “#” rileggo il buffer con questo codice:
String input = “”;
while (e220ttl->available() > 1)
{
bool endMessage = 0;
while (!endMessage)
{
ResponseContainer rc = e220ttl->receiveMessageRSSI();
input = rc.data;
Serial.println(input);
char last = input.charAt(input.length() – 1);
Serial.print(“L’ultimo carattere: “);
Serial.println(last);
if (last == ‘#’)
{
endMessage = 1;
}
}
}
Ma mi legge solo la prima parte come vedi dal monitor seriale:
##D:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:1
L’ultimo carattere: 1
L’ultimo carattere: ␀
L’ultimo carattere: ␀
L’ultimo carattere: ␀
L’ultimo carattere: ␀
e cosi all’infinito….
In conclusione la mia domanda è: sarebbe possibile leggere tutto il messaggio come accade se metto il modem in un lettore seriale via USB?
Ciao Fabio,
ho notato anche io questo problema quando ho realizzato la libreria per raspberry pi,questo legge molto più velocemente il buffer e mi spezzettava il messaggio, li ho risolto applicando un delay di 40ms alla lettura, ma su esp32 non mi è mai capitato.
Tuttavia il nostro problema era che appena il modem svegliava l’MCU, mandavamo in sleep mode in modem e questo causava una lettura parziale del messaggio.
Ora arriva il messaggio, sveglia l’Atmega2560v, legge il buffer e poi lo mette a dormire.
Grazie
Autore
Post
Visualizzazione 1 filone di risposte
Devi essere connesso per rispondere a questo topic.
Mantenere un repository, un sito o un forum è come prendersi cura di un giardino - richiede costante attenzione e cura per farlo prosperare. Se sei un abile giardiniere (o programmatore!) e vuoi aiutarci a far fiorire il nostro sito, saremmo felici di averti nel nostro team! Cerchiamo anche scrittori talentuosi e moderatori per il nostro forum per aiutarci a far crescere la nostra comunità. Se sei interessato a unirti a noi, non esitare a contattarci per farci sapere in che modo puoi contribuire!
Sei un appassionato di elettronica o programmazione? Condividi la tua conoscenza con gli altri, scrivi un semplice tutorial o come fare un grande progetto Contattami. share_your_ideas@mischianti.org
The content displayed on this website is protected under a CC BY-NC-ND license. Visitors are prohibited from using, redistributing, or altering any content from this website for commercial purposes, including generating revenue through advertising. Any unauthorized use is a violation of the license terms and legal action may be taken against individuals or entities found to be in violation.
You must also provide the link to the source.
Per offrire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Acconsentire a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o gli ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su determinate funzionalità e funzioni.
Functional
Sempre attivo
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Per offrire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Acconsentire a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o gli ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su determinate funzionalità e funzioni.
Functional
Sempre attivo
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.