Componenti · 6 min di lettura

Modulo Bluetooth HC-05: controllare Arduino dal telefono

Come si collega il modulo Bluetooth HC-05? Pin e partitore di tensione, abbinamento con il telefono, controllo di LED e relè, comandi AT, HC-05, HC-06 e HM-10 a confronto, compatibilità iPhone, ESP32 e Pico.

L'HC-05 è un modulo Bluetooth economico e molto diffuso che aggiunge la comunicazione seriale senza fili ai progetti con Arduino. Con lui puoi accendere un LED dal telefono, accendere e spegnere una lampada tramite un relè, guidare un'auto radiocomandata o inviare i dati dei sensori al telefono. In questo articolo vedrai passo passo come collegare l'HC-05 in modo corretto e sicuro, abbinarlo al telefono, scrivere i primi programmi e usare i comandi AT che modificano le impostazioni del modulo.

Modulo Bluetooth HC-05 e cavetti jumper
Modulo Bluetooth HC-05: la pista a zigzag in alto è l'antenna, a sinistra ci sono 6 pin: EN, VCC, GND, TXD, RXD e STATE.

Come funziona l'HC-05?

L'HC-05 usa il profilo SPP (Serial Port Profile) del Bluetooth classico e si comporta come un "cavo seriale senza fili". Una volta che il telefono è abbinato e connesso, ogni carattere inviato dal telefono arriva ad Arduino attraverso il pin TXD del modulo, e tutto ciò che Arduino scrive sul pin RXD va al telefono. Lato Arduino non devi sapere nulla del Bluetooth: usi Serial.print() e read() come se parlassi con il Monitor seriale.

CaratteristicaValore
Versione Bluetooth2.0 + EDR (classico, SPP)
Portata~10 m in campo aperto
Tensione di alimentazione3,6–6 V (la scheda del modulo ha un regolatore)
Livello logico3,3 V
Velocità predefinita9600 baud (38400 in modalità AT)
PIN predefinito1234 o 0000
RuoloMaster e slave

HC-05, HC-06 e HM-10 a confronto

ModuloBluetoothRuoloPiniPhone
HC-052.0 classicoMaster e slave6Non funziona
HC-062.0 classicoSolo slave4Non funziona
HM-104.0 BLEMaster e slave6Funziona
Modulo Bluetooth HC-06
Modulo Bluetooth HC-06: molto simile all'HC-05, ma con 4 pin e funziona solo come slave; per comunicare con il telefono è sufficiente.
L'HC-05 e l'HC-06 non funzionano con l'iPhone: iOS non permette alle normali app di aprire una connessione seriale Bluetooth classica. Se vuoi comunicare con un iPhone, usa un modulo BLE (Bluetooth Low Energy) come l'HM-10 oppure un ESP32 con BLE. I telefoni Android e i computer si collegano all'HC-05 senza problemi.

Pin e collegamento dell'HC-05

Il modulo si può alimentare a 5V perché sulla scheda c'è un regolatore, ma i suoi pin dati lavorano a 3,3 V. Arduino legge senza problemi il segnale a 3,3 V del pin TXD dell'HC-05. Nella direzione opposta, invece di collegare direttamente il segnale TX a 5 V di Arduino al pin RXD del modulo, usa un partitore di tensione: TX di Arduino → 1 kΩ → RXD, RXD → 2 kΩ → GND. Così su RXD arrivano circa 3,3 V.

Pin dell'HC-05FunzioneArduino Uno
EN (KEY)Ingresso in modalità ATNon collegato (3,3 V per la modalità AT)
VCCAlimentazione5V
GNDMassaGND
TXDUscita dati del moduloD10 (RX di SoftwareSerial)
RXDIngresso dati del modulo (3,3 V)D11, tramite un partitore da 1 kΩ / 2 kΩ
STATEHIGH quando è connessoNon collegato, o a un pin di ingresso se serve
Puoi collegare l'HC-05 anche ai pin 0 e 1 dell'Uno, ma quei pin servono anche per caricare il codice via USB, quindi con il modulo collegato il caricamento fallisce. Usare i pin 10 e 11 con SoftwareSerial lascia liberi sia il caricamento sia il Monitor seriale.

Stati del LED e abbinamento con il telefono

Quando alimenti il modulo, il suo LED lampeggia velocemente: significa che è in attesa di una connessione. Nelle impostazioni Bluetooth del tuo telefono Android cerca il dispositivo "HC-05" e abbinalo usando 1234 come PIN (o 0000 se non funziona). L'abbinamento da solo non apre la connessione; a questo pensa un'app di terminale seriale Bluetooth. A connessione avvenuta il LED fa due brevi lampeggi ogni 2 secondi. Se il LED resta acceso 2 secondi e spento 2 secondi, il modulo è in modalità comandi AT.

Prima comunicazione con il telefono

Il codice qui sotto trasforma Arduino in un ponte tra telefono e computer: ogni carattere che arriva dal telefono compare nel Monitor seriale, e tutto ciò che scrivi nel Monitor seriale va al telefono. È il punto di partenza migliore per provare la connessione:

Arduino (C++)
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11);   // RX, TX → HC-05 TXD, RXD
4
5void setup() {
6  Serial.begin(9600);
7  bt.begin(9600);            // veri modu hızı / data mode baud rate
8}
9
10void loop() {
11  if (bt.available()) {
12    Serial.write(bt.read());   // telefondan bilgisayara / phone to PC
13  }
14  if (Serial.available()) {
15    bt.write(Serial.read());   // bilgisayardan telefona / PC to phone
16  }
17}

Carica il codice e apri il Monitor seriale a 9600 baud. Sul telefono collegati all'HC-05 con un'app di Google Play come Serial Bluetooth Terminal e scrivi qualcosa: il testo comparirà nel Monitor seriale. Anche quello che scrivi nel Monitor seriale apparirà sul telefono. Se funziona, connessione, cablaggio e velocità sono corretti.

Controllare un LED e un relè dal telefono

Ora reagiamo ai caratteri che arrivano dal telefono: con 1 il LED si accende, con 0 si spegne. Dopo ogni comando Arduino invia anche una risposta al telefono:

Arduino (C++)
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11);   // RX, TX
4const int LED = 13;
5
6void setup() {
7  pinMode(LED, OUTPUT);
8  bt.begin(9600);
9  bt.println("Ready");
10}
11
12void loop() {
13  if (bt.available()) {
14    char c = bt.read();
15    if (c == '1') {
16      digitalWrite(LED, HIGH);   // LED'i yak / turn the LED on
17      bt.println("LED ON");
18    } else if (c == '0') {
19      digitalWrite(LED, LOW);    // LED'i söndür / turn the LED off
20      bt.println("LED OFF");
21    }
22  }
23}

Molte app Bluetooth ti permettono di assegnare ai pulsanti il carattere che vuoi, così puoi creare sul telefono un piccolo telecomando con i pulsanti "Acceso" e "Spento". Se al posto del LED colleghi un modulo relè, con lo stesso codice controlli una lampada o un ventilatore dal telefono. Inviare i caratteri F, B, L e R (avanti, indietro, sinistra e destra) a un driver motori L298N è anche la base di un'auto controllata via Bluetooth.

Impostare il modulo con i comandi AT

Puoi cambiare nome, PIN e velocità dell'HC-05 con i comandi AT. Per entrare in modalità AT, alimenta il modulo tenendo premuto il piccolo pulsante che ha sopra (oppure con il pin EN collegato a 3,3 V); il LED inizia a lampeggiare lentamente, una volta ogni 2 secondi. Nel codice ponte scrivi bt.begin(38400), scegli Both NL & CR (NL e CR) come fine riga nel Monitor seriale e invia i comandi:

ComandoFunzione
ATTest di connessione, risponde OK
AT+NAME=BlueGraysCambia il nome visibile del modulo
AT+PSWD="4321"Cambia il PIN (senza virgolette nelle versioni vecchie)
AT+UART=9600,0,0Imposta la velocità in modalità dati
AT+ROLE=0Lo imposta come slave (con 1 come master)
AT+VERSION?Mostra la versione del firmware
AT+ORGLRipristina le impostazioni di fabbrica
In alcune versioni dell'HC-05, certi comandi AT (per esempio AT+NAME) rispondono solo se tieni premuto il pulsante mentre li invii. Se AT risponde OK ma alcuni comandi restano senza risposta, riprova tenendo premuto il pulsante.

Bluetooth con ESP32 e Raspberry Pi Pico

L'ESP32 classico integra sia il Bluetooth classico sia il BLE; con la libreria BluetoothSerial ti colleghi al telefono senza bisogno dell'HC-05. L'ESP32-S3 e l'ESP32-C3 supportano invece solo il BLE. Anche il Raspberry Pi Pico W ha il Bluetooth integrato. Sul Raspberry Pi Pico standard, senza Bluetooth, colleghi l'HC-05 ai pin UART; poiché il Pico lavora a 3,3 V, questa volta non serve il partitore. Alimenta il modulo dal pin VBUS (5V):

MicroPython
1from machine import UART, Pin
2
3bt = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))   # GP0 → RXD, GP1 ← TXD
4led = Pin("LED", Pin.OUT)                           # kart üstü LED / onboard LED
5
6while True:
7    if bt.any():
8        c = bt.read(1)
9        if c == b'1':
10            led.on()
11            bt.write(b'LED ON\n')
12        elif c == b'0':
13            led.off()
14            bt.write(b'LED OFF\n')

Idee di progetti con l'HC-05

  • Auto controllata via Bluetooth: un robot guidato dal telefono con un driver L298N e due motori DC.
  • Interruttore domotico: accendi e spegni lampade e prese dal telefono con un modulo relè.
  • Lampada con selettore di colore: imposta il colore di un LED RGB con valori inviati dal telefono.
  • Display di sensori senza fili: invia la temperatura e l'umidità lette da un DHT11 al terminale del telefono.
  • Braccio robotico: controlla i servomotori con i cursori sul telefono.
  • Comunicazione tra due Arduino: imposta un HC-05 come master e l'altro come slave per scambiare dati senza fili.

Errori comuni e come risolverli

  • Il telefono non trova il modulo: stai usando un iPhone, il modulo è connesso a un altro dispositivo oppure è rimasto in modalità AT.
  • Arrivano caratteri senza senso: le velocità non coincidono; in modalità dati di solito si usa 9600, in modalità AT 38400.
  • I comandi AT non rispondono: il modulo non è in modalità AT, la velocità non è 38400 oppure come fine riga non è selezionato Both NL & CR.
  • Il codice non si carica: il modulo è collegato ai pin 0 e 1; scollegalo durante il caricamento o usa SoftwareSerial.
  • La connessione cade quando partono i motori: i motori disturbano l'alimentazione; alimentali da una fonte separata e aggiungi un condensatore all'alimentazione del modulo.
  • Il modulo si è guastato dopo un po': forse sul pin RXD sono arrivati 5 V senza partitore; usa sempre un partitore da 1 kΩ / 2 kΩ.

L'HC-05 è il modo più semplice per rendere senza fili i tuoi progetti cablati; abbinato al controllo dei motori, sei pronto per costruire il tuo primo robot radiocomandato. Nell'app BlueGrays trovi un'auto controllata via Bluetooth con L298N e un robot che evita gli ostacoli, con schemi e codice.

Domande frequenti

L'HC-05 funziona con l'iPhone?

No. iOS non permette alle normali app di aprire la connessione seriale Bluetooth classica usata da HC-05 e HC-06. Per l'iPhone devi usare un modulo BLE come l'HM-10 oppure un ESP32 con BLE.

Qual è la portata dell'HC-05?

Circa 10 metri in campo aperto. Muri, superfici metalliche e altri dispositivi wireless riducono questa distanza. In casa funziona in modo affidabile nella stessa stanza o in quella accanto.

Che differenza c'è tra HC-05 e HC-06?

Entrambi usano il Bluetooth classico. L'HC-05 può essere master o slave e ha 6 pin; l'HC-06 è solo slave e di solito ha 4 pin. Per comunicare con il telefono vanno bene tutti e due; per collegare due Arduino serve almeno un HC-05.

Qual è il PIN predefinito dell'HC-05?

Nella maggior parte dei moduli è 1234, in alcuni 0000. Puoi cambiarlo in modalità AT con il comando AT+PSWD; se non vuoi che altri controllino il tuo progetto, cambiare il PIN predefinito è una buona idea.

Posso far comunicare due Arduino con gli HC-05?

Sì. Imposta un HC-05 come master con AT+ROLE=1 e indicagli l'indirizzo dell'altro modulo con il comando AT+BIND; il secondo modulo resta slave. All'accensione il master si collega automaticamente allo slave e i due Arduino comunicano attraverso la porta seriale.

Il partitore sul pin RXD è davvero necessario?

È consigliato. I pin dati dell'HC-05 lavorano a 3,3 V; molti moduli sopportano i 5 V per un po', ma con il tempo possono guastarsi. Un semplice partitore con resistenze da 1 kΩ e 2 kΩ elimina questo rischio. Il pin TXD non ha bisogno del partitore.

Vedi tutti i progetti

Impara passo passo a collegare in sicurezza il modulo Bluetooth HC-05 ad Arduino, abbinarlo al telefono, controllare un LED e un relè dal telefono e cambiarne nome e PIN con i comandi AT.

Modulo Bluetooth HC-05: controllare Arduino dal telefono | BlueGrays