sabato 10 gennaio 2015

Moduli Bluetooth HC-05

Moduli Bluetooth HC-05

Se vogliamo far comunicare 2 schede Arduino con moduli Bluetooth è necessario configurare i moduli in modo che possano trasmettere dati tra loro.




In particolare è necessario configurare uno di questi come MASTER e l'altro come SLAVE e per farlo possiamo utilizzare i comandi AT.
Vediamo innanzitutto come collegare il modulo bluetooth ad Arduino per metterlo nella modalità programmazione. Li collegheremo uno alla volta e li imposteremo uno come modulo MASTER e l’altro SLAVE.




Come si vede dall'immagine abbiamo connesso i PIN RX e TX ai pin 11 e 10 di Arduino in modo da lasciare liberi i PIN RX e TX di Arduino per utilizzare la connessione seriale con il PC. Per fare ciò abbiamo utilizzato la libreria SoftwareSerial che ci permette di utilizzare i pin 10 e 11 per la comunicazione con il modulo bluetooth.
Abbiamo quindi collegato il pin KEY del modulo bluetooth al pin 9 di Arduino.
Colleghiamo il PIN GND del modulo bluetooth con il PIN GND di Arduino, mentre lasciamo per un attimo scollegato il PIN Vcc.


Carichiamo quindi lo sketch seguente sul nostro Arduino.


#include <SoftwareSerial.h>


SoftwareSerial BTSerial(10, 11); // RX | TX


void setup()
{
 pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
 digitalWrite(9, HIGH);
 Serial.begin(9600);
 Serial.println("Enter AT commands:");
 BTSerial.begin(38400);  // HC-05 default speed in AT command more
}


void loop()
{


 // Keep reading from HC-05 and send to Arduino Serial Monitor
 if (BTSerial.available())
Serial.write(BTSerial.read());


 // Keep reading from Arduino Serial Monitor and send to HC-05
 if (Serial.available())
BTSerial.write(Serial.read());
}


Questo sketch ci permette di eseguire dei comandi AT sul modulo bluetooth e leggere le risposte.


Una volta caricato lo sketch su Arduino eseguiamo dei comandi AT per impostare il primo dei 2 moduli bluetooth come SLAVE:
  • apriamo il monitor seriale del programma Arduino
  • assicuriamoci che sia impostato il valore “Both NL & CR” e la velocità di connessione a 9600
  • quando resettiamo Arduino (aprendo il monitr seriale Arduino si resetta), dovremmo vedere apparire sul monitor seriale la scritta: “Enter AT commands:”
  • connettiamo il PIN Vcc del modulo bluetooth al PIN 5Vdi Arduino, dovremmo vedere il led di Arduino lampeggiare lentamente (ogni circa 2 secondi)
  • scriviamo nel monitor seriale il comando AT e premiamo INVIO (bottone Send del monitor seriale)
  • scriviamo quindi il comando AT+ROLE=0; questo configurerà il modulo bluetooth come SLAVE. Per verificare il comando appena eseguito digitiamo AT+ROLE? e dovremmo vedere restituito: +ROLE:0
  • ora eseguiamo il comando AT+BIND= e premiamo INVIO. In questo modo rimuoviamo qualunque binding esistente. Per verificare eseguiamo il comando AT+BIND? e dovremmo ottenere: +BIND:0:0:0
  • eseguiamo quindi il comando AT+ADDR? per ottenere l’indirizzo MAC del nostro modulo (avrà la forma 2837:3:92); segnamoci questo indirizzo perchè ci servirà nella programmazione del modulo master


Scolleghiamo il primo modulo bluetooth senza togliere tutti i collegamenti su Arduino in quanto ci serviranno per programmare il secondo modulo.


Per impostare il secondo modulo bluetooth eseguiamo invece i seguenti comandi:
  • apriamo il monitor seriale del programma Arduino
  • assicuriamoci che sia impostato il valore “Both NL & CR” e la velocità di connessione a 9600
  • quando resettiamo Arduino (aprendo il monitr seriale Arduino si resetta), dovremmo vedere apparire sul monitor seriale la scritta: “Enter AT commands:”
  • connettiamo il PIN Vcc del modulo bluetooth al PIN 5Vdi Arduino, dovremmo vedere il led di Arduino lampeggiare lentamente (ogni circa 2 secondi)
  • scriviamo nel monitor seriale il comando AT e premiamo INVIO (bottone Send del monitor seriale)
  • scriviamo quindi il comando AT+ROLE=1; questo configurerà il modulo bluetooth come MASTER. Per verificare il comando appena eseguito digitiamo AT+ROLE? e dovremmo vedere restituito: +ROLE:1
  • ora eseguiamo il comando AT+BIND=2837,3,92 sostituendo l’indirizzo MAC che abbiamo segnato precedentemente e premiamo INVIO. Questo forzerà il nostro modulo master a connettersi automaticamente all’altro nostro modulo. Eseguendo il comando AT+BIND? dovremmo vedere restituito 2837:3:92.


A questo punto quando accenderemo i 2 moduli questi si connetteranno tra di loro indipendentemente da quale accendiamo per primo. Tutto quello che ti servirà per utilizzarli è aprire una connessione seriale e comunicare attraverso di essa.

6 commenti:

  1. Ottima guida solo che io essendo un principiante non so come aprire una connessione seriale tra i 2 moduli, e quindi comunicare. Mi potresti dire anche quest'ultimo come farlo? grazie in anticipo.

    RispondiElimina
  2. Ciao, grazie. E' sufficiente fare uno sketch in cui crei un'istanza della classe SoftwareSerial, come ad esempio:
    SoftwareSerial BTSerial(10, 11); // RX | TX
    e poi quando devi scrivere dal modulo bluetooth A al modulo bluetooth B utilizzi:
    BTSerial.write("stringa") //sostituendo a "stringa" il comando che vuoi inviare
    e sul modulo B resti in ascolto leggendo quanto arriva sulla seriale con il comando:
    if (BTSerial.available())
    String comando=BTSerial.read();

    Fammi sapere se hai problemi.
    C.

    RispondiElimina
    Risposte
    1. mi scusi, ma a me non funziona, non è per cortesia, potrebbe mettere lo sketch di arduino
      grazie

      Elimina
    2. Salve scusami se scrivo dopo tutto questo tempo. neanche a me funziona. per caso hai risolto? se e si come? grazie mille

      Elimina
  3. Complimenti per la guida !
    Seguendo le tue indicazioni, sono riuscito ad entrare in modalità AT con il modulo HC-05 e Arduino Uno. Ti segnalo che nel mio caso ci sono riuscito solo premendo il 'tastino' sulla scheda HC-05 , collegato l'alimentazione e solo dopo aver alimentato il modulo ho rilasciato il 'tastino'. Con questa sequenza di operazioni i due led presenti sull' HC-05 hanno iniziato a lampeggiare lentamente e tramite la console seriale sono riuscito ad eseguire i comandi AT. Ti segnalo questa variante. Saluti

    RispondiElimina