HC-06 Bluetooth Arduino

Ciao a tutti, eccomi di nuovo qui con un nuovo tutorial molto interessante che riguarda il modulo HC-06 Bluetooth. In questo articolo vi mostrer√≤ come farlo interagire con il mondo Arduino e come configurarlo ūüôā .

Video

Innanzitutto un po di introduzione:

Il modulo bluetooth HC-06 √® un modulo che permette di trasformare una porta UART\USART, pi√Ļ comunemente conosciuta come seriale, in una porta Bluetooth, generalmente con profilo SPP(Serial Port Profile), diventando cosi una seriale tramite¬†Bluetooth.

Normalmente questo dispositivo viene usato quando si vuole far comunicare un microprocessore¬†(Arduino nel nostro caso)¬†con il mondo esterno, dove il mondo esterno pu√≤ essere un Computer, uno Smartphone, un Tablet o quant’altro la tecnologia possa fornire con una connessione Bluetooth.

Non vi scrivo tutte le caratteristiche tecniche, per questo vi consiglio di consultare il datasheet.

hc06_pinout

Come vedete dall’immagine qui sopra ho acquistato una breakout del modulo.¬†Il modulo HC-06 Bluetooth si presenta con quattro pin, due per l’alimentazione (VCC, GND) e due per la comunicazione seriale con Arduino (RX, TX).

Collegamenti

HC-06   ARDUINO
VCC -> +3.3V
GND -> GND
TX -> 2
RX -> 3

 hc06_arduinoCon questo sketch visualizzerete sul monitor seriale di Arduino le stringhe di caratteri inviate al modulo bluetooth tramite uno Smartphone o un PC. Sul web esistono tantissime App in grado di inviare stringhe tramite bluetooth, per Android consiglio questa App . Mentre per iOS, purtroppo,  il modulo HC-06 non viene riconosciuto.

Sketch

// HC-06 with Arduino
// Giuseppe Caccavale
// www.giuseppecaccavale.it
#include <SoftwareSerial.h>

int rxPin = 3;
int txPin = 2;
SoftwareSerial bluetooth(rxPin, txPin);

String message; //string that stores the incoming message

void setup()
{
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
}

void loop()
{
  while(bluetooth.available()){
    message+=char(bluetooth.read());
  }
  if(!bluetooth.available())
  {
    if(message!="")
    {//if data is available
      Serial.println(message); //show the data
      message=""; //clear the data
    }
  }
  delay(5000); //delay
}

Accendiamo e spegniamo un led con il bluetooth

Ora vedremo come accendere e spegnere un led con il bluetooth. I collegamenti rimangono tali, bisogna solo aggiungere un led sul pin 13.

hc06_led

Ecco lo sketch da caricare su Arduino

Sketch

// HC-06 with Arduino and LED
// Giuseppe Caccavale
// www.giuseppecaccavale.it
#include <SoftwareSerial.h>

int rxPin = 3;
int txPin = 2;
SoftwareSerial bluetooth(rxPin, txPin);

String message; //string that stores the incoming message
const int Led = 13;

void setup()
{
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
  pinMode(Led,OUTPUT);
}

void loop()
{
  while(bluetooth.available()){
    message+=char(bluetooth.read());
  }
  if(!bluetooth.available())
  {
    if(message!="")
    {//if data is available
      if(message == "H"){
          digitalWrite(Led, HIGH);
          Serial.println("Led ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "L"){
          digitalWrite(Led, LOW);
          Serial.println("Led OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    }
  }
}

Il funzionamento √® semplice, quando il modulo bluetooth riceve il carattere H¬†l’uscita 13 viene posta su HIGH, mentre se si riceve il carattere L¬†l’uscita 13 viene posta su¬†LOW.

Come cambiare SSID e Pincode?

Se avete la necessita di cambiare il Nome (SSID) del bluetooth e il Pincode è sufficiente caricare lo sketch seguente su Arduino (utilizzando gli stessi collegamenti visti in precedenza) e utilizzare il serial monitor di Arduino per configurare il vostro HC-06.

Si possono utilizzare i seguenti comandi:

  • AT¬† -> ¬†¬†Se la comunicazione funziona il modulo risponde OK
  • AT+VERSION¬† -> ¬†Restituisce la versione del firmware
  • AT+BAUDx¬† -> ¬†Imposta il Baudrate, al posto di x mettere 1 per 1200 bps, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400,¬†7=57600, 8=115200, 9=230400, A=460800, B=921600, C=1382400
  • AT+NAMEstring¬† -> ¬†Al posto di string mettere il nome che vuoi dare al modulo (massimo 20 caratteri)
  • AT+PINxxxx¬† -> ¬†Imposta il pincode del modulo bluetooth (es.1234)
// HC-06 with Arduino
// Giuseppe Caccavale
// www.giuseppecaccavale.it
#include <SoftwareSerial.h>

int rxPin = 3;
int txPin = 2;
SoftwareSerial bluetooth(rxPin, txPin);

String message; //string that stores the incoming message

void setup()
{
  Serial.begin(9600);
  bluetooth.begin(9600);
  Serial.println("Lista dei comandi HC-06:\n");
  Serial.println("AT              Se la comunicazione funziona il modulo risponde OK");
  Serial.println("AT+VERSION      Restituisce la versione del firmware");
  Serial.println("AT+BAUDx        Imposta il Baudrate, al posto di x mettere 1 per 1200 bps, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200, 9=230400, A=460800, B=921600, C=1382400");
  Serial.println("AT+NAMEstring   Al posto di string mettere il nome che vuoi dare al modulo (massimo 20 caratteri)");
  Serial.println("AT+PINxxxx      Imposta il pincode del modulo bluetooth (es.1234)");
}
void loop()
{
  if (bluetooth.available())
  {  
    Serial.write(bluetooth.read());
  }
  if (Serial.available())
  {
    bluetooth.write(Serial.read());
  }
}

Arduino Mega

Come voi sapete Arduino Mega possiede 4 UARTs (Serial, Serial1, Serial2, Serial3) quindi utilizzando il modulo bluetooth con la Mega board si può fare a  meno della libreria SoftwareSerial.h.

Collegate il modulo HC-06 ad Arduino Mega in questo modo:

HC-06   MEGA
VCC -> +3.3V
GND -> GND
TX -> 15
RX -> 14

Sketch for MEGA board

Questo sketch ha la stessa funzione di quello che trovate ad inizio tutorial.

// HC-06 with Arduino Mega
// Giuseppe Caccavale
// www.giuseppecaccavale.it
 
String message; //string that stores the incoming message
 
void setup()
{
  Serial.begin(9600); //set baud rate
  Serial3.begin(9600); //set baud rate
}
 
void loop()
{
  while(Serial3.available()){
    message+=char(Serial3.read());
  }
  if(!Serial3.available())
  {
    if(message!="")
    {//if data is available
      Serial.println(message); //show the data
      message=""; //clear the data
    }
  }
  delay(5000); //delay
}

Lo sketch seguente ha lo scopo di far accendere e spegnere un led tramite bluetooth.

// HC-06 with Arduino MEGA and LED
// Giuseppe Caccavale
// www.giuseppecaccavale.it

String message; //string that stores the incoming message
const int Led = 13;

void setup()
{
  Serial.begin(9600); //set baud rate
  Serial3.begin(9600); //set baud rate
  pinMode(Led,OUTPUT);
}

void loop()
{
  while(Serial3.available()){
    message+=char(Serial3.read());
  }
  if(!Serial3.available())
  {
    if(message!="")
    {//if data is available
      if(message == "H"){
          digitalWrite(Led, HIGH);
          Serial.println("Led ON"); //show the data
          delay(20);
          message=""; //clear the data
       }
       else if(message == "L"){
          digitalWrite(Led, LOW);
          Serial.println("Led OFF"); //show the data
          delay(20);
          message=""; //clear the data
       }
    }
  }
}

Mentre questo è lo sketch per il cambio del PINCODE e del SSID:

// HC-06 with Arduino MEGA
// Giuseppe Caccavale
// www.giuseppecaccavale.it

String message; //string that stores the incoming message

void setup()
{
  Serial.begin(9600);
  Serial3.begin(9600);
  Serial.println("Lista dei comandi HC-06:\n");
  Serial.println("AT              Se la comunicazione funziona il modulo risponde OK");
  Serial.println("AT+VERSION      Restituisce la versione del firmware");
  Serial.println("AT+BAUDx        Imposta il Baudrate, al posto di x mettere 1 per 1200 bps, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200, 9=230400, A=460800, B=921600, C=1382400");
  Serial.println("AT+NAMEstring   Al posto di string mettere il nome che vuoi dare al modulo (massimo 20 caratteri)");
  Serial.println("AT+PINxxxx      Imposta il pincode del modulo bluetooth (es.1234)");
}
void loop()
{
  if (Serial3.available())
  {  
    Serial.write(Serial3.read());
  }
  if (Serial.available())
  {
    Serial3.write(Serial.read());
  }
}

Download archivio con tutto il progetto.

Ciao, se ti √® piaciuto il mio blog e se qualche articolo ti √® stato d\'aiuto, se te la senti e se vuoi, incentiva il mio lavoro offrendomi un caff√® o qualunque altra cosa preferisci farmi ricevere. Cercher√≤ di dare il meglio di me e di inserire articoli sempre pi√Ļ interessanti e utili ūüôā
Clicca QUI per la donazione!