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.

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.
| Caratteristica | Valore |
|---|---|
| Versione Bluetooth | 2.0 + EDR (classico, SPP) |
| Portata | ~10 m in campo aperto |
| Tensione di alimentazione | 3,6–6 V (la scheda del modulo ha un regolatore) |
| Livello logico | 3,3 V |
| Velocità predefinita | 9600 baud (38400 in modalità AT) |
| PIN predefinito | 1234 o 0000 |
| Ruolo | Master e slave |
HC-05, HC-06 e HM-10 a confronto
| Modulo | Bluetooth | Ruolo | Pin | iPhone |
|---|---|---|---|---|
| HC-05 | 2.0 classico | Master e slave | 6 | Non funziona |
| HC-06 | 2.0 classico | Solo slave | 4 | Non funziona |
| HM-10 | 4.0 BLE | Master e slave | 6 | Funziona |

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-05 | Funzione | Arduino Uno |
|---|---|---|
| EN (KEY) | Ingresso in modalità AT | Non collegato (3,3 V per la modalità AT) |
| VCC | Alimentazione | 5V |
| GND | Massa | GND |
| TXD | Uscita dati del modulo | D10 (RX di SoftwareSerial) |
| RXD | Ingresso dati del modulo (3,3 V) | D11, tramite un partitore da 1 kΩ / 2 kΩ |
| STATE | HIGH quando è connesso | Non collegato, o a un pin di ingresso se serve |
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:
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:
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:
| Comando | Funzione |
|---|---|
| AT | Test di connessione, risponde OK |
| AT+NAME=BlueGrays | Cambia il nome visibile del modulo |
| AT+PSWD="4321" | Cambia il PIN (senza virgolette nelle versioni vecchie) |
| AT+UART=9600,0,0 | Imposta la velocità in modalità dati |
| AT+ROLE=0 | Lo imposta come slave (con 1 come master) |
| AT+VERSION? | Mostra la versione del firmware |
| AT+ORGL | Ripristina le impostazioni di fabbrica |
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):
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.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Auto controllata via Bluetooth con L298N
Progetto di auto robot 2WD (due motori, quattro ruote) che può essere controllata dal telefono con Arduino e il modulo HC-05 Bluetooth. Un totale di quattro ruote sono azionate simultaneamente collega

Robot che evita gli ostacoli
Che ne dite di costruire un veicolo intelligente che trova la propria strada? L'Obstacle Avoiding Robot scruta costantemente l'ambiente circostante grazie al sensore a ultrasuoni posto davanti a lui.
Altri articoli
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.

