Arduino può comunicare con altri dispositivi via Bluetooth utilizzando il modulo HC-05 (master/slave). Permette ad Arduino di connettersi e scambiare dati con altri dispositivi come smartphone, computer o altri microcontrollori.La comunicazione Bluetooth può essere utilizzata per controllare un robot a distanza, visualizzare e memorizzare dati sul computer o sullo smartphone, per esempio.
Prequisito: Arduino Comunicazione seriale
Materiale
- Computer
- Arduino UNO x2
- Cavo USB
- Modulo Bluetooth HC-05 ZS-040 x2 (o 1x HC-05 e 1x HC-06)
- Cavi Dupont M/F
Panoramica del modulo HC-05
Il modulo Bluetooth HC-05 ha 6 pin, 2 per l’alimentazione, 2 per stabilire la connessione, 1 per entrare in modalità di configurazione e l’altro per conoscere lo stato della connessione.
- Alimentazione VCC. Tipicamente agganciato al pin 5V di Arduino.
- GGND terra. Tipicamente agganciato al pin GND di Arduino
- Pinino di ricezione RX. Tipicamente agganciato al pin di trasmissione (TX) di Arduino
- Pinino di trasmissione TX. Tipicamente agganciato al pin di ricezione (RX) di Arduino
- Lo stato è ALTO quando il modulo è collegato
- Key ou EN deve essere impostato su ALTO (3,3V) per entrare in modalità di configurazione e deve essere disconnesso per entrare in modalità di comunicazione.
La particolarità dell’HC-05 è che può essere utilizzato come modulo slave (equivalente all’HC-06) e come modulo master, il che significa che può accoppiarsi ad un altro dispositivo da solo.
Schematica per la configurazione
AVVISO :
- Utilizziamo i pin 2 e 3 di Arduino Uno. A seconda del microcontrollore, alcuni pin potrebbero non supportare la comunicazione seriale. In particolare, Arduino Mega, Micro e Leonardo. Controllare la documentazione.
- Siccome il modulo Bluetooth utilizza la logica 3.3V, si consiglia di aggiungere un divisore di tensione per ridurre la tensione di 5V da Arduino. (resistenza 1k tra pin3 e Rx; 2k Ohm tra Rx e GND).
Configurazione del modulo HC-05
Configurare il modulo HC-05 può essere interessante per verificare che sia funzionante, collegato correttamente e per modificare i suoi parametri come il suo nome (utile quando si utilizzano più moduli), il codice PIN e la velocità di comunicazione (baudrate). Soprattutto se volete usarlo come modulo master. Per permettere la configurazione, il modulo HC-05 deve essere alimentato ma non accoppiato e il pin KEY/EN deve essere impostato su HIGH prima di accendere il modulo. Quando è in modalità di configurazione il LED lampeggerà due secondi ogni due secondi.
Aprire il monitor seriale e selezionare l’opzione di fine linea “Nuova linea” e un baudrate di 9600.
Nota che HC-05 entra in modalità di configurazione con un baudrate di 38400bps.
Codice di configurazione
Il seguente codice permette di modificare e controllare i parametri utilizzando il monitor seriale e i comandi AT.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String msg;SoftwareSerial hc05(rxPin ,txPin);void setup(){ pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); Serial.println("ENTER AT Commands:"); hc05.begin(baudrate);}void loop(){ readSerialPort(); if(msg!="") hc05.println(msg); if (hc05.available()>0){ Serial.write(hc05.read()); }}void readSerialPort(){ msg=""; while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } }}
Comandi AT
Rispetto al modulo HC-06, l’HC-05 può essere utilizzato come modulo master e si possono anche controllare i parametri salvati utilizzando i comandi AT.
In generale, digitando il comando AT+<comando>? verrà richiesto il parametro salvato (es: AT+PSWD? verrà visualizzato il codice PIN del modulo). Se inserisci AT+<comando>=<Param>, puoi impostare il valore del parametro (es: AT+PWSD=0000 per modificare il codice PIN a 0000).
Ecco alcuni dei comandi AT:
- Per provare la comunicazione, inserisci AT nel monitor seriale dell’IDE Arduino. Se tutto è impostato correttamente, dovrebbe visualizzare OK.
- Per modificare il nome del modulo, inserire AT+NAME=<Param>. Il modulo dovrebbe rispondere OK (Defaut HC-05, Es: Per cambiare il nome in BTM1 inserire AT+NAME=BTM1).
- Per modificare il codice PIN, inserire AT+PSWD=<Param> . Il modulo dovrebbe rispondere OK(Default 1234 Ex: Per cambiare il PIN a 0000 inserire AT+PSWD=0000).
- AT+ROLE=<Param> per midy il ruolo del modulo come slave o master (Default 0, Ex: per cambiare il ruolo come master inserire AT+ROLE=1, come slave inserire AT+ROLE=0).
- Per modificare il baudrate, inserire AT+UART=<Param1>,<Param2>,<Param3> con i parametri di comunicazione seriale Param1, 2 e 3: baudrate, bit di stop e bit di parità rispettivamente (Per default, impostato su 9600,0,0. Es: per modificare il baudrate a 115200 inserire AT+UART=115200,0,0).
Esistono altri comandi AT per il modulo Bluetooth HC-05 che potete trovare seguendo il link.
CAUTELA: Esistono diverse versioni del modulo HC-05 e la procedura di configurazione può variare. Assicuratevi di controllare l’etichetta del modulo e la versione del firmware prima dell’uso. Per questo tutorial, abbiamo utilizzato un modulo HC-05 etichettato ZS-040 e il firmware versione 2.0-20100601.
N.B.: Se il modulo non risponde controllare il cablaggio, la conducibilità dei cavi e il baudrate.
Non esitate a lasciare un commento o a contattarci se avete problemi di configurazione del vostro modulo HC-05.
Configurazione dello slave
Per impostare il modulo come slave, potete cambiare il nome come AT+NAME=HC05-Slave e scegliere i parametri di comunicazione e il codice PIN che volete. Dovrete assicurarvi che il master e lo slave abbiano gli stessi parametri di comunicazione.
- AT ritorna OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Entrare AT+ADDR per ottenere l’indirizzo del modulo (es: +ADDR:98d3:32:21450e)
Per il modulo slave, potete anche usare un modulo HC-06
Configurazione master
Per impostare il modulo come master, dovete cambiare il ruolo e impostare lo stesso parametro di comunicazione del modulo slave.
- AT ritorna OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- L’indirizzo del modulo slave deve essere inserito nel modulo master per permettergli di apparire: AT+BIND=98d3,32,21450e (sostituire i punti “:” con la virgola “,”)
Schematica per la comunicazione
In modalità comunicazione, il pin Key/EN non è collegato.
Codice di comunicazione
Quando entrambi i moduli sono configurati, caricare i seguenti codici nelle schede Arduino collegate ai moduli. Accendere i moduli per entrare in modalità di comunicazione. Il modulo master dovrebbe connettersi al modulo slave e il LED dovrebbe lampeggiare ogni secondo.
Utilizziamo la stessa libreria SoftwareSerial.h del modulo HC-06:
- SoftwareSerial hc05(Rx,Tx) per definire i pin della porta seriale
- hc05.begin() per definire il baudrate (il valore dovrebbe essere lo stesso del vostro modulo)
- hc05.available() per testare se i dati sono disponibili nel buffer del modulo
- hc05.read() per leggere dati un byte alla volta
- hc05.print() per inviare una stringa in forma ASCII
- hc05.write() per inviare dati un byte alla volta
Codice master
#include <SoftwareSerial.h>SoftwareSerial ArduinoSlave(2,3);String answer;String msg;void setup(){Serial.begin(9600);Serial.println("ENTER Commands:");ArduinoSlave.begin(9600);}void loop(){//Read command from monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(answer!=""){Serial.print("Slave recieved : ");Serial.println(answer);answer="";}}void readSerialPort(){while (Serial.available()) {delay(10); if (Serial.available() >0) {char c = Serial.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}Serial.flush();}
Codice slave
#include <SoftwareSerial.h>SoftwareSerial ArduinoMaster(2,3);String msg;void setup(){Serial.begin(9600);ArduinoMaster.begin(9600); }void loop(){readSerialPort();// Send answer to masterif(msg!=""){Serial.print("Master sent : " );Serial.println(msg);ArduinoMaster.print(msg);msg=""; }}void readSerialPort(){while (ArduinoMaster.available()) {delay(10); if (ArduinoMaster.available() >0) {char c = ArduinoMaster.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Se si aprono entrambi i monitor seriali e si inserisce un comando nel monitor della scheda master, si dovrebbero vedere i seguenti risultati. La scheda master invia un comando che viene ricevuto e rispedito dalla scheda slave. La comunicazione funziona correttamente in entrambe le direzioni.
Se hai problemi a configurare o accoppiare i tuoi moduli Bluetooth, non esitare a contattarci o a lasciare un commento.
Applicazione
- Guida il tuo robot a distanza con il tuo smartphone
- Invia la misurazione della temperatura al tuo smartphone