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.

Schema etichettato di un modulo Bluetooth HC-05: una scheda di sviluppo blu con un modulo radio Bluetooth protetto da uno scudo metallico e fissato agli angoli, un'antenna PCB a zigzag, un LED di stato e un connettore a 6 pin (EN, VCC, GND, TXD, RXD, STATE) lungo il bordo inferiore per il collegamento seriale.
Il modulo trasforma un collegamento Bluetooth in una semplice connessione seriale: incrocia TX/RX con il microcontrollore e apparirà come un cavo cablato. Scarica SVG

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.

  1. Spegni il modulo.
  2. Mantieni EN HIGH (oppure tieni premuto il piccolo pulsante, se la scheda ne ha uno).
  3. Accendilo mentre EN è mantenuto.
  4. Ora il LED lampeggia lentamente, all’incirca una volta ogni due secondi, anziché rapidamente.
  5. 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

Fonti