4.5
(2)

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.