Componente · Comunicazione
Modulo Bluetooth HC-05
HC-05 aggiunge comunicazione seriale Bluetooth a un robot: abbinalo al telefono per guidarlo o inviare dati con gli stessi pin TX/RX del collegamento cablato.
Che cos’è
HC-05 è il modo più semplice di rendere un robot wireless. È un modulo Bluetooth che si comporta come un cavo seriale senza cavo: il microcontrollore legge e scrive byte sui pin TX/RX esattamente come farebbe via USB, ma l’altra estremità è un telefono o un portatile abbinato via Bluetooth. Invia F da un’app sul telefono e il robot avanza: niente Wi-Fi, niente rete, niente account.
Come funziona
HC-05 implementa il Serial Port Profile (SPP) di Bluetooth. Una volta abbinato, tutto ciò che il modulo riceve via aria compare sul pin TX e tutto ciò che invii al pin RX viene trasmesso via aria al dispositivo abbinato. Il codice usa semplicemente la porta seriale, Serial.read() / Serial.print(), e il collegamento wireless resta invisibile. La configurazione (nome, baud, ruolo master/slave) avviene tramite comandi AT in una modalità comando separata, ma per la maggior parte dei robot le impostazioni predefinite funzionano senza modifiche.
Quando usarlo
Scegli un HC-05 quando vuoi comandare o monitorare un robot senza un cavo:
- Robot controllati dal telefono — un’app Bluetooth invia comandi di movimento che il robot legge sulla porta seriale e trasforma in controllo dei motori.
- Telemetria dal vivo — trasmetti i valori dei sensori o l’odometria a un portatile mentre il robot è in funzione.
- Regolazione wireless — modifica i parametri al volo invece di riprogrammare il microcontrollore.
Se il robot usa già un ESP32, non ti serve HC-05: ESP32 ha Bluetooth e Wi-Fi integrati. HC-05 è il componente aggiuntivo che porta la stessa capacità wireless a un Arduino Uno.
Cablaggio e problemi comuni
- Incrocia le linee seriali: TX del modulo → RX della scheda, RX del modulo → TX della scheda. L’inversione è la causa #1 del «non si connette».
- Riduci il pin RX a 3.3 V quando usi una scheda a 5 V come Uno.
- Libera la porta seriale hardware durante il caricamento del codice, oppure usa una coppia di pin seriali software: il modulo e il programmatore USB non possono condividere l’unico UART hardware dell’Uno.
- Prima esegui l’abbinamento (il PIN è solitamente 1234/0000); il LED integrato mostra lo stato della connessione.
Piedinatura
| Pin | Nome | Funzione |
|---|---|---|
| 1 | EN / KEY |
Mantenuto HIGH all’accensione per entrare in modalità comando AT |
| 2 | VCC |
3.6–6 V. La scheda di sviluppo regola internamente la tensione a 3.3 V |
| 3 | GND |
Terra |
| 4 | TXD |
Il modulo trasmette. Va al RX del microcontrollore |
| 5 | RXD |
Il modulo riceve. Logica a 3.3 V: riduci un segnale a 5 V |
| 6 | STATE |
HIGH quando è collegato un dispositivo. Davvero utile, quasi sempre ignorato |
Il pin STATE meriterebbe maggiore attenzione. Un robot che lo legge sa quando il telefono è
uscito dalla portata: la differenza tra fermarsi in sicurezza e sbattere contro un muro
mentre attende un comando che non arriverà mai.
Collegamento a un Arduino
I due errori qui spiegano la maggior parte delle segnalazioni «non si connette».
| HC-05 | Arduino Uno | Nota |
|---|---|---|
| VCC | 5 V | Il regolatore integrato lo gestisce |
| GND | GND | |
| TXD | Pin 10 (SoftwareSerial RX) | TX del modulo → RX della scheda. Incrociali |
| RXD | Pin 11 tramite partitore (SoftwareSerial TX) | TX della scheda → RX del modulo, tramite partitore 2:1 |
| EN | Lascia aperto | Necessario solo per la modalità AT |
| STATE | Qualsiasi pin digitale | Controllo facoltativo della connessione |
Incrocia le linee seriali
TX trasmette, RX riceve. Se due dispositivi trasmettono entrambi sul collegamento che hai creato, non ottengono nulla senza errori: il modulo si abbina correttamente, il LED diventa fisso e non passa mai alcun dato. TX del modulo va al RX della scheda. RX del modulo va al TX della scheda.
Riduci la linea RX
RXD è un ingresso a 3.3 V e Arduino Uno emette 5 V. Servono due resistori:
Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
│
2 kΩ
│
GND
TXD non richiede un partitore nella direzione opposta: l’uscita a 3.3 V del modulo supera la
soglia alta a 3.0 V dell’Uno.
Non usare i pin 0 e 1
L’Uno dispone di un solo UART hardware, già occupato dal programmatore USB. Collega il
modulo lì: i caricamenti falliranno mentre è connesso e l’uscita del monitor seriale finirà
sul modulo e il debug diventerà impossibile. Usa SoftwareSerial su altri due pin.
Codice minimo funzionante
#include <SoftwareSerial.h>
SoftwareSerial bt(10, 11); // RX (from module TX), TX (to module RX)
const int STATE_PIN = 8;
void setup() {
Serial.begin(115200); // USB, for debugging
bt.begin(9600); // HC-05 default in data mode
pinMode(STATE_PIN, INPUT);
}
void loop() {
// Lose the link, stop the robot. Do this before reading commands.
if (digitalRead(STATE_PIN) == LOW) { stopMotors(); }
if (bt.available()) {
char c = bt.read();
switch (c) {
case 'F': driveForward(); break;
case 'B': driveBackward(); break;
case 'L': turnLeft(); break;
case 'R': turnRight(); break;
case 'S': stopMotors(); break;
}
Serial.print("cmd: "); Serial.println(c); // echo to USB for debugging
}
}
Il controllo della connessione all’inizio del loop è la parte che quasi tutti i tutorial omette, ed è quella che impedisce una fuga incontrollata. La portata Bluetooth è di circa 10 m e i muri la riducono nettamente; un robot che continua a eseguire l’ultimo comando dopo la disconnessione proseguirà finché non colpisce qualcosa.
Modalità comando AT
Cambiare nome, velocità in baud o PIN del modulo richiede la modalità AT, a cui si accede seguendo una sequenza specifica che il modulo non rende affatto ovvia.
- Spegni il modulo.
- Mantieni
ENHIGH (oppure tieni premuto il piccolo pulsante, se la scheda ne ha uno). - Accendilo mentre
ENè mantenuto. - Ora il LED lampeggia lentamente, all’incirca una volta ogni due secondi, anziché rapidamente.
- Comunica con lui a 38400 baud, non a 9600, usando sia il carattere di nuova riga sia il ritorno a capo.
AT -> OK
AT+NAME=LineBot -> OK set the name shown when pairing
AT+PSWD="1234" -> OK set the pairing PIN (quotes on newer firmware)
AT+UART=115200,0,0 -> OK data-mode baud rate
AT+ROLE=0 -> OK 0 = slave (normal), 1 = master
AT+ADDR? -> +ADDR the module's own address
Due aspetti importanti: la modalità AT è sempre a 38400, indipendentemente dal baud impostato per la modalità dati, e la frequenza di lampeggiamento del LED è l’unico indicatore affidabile che ti trovi dentro. Il lampeggiamento rapido indica la modalità dati e i comandi AT verranno semplicemente trasmessi via aria al dispositivo abbinato.
HC-05 o HC-06?
Sono identici e vengono venduti come intercambiabili, ma c’è una differenza reale.
| HC-05 | HC-06 | |
|---|---|---|
| Ruolo | Master oppure slave | Solo slave |
| Può avviare una connessione | Sì | No |
| Modalità AT | Tramite pin EN, 38400 |
In qualsiasi momento quando non è abbinato, alla velocità dei dati |
| Prezzo | Leggermente più alto | Leggermente più basso |
Se il modulo deve soltanto accettare una connessione da un telefono, HC-06 va bene. Se vuoi che due robot comunichino tra loro, oppure che un robot si connetta a un modulo invece di attendere che venga collegato, ti serve il ruolo master di HC-05.
Risoluzione dei problemi
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Si abbina, ma non passa alcun dato | TX/RX non incrociati | TX del modulo → RX della scheda, RX del modulo → TX della scheda |
| Caratteri illeggibili | Baud non corrispondenti | Entrambe le estremità a 9600 oppure stesso valore su entrambe |
| I caricamenti falliscono mentre è collegato | Modulo sui pin 0/1 | Spostalo sui pin SoftwareSerial |
| I comandi AT non fanno nulla | Non è davvero in modalità AT | Mantieni EN durante l’accensione; verifica il lampeggiamento lento |
| La modalità AT non dà risposta | Stai usando il baud dei dati | La modalità AT è sempre a 38400 |
| Non si abbina | PIN errato | Prova 1234 e poi 0000 |
| Si disconnette a pochi metri | Portata di Classe 2 e muri | Previsto; usa il pin STATE per fermarti in sicurezza |
| Il robot continua a muoversi dopo la disconnessione | Nessun controllo del collegamento | Leggi STATE e fermati quando è LOW |
| Funziona con l’alimentazione USB, non con la batteria | Caduta di tensione | Le raffiche di trasmissione radio richiedono una tensione a 5 V stabile |
HC-05 o ESP32?
Se stai scegliendo i componenti anziché usare quelli che hai, questa è la decisione vera.
| HC-05 + Arduino | ESP32 | |
|---|---|---|
| Wireless | Bluetooth Classic SPP | Wi-Fi e Bluetooth, integrati |
| Hardware aggiuntivo | Un modulo, un partitore, due pin | Nessuno |
| Interfaccia di controllo | Un flusso seriale di byte | Una pagina web servita dal robot stesso |
| Portata | ~10 m | ~50 m via Wi-Fi oppure ovunque ci sia una rete |
| App sul telefono necessaria | Sì, un terminale Bluetooth generico | No, qualsiasi browser |
| Valore didattico | Protocolli seriali, il collegamento più semplice possibile | Reti, un argomento molto più ampio |
HC-05 è la scelta giusta quando possiedi già un Arduino e vuoi il percorso più breve verso un robot wireless. È davvero semplice: un byte dentro, un byte fuori, nessun concetto di rete. Per un progetto nuovo in cui il wireless è un requisito, ESP32 offre molto di più con meno e non richiede componenti aggiuntivi; inoltre un robot che serve la propria pagina di controllo non richiede l’installazione di un’app sui telefoni.
Esplora il grafo
Usato in queste costruzioni
Progetti, percorsi di apprendimento e simulatori che includono Modulo Bluetooth HC-05.
Confronto
Alternative
Domande
FAQ su Modulo Bluetooth HC-05
Che cos'è un HC-05?
HC-05 è un modulo Bluetooth che trasforma una connessione wireless in un semplice collegamento seriale (UART). Per il tuo microcontrollore è identico a un cavo seriale cablato: leggi e scrivi byte su TX/RX, ma l'altra estremità è il telefono o il PC tramite Bluetooth. È il modo più semplice di controllare un robot wireless.
Come colleghi un HC-05 a un Arduino?
Alimenta VCC e GND, poi incrocia le linee seriali: TX del modulo verso RX di Arduino e RX del modulo verso TX di Arduino. Poiché il pin RX di HC-05 è a 3.3 V, riduci i 5 V del TX di Arduino con un partitore di tensione. Ora tutto ciò che stampi sulla porta seriale raggiunge wireless il telefono abbinato, e viceversa.
Qual è la portata di HC-05?
Circa 10 metri in linea di vista: è un dispositivo Bluetooth di Classe 2. Muri e interferenze la riducono. Bastano abbondantemente per guidare un robot in una stanza dal telefono, ma per il controllo a lungo raggio devi passare al Wi-Fi o a una radio dedicata.
Come abbini i moduli HC-05?
Per abbinare il modulo a un telefono, accendilo, apri le impostazioni Bluetooth del telefono, seleziona HC-05 e inserisci il PIN (di solito 1234 oppure 0000). Per abbinare due moduli HC-05, imposta uno come master e l'altro come slave con i comandi AT, quindi associali tramite indirizzo.
Come programmi HC-05?
HC-05 ha due modalità. In modalità dati trasmette semplicemente i byte seriali. Per cambiare nome, velocità in baud o ruolo master/slave, mettilo in modalità comando AT: mantieni alto il pin EN/KEY all'accensione e invia i comandi AT sulla porta seriale.
Per approfondire