Sensore Bluetooth hc - 05

Salve, tempo fa ho acquistato un modulo bluetooth hc-05 (http://www.ebay.it/…/HC-05-modulo-Bluetooth-T…/330928828354…) ma non riesco in alcun modo a configuarlo. Ho seguito varie guide ma non riesco ad accendere un led.
Per esempio ho provato questo programma:

int LED= 12; 
char input;
void setup() 
{ 
Serial.begin(9600); 
pinMode(LED, OUTPUT); 
Serial.println(">> START<<"); 
}
void loop() 
{ 
if(Serial.available()>0) 
{ 
input= Serial.read(); 
if(input=='1') 
{ 
Serial.println("ON"); 
digitalWrite(LED, HIGH); 
delay(2000); 
} 
else if(input=='0') 
{ 
Serial.println("OFF"); 
digitalWrite(LED, LOW); 
delay(2000); 
} 
else 
{ 
Serial.println("NO INPUT"); 
Serial.println(input); 
} 
} 
}

Ovviamente ho collegato rx con il pin 0 e tx con 1. Il problema è che con un app qualsiasi mi riseva hc-05 ma quando provo ad inviare qualcosa non succede nulla. Qualcuno sa aiutarmi?

In conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More → Modify) il tuo post e racchiudi il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra), poi …

… NON puoi usare i pin 0 ed 1 se usi il monitor seriale (… a parte che con gli HC-05 e sempre bene usare la SoftwareSerial perché la maggior parte da problemi sui pin della vera seriale) dato che va in conflitto il HC-05 e il convertitore seriale <-> USB con cui ti colleghi al PC.

Usa la SoftwareSerial (… consiglio i pin 10 RX e 11 TX) e sistema il tuo programma.

Guglielmo

Ho riscritto il programma quasi del tutto utilizzando la softwareSerial ma non va lo stesso.

#include <SoftwareSerial.h>  //Includiamo la libreria per la gestione delle istruzioni di utilizzo del modulo bluetooth

const int rxpin = 10;  //Andiamo ad assegnare al pin 2 l’indirizzo di ricezione dati (e lo colleghiamo al pin TXD del modulo)
const int txpin = 11;  //Assegnamo invece al pin 3 l’indirizzo di trasmissione dati (collegandolo al pin RXD del nostro componente
const int led = 13;

SoftwareSerial bluetooth(rxpin, txpin);  //Assegnamo ad un nome (bluetooth) i suoi pin di ricezione e trasmissione, per facilitarci la scrittura del codice

void setup(){
Serial.begin(38400);  //Inizializziamo l’interfaccia seriale al baud rate dell’AT-mode
bluetooth.begin(38400);  //Inizializziamo l’interfaccia del modulo bluetooth sempre al baud rate riferito alla modalità AT
pinMode(led, OUTPUT);
}

void loop(){
if(bluetooth.available()){  //Se il bluetooth riceve qualche dato
char c = bluetooth.read();  //Il dato viene posto in una variabile di tipo char, così da essere adatta sia a lettere che a numeri
Serial.write(c);  //Si scrive sul monitor seriale i dati presi dalla variabile, così da poterli osservare
if (c == 'a') {
  digitalWrite(led,HIGH);
}
else if (c == 'b')
  digitalWrite(led, LOW);
if(Serial.available()){  //Se invece il serial monitor riceve un dato da inviare
char c = Serial.read();  //La variabile c viene memorizzata e letta dal monitor seriale
bluetooth.write(c);  //Il dato viene inviato al bluetooth perchè sia elaborato e quindi trasmesso
}
}
}

Non capisco perché imposti la velocità per la modalità “AT” che è quella che si usa per “configurare” il modulo, NON per usarlo … e tu lo stai semplicemente usando !

La velocità di default del HC-05, nell’uso normale, è di 9600 baud … il 38400 si usa solo per inviare i “comandi” di configurazione in AT mode tenendo il pin KEY “HIGH” … ma normalmente questo non ti serve.

Guarda gli allegati.

Guglielmo

HC-05 datasheet 201104 revised.pdf (634 KB)

HC-05 AT Commamd.pdf (83.7 KB)

Ho tolto le serial.begin, ma non cambia nulla. È possibile che sia uscito difettoso il modulo?

No, non devi togliere la Serial.begin() ... le devi impostare entrambe (Serial e SoftwareSerial) per 9600 baud ...

Guglielmo

Ho impostato le comunicazioni a 9600 baud ma niente.

#include <SoftwareSerial.h>  //Includiamo la libreria per la gestione delle istruzioni di utilizzo del modulo bluetooth

const int rxpin = 10;  //Andiamo ad assegnare al pin 2 l’indirizzo di ricezione dati (e lo colleghiamo al pin TXD del modulo)
const int txpin = 11;  //Assegnamo invece al pin 3 l’indirizzo di trasmissione dati (collegandolo al pin RXD del nostro componente
const int led = 13;

SoftwareSerial bluetooth(rxpin, txpin);  //Assegnamo ad un nome (bluetooth) i suoi pin di ricezione e trasmissione, per facilitarci la scrittura del codice

void setup(){
Serial.begin(9600);  //Inizializziamo l’interfaccia seriale al baud rate dell’AT-mode
bluetooth.begin(9600);  //Inizializziamo l’interfaccia del modulo bluetooth sempre al baud rate riferito alla modalità AT
pinMode(led, OUTPUT);
}

void loop(){
if(bluetooth.available()){  //Se il bluetooth riceve qualche dato
char c = bluetooth.read();  //Il dato viene posto in una variabile di tipo char, così da essere adatta sia a lettere che a numeri
Serial.write(c);  //Si scrive sul monitor seriale i dati presi dalla variabile, così da poterli osservare
if (c == 'a') {
  digitalWrite(led,HIGH);
}
else if (c == 'b')
  digitalWrite(led, LOW);
if(Serial.available()){  //Se invece il serial monitor riceve un dato da inviare
char c = Serial.read();  //La variabile c viene memorizzata e letta dal monitor seriale
bluetooth.write(c);  //Il dato viene inviato al bluetooth perchè sia elaborato e quindi trasmesso
}
}
}

Guarda, per tagliare la testa al toro, ti do un programmino, ampiamente collaudato, che permette di trasmettere e ricevere via HC-05 per test :

#include <SoftwareSerial.h>

#define  SS_RX 10            // RX PIN to receive  data
#define  SS_TX 11            // TX PIN to transmit data

SoftwareSerial ssSerial(SS_RX, SS_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  ssSerial.begin(9600);      // Initialize SoftwareSerial port
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
}

void loop()
{
  if (ssSerial.available() > 0) Serial.write(ssSerial.read());
  if (Serial.available() > 0) ssSerial.write(Serial.read());
}

Colleghi :

HC-05 TX pin —> Arduino RX pin (10)
HC-05 RX pin <— Arduino TX pin (11)

e quello che scrivi sul monitor seriale esce da bluetooth mentre quello che arriva sul bluetooth lo vedi sul monitor seriale.

Così verifichi che quel modulo funzioni correttamente.

Guglielmo

Solo ho risolto e non vorrei dire come ho fatto perchè provo quasi vergogna ahah.. Io collegavo RX di hc-05 su RX di arduino e TX di hc-05 su TX di arduino ahah per questo non andava. Grazie mille dell'aiuto

Teodoro777: Io collegavo RX di hc-05 su RX di arduino e TX di hc-05 su TX di arduino ahah per questo non andava.

Ahahahahahahaha ... una bella svista ;)

Guglielmo