Salve, sto cercando di fare esperienza con il bluetooth, ho collegato TX e RX alle seriale 3 di arduino mega, il tx del modulo al pin 17 RX di mega, RX del modulo, tramite resistenze, al pin 16 TX di mega.
Per comunicare col modulo ho usato l'app per android Serial Bluetooth. Dall'app mi collego al modulo e la luce rossa rimane fissa. Scrivo una parola nell'app e premendo invio dovrebbe apparire scritta sul monitor seriale del pc, ma non accade.
In cosa sbaglio?
String message = "";
char incomingChar;
int comando_letto = 0;
void setup() {
Serial3.begin(9600);
Serial.begin(9600);
}
void loop() {
if (Serial3.available()){ // Se la porta seriale contiene un carattere
char incomingChar = Serial3.read(); // lo immagazzina nella variabile
if (incomingChar != '\n'){ // Se il carattere è diverso da invio
message += String(incomingChar); // Aggiunge il carattere al precedente
}
if (incomingChar == '\n') comando_letto = 1;
}
if (message !="" && comando_letto==1){
Serial.print(message);
comando_letto = 0;
message="";
}
delay(20);
}
Non è che vanno scambiati Tx e Rx?... Bisogna vedere che cosa intendono per Tx e Rx da una parte e dall'altra. Per Arduino Tx è uscita, ma per il modulo probabilmente Tx è il segnale da trasmettere e Rx è il segnale ricevuto! Mi sembra di ricordare che mi sia proprio capitato così!
Ennessima bojata ... fosse solo per il fatto che la collegano alla seriale HW ... che 90 volte su 100 NON funziona (problema di livelli di tensione che la vera seriale richiede). Vai a cercare le decine di thread sull'argomento qui sul forum
Boh! Io ricordo che mi è capitato! Come puoi escludere che qualche produttore faccia proprio così?
Per quanto riguarda la seriale HW, forse il problema è che c'è collegata già l'interfaccia USB, che viene a trovarsi in parallelo.
NON ci credo ... i produttori fanni i moduli HC-05/06 tutti uguali da anni ... e, spesso, ci mettono anche il disegnino delle freccette con il verso dei dati.
Probabile ... comunque, che non vada su 0 e 1, è cosa nota
Per il collegamento del pin RX del modulo (che è quello che ha problemi) Io ho sempre messo un piccola partitore per abbassare i 5V a circa 3V o dintorni
Con "tramite resistenze" immagino (spero) che tu intenda il classico partitore con resistenze R e 2R (es. 5k e 10k) per portare TX di Arduino, che è a 5V, ai 3.3V che richiede il modulo:
Ricorda però che l'HC-06, che sinceramente non ho mai usato, è il "fratello minore" dell'HC-05: leggo che ha minori comandi AT disponibili, non può fare da master, e resta sempre in modalità AT se non è presente una connessione Bluetooth attiva.
Qui qualcosa non mi torna. Sugli HC-05 il LED non resta acceso fisso ma lampeggia velocemente se è acceso e pronto a connettersi, 2 lampeggi veloci ogni 5 secondi se è connesso il Bluetooth, e 1 ogni 2 secondi se è in AT mode.
Prova ad usare questo codice, che dovrebbe replicare via seriale la comunicazione Bluetooth:
#include <SoftwareSerial.h>
#define Rxpin 2 // Tx per Bluetooth Rx per Arduino
#define Txpin 3 // Rx per Bluetooth Tx per Arduino
char BluetoothBuffer;
char SerialBuffer;
SoftwareSerial Bluetooth(Rxpin, Txpin);
void setup() {
Serial.begin(9600);
Bluetooth.begin(9600);
}
void loop() {
if (Bluetooth.available() > 0) {
BluetoothBuffer = Bluetooth.read();
Serial.print(BluetoothBuffer);
}
if (Serial.available() > 0) {
SerialBuffer = Serial.read();
Bluetooth.print(SerialBuffer);
}
}
PS: comunque si, per quanto ne so vanno incrociati i segnali, TX del Bluetooth all'RX di Arduino e viceversa.
EDIT: il codice che ho postato usa la SoftwareSerial sui pin 2 e 3, quindi se vuoi provarlo sul tuo devi usare la Serial3 invece della SoftwareSerial. Ma visto che comunque lavori a 9600, per sicurezza una prova con la SoftwareSerial la farei comunque (ovviamente spostando il modulo dai pin 16/17 a 2/3...). ;-)
Appunto, normalmente si fa quello ... ma se non ce lo conferma, possiamo dire poco.
La paura mia è che ci sia la solita incompatibilità di livelli con le vere seriali hardware, che, sui livelli LOW ed HIGH, sono ... un poco più permalose dei pin di GPIO usati dalle emulazioni software (con le quali funziona nel 100% dei casi) ...
Si, ma anche li, NON è cosa furba ... specie su schede nuove in cui fai decadere la garanzia ...
... sulla UNO usi i pin 8 e 9, sempre con la stessa libreria o usi il 10 ed 11 con la pessima SoftwareSerial
Esatto, a 9600 ... è lentissima e, peggio, tiene disabilitati gli interrupt per tempi veramente eccessivi ... prova quella che ho indicato e vedrai la differenza
Ah, sì! L'idea è ottima per non correre rischi con i moduli acquistati e messi da parte! Devo farla! Giusto l'altro giorno stavo mettendo resistenze smd tagliando piste su un provapile cinese per fare la taratura!