Ricevere dati via bluetooth

ciao
ho la necessità di fare una app che sia in grado di ricevere un semplice dato ("s") via bluetooth per poi decidere cosa far fare alla app... una volta creato il collegamento fra il bluetooth dello smartphone e il dispositivo trasmittente (arduino uno), come si fa??

grazie a tutti!

non ho ancora il trasmettitore quindi non posso testare l'app, ma ho fatto così:


puù andar bene?

Ciao Piero,
in linea di principio, sì dovrebbe funzionare.
Stai solo attento che se il tuo Android è >= 12 devi avere i permessi di BT e di Localizzazione attivi (!).
L'Arduino UNO lo connetti ad un HC05 per farlo trasmettere su BT ?
Se cerchi sul forum trovi che ci sono moltissimi esempi di connessione BT tra AI2 e Arduino con HC05, così puoi verificare passo-passo la connessione.
Oltre ai permessi di Android ci sono parecchie altre "variabili" :grinning: la connessione tra Arduino e shield (ad es. HC05) devi incrociare Tx e Rx, sull'Rx dello shield è meglio mettere un partitore resistivo per proteggerlo, dato che lavora a 3.3. V. (anche se sopravvive senza).
Il baudrate tra CPU e Shiled deve essere ovviamente lo stesso (ad es. 9600).
Attento che se usi la libreria SoftwareSerial, non funziona bene con baudrate > 38400.
nei blocchi sulla app ti consiglio di usare quelli di ricezione di text, con terminatore di stringa da parte di Arduino col carattere ASCII 0x0A (ovvero 10, o LINEFEED). Proprio ieri ho dato più o meno le stesse risposte e le trovi dettagliate qui:

[Cant receive data and count is automatic in arduino and bluetooth]

Quando ti arriva la scheda, puoi sempre provare a spedire "Hello world" con l'Arduino e vedere con un'app come Serial Bluetooth Terminal se il tuo telefono lo riceve, così verifichi che almeno la parte Arduino funziona, poi sviluppi l'app.

Ciao!

EDIT: as @Chris has said, the best way to get all the incoming characters from the BT is to wait until the last is received. This is obtained putting a -1 in the number of bytes to receive, and by sending the last character (or message) from your Arduino with a BTSerial.println("message").
The println sends a Linefeed chracater (0x0A Hex, 10 Dec) that is interpreted by AI2 as string terminator.
To show you how, I've annexed a supersimple .aia
BT_basic.aia (2.6 KB)

1 Like

A note about the "BytesAvailableToReceive" Block. It does not necessarily contain the total number of bytes - think of it as a flag that just tells you there are bytes in the buffer awaiting processing.

So the "ReceiveText" code should use math block -1, which means "receive all bytes".

NumberOfBytes

1 Like