Italian BluetoothAdmin ->AsyncStreams ->arduino

zenlab

Member
Licensed User
Longtime User
ciao,
sto cercando di finalizzare delle comunicazioni con il bluetooth seriale da un android ad un esp32...
il problema è che se mando una stringa via B4A ad arduino, quello che arriva è sempre diverso da quanto scrivo sull'arduino....per spiegarmi meglio:
in b4a
B4X:
dim msg as String = "CIAO"
AStream.Write(msg.GetBytes("utf8"))

Code:
String testo = SerialBT.readString();
testo.trim();
String verifica = "CIAO";

Serial.println(testo); // ="CIAO" (senza virgolette)

if (verifica == testo) //restituisce sempre FALSE
// verifica.Length restituisce 4
// testo.Length restituisce 7

facendo un if (testo == ciccio) arduino restituisce sempre false anche se in console di arduino se stampo quanto arriva via bt ho sempre CIAO
facendo un verifica.lenght mi da 4, mandando la stringa CIAO da android, su arduino ricevo la stringa "CIAO" ma con 3 caratteri in più....
spero di essermi spiegato bene....:D
 
Come fa la funzione SerialBT.readstring() a conoscere la fine della stringa ricevuta?
 
Last edited:
in realtà è una funzione in arduino dedicata....
poi, se uso una console seriale bluetooth collegata ad arduino e mando la stringa CIAO, la comparazione passa (verifica == testo) restituisce true....
quindi sembrerebbe essere proprio la funzione AStream.Write di b4a che manda qualcosa che ad arduino non piace.....ma non saprei proprio cosa
 
ho usato quello della chat bluetooth di erel...facendo modifiche qua e là all'esigenza
 
e questi 3 caratteri in più cosa sono ??
Potrebbe essere un problema di CrLf e/o un carattere Ctrl+Z di fine stringa ???
 
Potrebbe essere che B4A AStream sia in modalità prefix. Non è facile da identificare, perché stiamo indovinando quali modifiche sono state fatte al codice di esempio.
 
Last edited:
oggi torno in ufficio e mi copio il codice cosi vi posso mandare qualcosa di decente su cui indagare?
 
oggi torno in ufficio e mi copio il codice ?
Scusate, pensavo che visto che anche voi stavate lavorando alla soluzione del problema, avreste avuto il codice sorgente con voi durante la conversazione. ✌
 
allego il file del progetto con b4a...è ovviamente un po' più complesso di quanto scritto nel primo post....poi magari vedo di crearne uno giusto di prova....
 

Attachments

Code:
Public Sub SendMessage (msg As String)
    CallSub2(Main, "updateLog","Invio Dati in corso...")

    '''AStream.Write(msg.GetBytes("utf8"))
    '''sostituito dal seguente codice

    Dim Temp() As Byte = msg.GetBytes("utf8")
    AStream.Write(Temp())

    Dim TempLog As String = "tx " & Temp.Length & ":"
    For I = 0 to Temp.Length - 1
        TempLog = TempLog & " " & Temp(I)
    Next
    TempLog = TempLog & " """ & msg & """"
    Log(TempLog)
End Sub
 
Code:
String testo = SerialBT.readString();

Serial.printf("rx %d \:", strlen(testo));
Serial.println(testo);

testo.trim();
 
Oooh, it's easy. When it gets enough it simply drops the connection ?

Traduco, così evito di essere ripreso:
Oooh, facile. Quando ne ha abbastanza butta giù la connessione
 
Bè...che dire....ho messo in piedi la modifica consigliata e funziona tutto alla perfezione :) :) :)
il log rilasciato da b4a è il seguente:
tx 4: 67 73 65 79 "CIAO"
Prometto di indagare meglio e aggiornare il post per il futuro...ma intanto GRAZIE 1000
 
Mi chiedo ancora come BTSerial.readstring sappia quando arriva alla fine.
in realtà non ho indagato molto in quanto è una libreria dedicata della Heltec....credo ci pensi la libreria a sapere quando arriva la fine....
 
Back
Top