Componente · Comunicaciones
HC-05 Bluetooth Module
El HC-05 convierte cualquier puerto UART de microcontrolador en un enlace Bluetooth SPP para telemetría, depuración y control remoto desde el móvil.
Qué es
El HC-05 es la forma más sencilla de hacer que un robot sea inalámbrico. Es un módulo
Bluetooth que se comporta como un cable serie sin cable: tu microcontrolador lee y escribe
bytes por sus pines TX/RX exactamente igual que lo haría por USB, pero el otro extremo es un
teléfono u portátil emparejado por Bluetooth. Envía una F desde una app del teléfono y tu
robot avanza: sin Wi-Fi, sin red, sin cuentas.
Cómo funciona
El HC-05 implementa el Serial Port Profile (SPP) de Bluetooth. Una vez emparejado, todo lo
que el módulo recibe por el aire aparece en su pin TX, y todo lo que envías a su pin RX
sale por el aire hacia el dispositivo emparejado. Tu código simplemente usa el puerto serie —
Serial.read() / Serial.print()— y el enlace inalámbrico es invisible. La configuración
(nombre, velocidad, rol maestro/esclavo) se hace con comandos AT en un modo de comandos aparte,
pero para la mayoría de los robots los valores por defecto funcionan tal cual.
Cuándo usarlo
Recurre a un HC-05 cuando quieras mandar órdenes o vigilar un robot sin tether:
- Robots controlados desde el móvil: una app Bluetooth envía órdenes de marcha que el robot lee por serie y convierte en control de motores.
- Telemetría en vivo: devuelve valores de sensores u odometría a un portátil mientras el robot se ejecuta.
- Ajuste inalámbrico: modifica parámetros sobre la marcha en lugar de volver a grabar.
Si el robot ya usa un ESP32, no necesitas un HC-05: el ESP32 ya trae Bluetooth y Wi-Fi integrados. El HC-05 es el añadido que le da a un Arduino Uno el mismo truco inalámbrico.
Cableado y errores comunes
- Cruza las líneas de serie: TX del módulo → RX de la placa, RX del módulo → TX de la placa. Invirtirlas es la causa número uno de «no se conecta».
- Divide el pin RX para bajarlo a 3,3 V desde una placa de 5 V como el Uno.
- Libera el puerto serie por hardware mientras grabas código, o usa un par de pines de software: el módulo y el programador USB no pueden compartir el único UART de hardware del Uno.
- Empareja primero (el PIN suele ser 1234/0000); el LED de a bordo muestra el estado de conexión.
Patillaje
| Pin | Nombre | Qué hace |
|---|---|---|
| 1 | EN / KEY |
Mantenerlo en HIGH en el encendido para entrar en modo de comandos AT |
| 2 | VCC |
3.6–6 V. La placa reguladora lleva internamente los 3.3 V |
| 3 | GND |
Masa |
| 4 | TXD |
El módulo transmite. Va al RX del microcontrolador |
| 5 | RXD |
El módulo recibe. Lógica de 3,3 V: divide una señal de 5 V |
| 6 | STATE |
HIGH cuando hay un dispositivo conectado. Realmente útil, normalmente ignorado |
El pin STATE merece más de lo que suele recibir. Un robot que lo lee sabe cuándo su teléfono se
ha salido de cobertura, que es la diferencia entre detenerse de forma segura y embestir contra una
pared esperando una orden que nunca llegará.
Cablearlo a un Arduino
Los dos errores de aquí explican la mayoría de los informes de «no se conecta».
| HC-05 | Arduino Uno | Nota |
|---|---|---|
| VCC | 5 V | El regulador de a bordo lo resuelve |
| GND | GND | |
| TXD | Pin 10 (RX de SoftwareSerial) | TX del módulo → RX de la placa. Crúzalos |
| RXD | Pin 11 mediante divisor (TX de SoftwareSerial) | TX de la placa → RX del módulo, a través de un divisor 2:1 |
| EN | Déjalo al aire | Solo hace falta para el modo AT |
| STATE | Cualquier pin digital | Comprobación opcional de conexión |
Cruza las líneas de serie
TX habla, RX escucha. Dos dispositivos que hablen ambos por el cable que conectaste no consiguen nada, y no hay error: el módulo se empareja bien, el LED se queda fijo y no se mueve ningún dato. El TX del módulo va al RX de la placa. El RX del módulo va al TX de la placa.
Divide la línea de RX
RXD es una entrada de 3,3 V y un Arduino Uno maneja 5 V. Dos resistencias:
Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
│
2 kΩ
│
GND
TXD no necesita divisor en la otra dirección: la salida de 3,3 V del módulo supera el umbral
de alto de 3,0 V del Uno.
No uses los pines 0 y 1
El Uno tiene un único UART de hardware y el programador USB ya lo tiene. Conecta el módulo ahí y
las cargas fallarán mientras esté conectado, la salida del monitor serie se irá al módulo y la
depuración se vuelve imposible. Usa SoftwareSerial en otros dos pines.
Código mínimo funcional
#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
}
}
La comprobación de conexión al principio del bucle es la parte que la mayoría de los tutoriales omite, y es la parte que detiene una fuga. El alcance de Bluetooth es de unos 10 m y las paredes lo recortan mucho; un robot que siga ejecutando su última orden después de que se caiga el enlace seguirá avanzando hasta que golpee algo.
Modo de comandos AT
Cambiar el nombre, la velocidad o el PIN del módulo requiere el modo AT, y entrar en él tiene una secuencia concreta que nada del módulo hace evidente.
- Apaga el módulo.
- Mantén
ENen HIGH (o pulsa y mantén el botón pequeño, si tu placa tiene uno). - Enciéndelo mientras
ENsiga pulsado. - El LED parpadea ahora despacio, más o menos una vez cada dos segundos, en lugar de deprisa.
- Háblale a 38400 baudios, no a 9600, con salto de línea y retorno de carro.
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
Dos detalles que confunden: el modo AT es siempre 38400 sea cual sea la velocidad de datos que hayas puesto, y la frecuencia de parpadeo del LED es la única indicación fiable de que estás en él. Un parpadeo rápido significa modo de datos, y tus comandos AT se emitirán simplemente por el aire hacia lo que esté emparejado.
¿HC-05 o HC-06?
Se parecen idénticos y se venden indistintamente, y hay una diferencia real.
| HC-05 | HC-06 | |
|---|---|---|
| Rol | Maestro o esclavo | Solo esclavo |
| Puede iniciar una conexión | Sí | No |
| Modo AT | Mediante el pin EN, a 38400 |
En cualquier momento mientras no esté emparejado, a la velocidad de datos |
| Precio | Algo más caro | Algo más barato |
Si el módulo solo tiene que aceptar alguna vez una conexión desde un teléfono, un HC-06 vale. Si alguna vez quieres que dos robots hablen entre sí, o que un robot se conecte a un módulo en lugar de esperar a que lo conecten, necesitas el rol de maestro del HC-05.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| Se empareja, pero no se mueve ningún dato | TX/RX sin cruzar | TX del módulo → RX de la placa, RX del módulo → TX de la placa |
| Caracteres basura | Velocidad distinta | Ambos extremos a 9600, o pon los dos en el mismo valor |
| Las cargas fallan mientras está conectado | Módulo en los pines 0/1 | Pásalo a pines de SoftwareSerial |
| Los comandos AT no hacen nada | No estás realmente en modo AT | Mantén EN durante el encendido; busca el parpadeo lento |
| El modo AT no responde | Estás usando la velocidad de datos | El modo AT es 38400, siempre |
| No se empareja | PIN incorrecto | Prueba 1234 y luego 0000 |
| Se cae a unos metros de distancia | Alcance de clase 2 más paredes | Es lo esperado; usa el pin STATE para fallar de forma segura |
| El robot sigue avanzando tras desconectarse | No hay comprobación de enlace | Lee STATE y para en LOW |
| Funciona con USB, no con batería | Caída de la alimentación | Las ráfagas de transmisión de la radio necesitan 5 V firmes |
¿HC-05 o ESP32?
Si estás eligiendo componentes en lugar de usar lo que ya tienes, esta es la decisión de verdad.
| HC-05 + Arduino | ESP32 | |
|---|---|---|
| Inalámbrico | Bluetooth Classic SPP | Wi-Fi y Bluetooth, integrados |
| Hardware adicional | Un módulo, un divisor, dos pines | Ninguno |
| Interfaz de control | Un flujo de bytes por serie | Una página web que el robot se sirve a sí mismo |
| Alcance | ~10 m | ~50 m por Wi-Fi, o cualquier sitio con red |
| App en el móvil necesaria | Sí: un terminal Bluetooth genérico | No: cualquier navegador |
| Valor formativo | Protocolos de serie, el enlace más simple posible | Redes, que es un tema mucho mayor |
El HC-05 es la respuesta correcta cuando ya tienes un Arduino y quieres el camino más corto a un robot inalámbrico. Es realmente sencillo: un byte dentro, un byte fuera, ningún concepto de red. Para un proyecto nuevo donde la wireless es un requisito, un ESP32 hace más por menos y no necesita piezas extra, y un robot que se sirve su propia página de control no necesita ninguna app instalada en el teléfono de nadie.
Explora el grafo
Se usa en estos montajes
Proyectos, rutas de aprendizaje y simuladores que incluyen HC-05 Bluetooth Module.
Comparar
Alternativas
Preguntas
Preguntas frecuentes sobre HC-05 Bluetooth Module
¿Qué es un HC-05?
El HC-05 es un módulo Bluetooth que convierte una conexión inalámbrica en un simple enlace serie (UART). Para tu microcontrolador se comporta exactamente como un cable serie —lees y escribes bytes en TX/RX—, solo que el otro extremo es tu móvil o tu PC por Bluetooth. Es la forma más fácil de controlar un robot sin cables.
¿Cómo se conecta un HC-05 a un Arduino?
Conecta VCC y GND y luego cruza las líneas serie: el TX del módulo al RX del Arduino y el RX del módulo al TX del Arduino. Como el pin RX del HC-05 es de 3.3 V, reduce los 5 V del TX del Arduino con un divisor de tensión. A partir de ahí, todo lo que imprimas por el puerto serie llega sin cables al móvil emparejado, y viceversa.
¿Qué alcance tiene el HC-05?
Unos 10 metros con visión directa: es un dispositivo Bluetooth de clase 2. Las paredes y las interferencias lo reducen. Es más que suficiente para conducir un robot por una habitación desde el móvil, pero para un control a larga distancia pasarías a Wi-Fi o a una radio dedicada.
¿Cómo se emparejan los módulos HC-05?
Para emparejarlo con un móvil, alimenta el módulo, abre los ajustes de Bluetooth del teléfono, selecciona el HC-05 e introduce el PIN (normalmente 1234 o 0000). Para emparejar dos HC-05 entre sí, configura uno como maestro y otro como esclavo con comandos AT y vincúlalos por su dirección.
¿Cómo se programa el HC-05?
El HC-05 tiene dos modos. En modo datos, simplemente deja pasar los bytes serie. Para cambiar su nombre, su velocidad en baudios o su rol de maestro/esclavo, ponlo en modo de comandos AT —mantén el pin EN/KEY en alto al encenderlo— y envía comandos AT por el puerto serie.
Lecturas adicionales