Italian BluetoothAdmin ->AsyncStreams ->arduino

zenlab

Member
Licensed 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"))
arduino:
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
 

emexes

Expert
Licensed User
Come fa la funzione SerialBT.readstring() a conoscere la fine della stringa ricevuta?
 
Last edited:

zenlab

Member
Licensed User
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
 

sirjo66

Well-Known Member
Licensed User
e questi 3 caratteri in più cosa sono ??
Potrebbe essere un problema di CrLf e/o un carattere Ctrl+Z di fine stringa ???
 

emexes

Expert
Licensed User
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:

zenlab

Member
Licensed User
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

emexes

Expert
Licensed User
BluetoothManager.bas:
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
 

emexes

Expert
Licensed User
Arduino:
String testo = SerialBT.readString();

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

testo.trim();
 

udg

Expert
Licensed User
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
 

zenlab

Member
Licensed User
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
 

zenlab

Member
Licensed User
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....
 
Top