Cómo usar el módulo Bluetooth HC-05 con Arduino paso a paso
Conectaste el módulo, el LED parpadea, el móvil lo encuentra, pero no llega ni un carácter al monitor serie. O peor: llega basura.

Conectaste el módulo, el LED parpadea, el móvil lo encuentra, pero no llega ni un carácter al monitor serie. O peor: llega basura. Es la experiencia más común la primera vez que alguien usa el módulo Bluetooth HC-05 con Arduino, y casi siempre se debe a tres detalles: la velocidad en baudios, el nivel de voltaje del pin RX y el modo en el que arranca el módulo.
En esta guía vamos paso a paso: cómo conectar el Bluetooth HC-05 con Arduino sin dañarlo, cómo emparejarlo con un móvil Android, cómo escribir un programa sencillo para encender un LED desde el teléfono y cómo cambiar el nombre y la contraseña con comandos AT. En el taller hemos montado unos quince proyectos con este módulo, desde un coche a control remoto hasta un registrador de temperatura, y los errores siempre se repiten.
Qué es el HC-05 y qué necesitas
El HC-05 es un módulo Bluetooth clásico (versión 2.0 con perfil de puerto serie, SPP) que se comporta como un cable serie invisible. Lo que Arduino envía por su puerto serie llega al móvil, y lo que el móvil envía llega a Arduino. Tiene un alcance real de unos 10 metros en interior y cuesta entre 4 y 8 euros.
Un detalle importante antes de comprar: el HC-05 usa Bluetooth clásico, no Bluetooth de baja energía. Funciona con Android y con ordenadores, pero no con iPhone. Si necesitas compatibilidad con iOS, busca un módulo BLE como el HM-10.
Material para esta guía:
- Arduino Uno o Nano.
- Módulo HC-05 en placa adaptadora de 6 pines (EN, VCC, GND, TXD, RXD, STATE).
- Una resistencia de 1 kΩ y otra de 2 kΩ para el divisor de voltaje.
- Un LED con resistencia de 220 Ω.
- Protoboard, cables y un móvil Android.
Cómo conectar el Bluetooth HC-05 con Arduino
La placa adaptadora acepta entre 3,6 y 6 V en VCC, así que puedes alimentarla con los 5 V de Arduino. Las líneas de datos son otra historia: el chip trabaja a 3,3 V y su pin RXD no está pensado para recibir 5 V de forma continua.
| Pin HC-05 | Conexión en Arduino | Nota |
|---|---|---|
| VCC | 5V | La placa adaptadora regula a 3,3 V |
| GND | GND | Masa común obligatoria |
| TXD | Pin 10 | Directo, 3,3 V es suficiente para Arduino |
| RXD | Pin 11 a través de divisor | 1 kΩ desde el pin 11, 2 kΩ a GND, el punto medio al RXD |
| EN o KEY | Sin conectar | Solo para entrar en modo AT |
El divisor reduce los 5 V del pin 11 a unos 3,3 V. Muchos tutoriales lo omiten y el módulo funciona durante semanas, pero nosotros hemos visto dos HC-05 dejar de responder por ello. Por dos resistencias de céntimos, merece la pena.
Usamos los pines 10 y 11 con la librería SoftwareSerial para dejar libres los pines 0 y 1, que Arduino usa para cargar programas y para el monitor serie. Si conectas el módulo a 0 y 1, la carga del programa fallará mientras esté conectado.
Programa para encender un LED desde el móvil
La lógica del programa es corta. Explicamos cada parte para que puedas escribirla sin copiar a ciegas:
- Incluye la librería SoftwareSerial y crea un puerto llamado bt en los pines 10 (RX) y 11 (TX).
- En setup, inicia el monitor serie con Serial.begin(9600), el puerto Bluetooth con bt.begin(9600) y define el pin 13 como salida.
- En loop, comprueba si bt.available() es mayor que cero. Si lo es, lee un carácter con bt.read().
- Si el carácter es '1', pon el pin 13 en HIGH. Si es '0', ponlo en LOW. Imprime el carácter recibido en el monitor serie para depurar.
La velocidad de 9600 baudios es la configuración de fábrica del HC-05 en modo de datos. Si usas otra, verás símbolos extraños o nada.
Emparejar el HC-05 con Android
- Alimenta el circuito. El LED del módulo parpadea rápido, unas dos veces por segundo, lo que indica que espera conexión.
- En el móvil, abre Ajustes, Bluetooth, y busca dispositivos. Aparecerá como HC-05.
- Introduce el PIN 1234. En algunos módulos es 0000.
- Instala una aplicación de terminal Bluetooth serie y conéctate al HC-05. El LED pasará a dos destellos cortos cada pocos segundos.
- Envía 1 y el LED del pin 13 se encenderá. Envía 0 y se apagará.
Una vez que esto funciona, puedes cambiar el LED por un relé y controlar una lámpara. Si lo haces, usa un módulo relé con optoacoplador y no toques nunca la parte de 230 V con el circuito enchufado.
Cambiar nombre y contraseña con comandos AT
Para configurar el módulo hay que arrancarlo en modo AT. Mantén pulsado el pequeño botón de la placa (o conecta EN a 3,3 V) mientras le das alimentación. El LED parpadeará lento, una vez cada dos segundos. En este modo la velocidad es 38400 baudios, no 9600, así que cambia bt.begin a 38400 y escribe un programa puente que copie lo que llega del monitor serie al módulo y viceversa.
En el monitor serie, elige "Ambos NL y CR" y prueba estos comandos:
- AT responde OK si todo va bien.
- AT+NAME=Taller01 cambia el nombre visible.
- AT+PSWD="4821" cambia el PIN (en algunas versiones del firmware se escribe sin comillas).
- AT+UART=9600,0,0 fija la velocidad del modo de datos.
Desconecta y vuelve a alimentar sin pulsar el botón para volver al modo normal.
Lo que muchos tutoriales recomiendan y no conviene
Es habitual leer que basta con conectar TXD y RXD directamente a los pines 0 y 1 porque "es más simple y no necesita librerías". Discrepo. Es más simple solo durante cinco minutos. Después tendrás que desconectar el módulo cada vez que subas el programa, no podrás usar el monitor serie para depurar y, sin divisor, estarás metiendo 5 V en un pin de 3,3 V. Usar SoftwareSerial en dos pines libres te ahorra horas de confusión.
La excepción es si necesitas velocidades altas, por encima de 57600 baudios. SoftwareSerial no es fiable a esas velocidades en un Uno. Para ese caso, una placa con varios puertos serie, como el Arduino Mega, es mejor solución.
Problemas frecuentes y soluciones
- Llegan caracteres raros: la velocidad no coincide. Prueba 9600 en modo datos y 38400 en modo AT.
- Los comandos AT no responden: el monitor serie no envía fin de línea, o el módulo no arrancó en modo AT.
- El móvil no encuentra el módulo: comprueba que el LED parpadea rápido y que no está ya conectado a otro dispositivo.
- Se desconecta al activar un motor: caída de tensión. Alimenta los motores aparte y une las masas.
Si te gustan estos montajes, prueba a combinar el HC-05 con la estación meteorológica casera o con el sensor ultrasónico HC-SR04 con Arduino para enviar medidas al móvil.
Preguntas frecuentes
¿Cuál es la contraseña por defecto del HC-05?
La contraseña de fábrica suele ser 1234, aunque algunos módulos vienen con 0000. Puedes cambiarla en modo AT con el comando AT+PSWD. Anota la nueva antes de desconectar.
¿El HC-05 funciona con iPhone?
No. El HC-05 usa Bluetooth clásico con perfil serie, que iOS no permite a aplicaciones normales. Para iPhone necesitas un módulo Bluetooth de baja energía, como el HM-10. Con Android y ordenadores funciona sin problema.
¿Qué diferencia hay entre el HC-05 y el HC-06?
El HC-05 puede funcionar como maestro o esclavo, mientras que el HC-06 solo funciona como esclavo. El HC-05 tiene más comandos AT y un pin para entrar en modo de configuración. Para controlar un proyecto desde el móvil, cualquiera de los dos sirve.
More in Proyectos
Proyectos
Cómo controlar una tira LED WS2812B con Arduino
Conectas la tira, cargas el ejemplo y los LED parpadean en colores aleatorios, o se encienden solo los tres primeros, o no pasa...
Proyectos
Termómetro con Arduino y sensor DS18B20 paso a paso
Quieres saber la temperatura real del agua de un acuario, de una nevera vieja o de la habitación donde duerme el servidor, y el...
Proyectos
Cómo usar un sensor PIR con Arduino para detectar movimiento
Conectaste el módulo de movimiento, cargaste el código de ejemplo y el LED se queda encendido todo el tiempo, o se dispara solo...