Módulo Bluetooth HC-05: controla tu Arduino desde el móvil
¿Cómo se conecta el módulo Bluetooth HC-05? Pines y divisor de tensión, emparejar con el móvil, control de LED y relé, comandos AT, HC-05 frente a HC-06 y HM-10, compatibilidad con iPhone, ESP32 y Pico.
El HC-05 es un módulo Bluetooth barato y muy común que añade comunicación serie inalámbrica a los proyectos con Arduino. Con él puedes encender un LED desde el móvil, encender y apagar una lámpara con un relé, conducir un coche teledirigido o enviar datos de sensores a tu teléfono. En este artículo verás paso a paso cómo conectar el HC-05 de forma correcta y segura, emparejarlo con el móvil, escribir los primeros programas y usar los comandos AT que cambian la configuración del módulo.

¿Cómo funciona el HC-05?
El HC-05 usa el perfil SPP (Serial Port Profile) del Bluetooth clásico y se comporta como un «cable serie inalámbrico». Cuando el móvil está emparejado y conectado, cada carácter que envía el teléfono llega a Arduino por el pin TXD del módulo, y todo lo que Arduino escribe en el pin RXD va al teléfono. En el lado de Arduino no necesitas saber nada de Bluetooth: usas Serial.print() y read() como si hablaras con el Monitor Serie.
| Característica | Valor |
|---|---|
| Versión de Bluetooth | 2.0 + EDR (clásico, SPP) |
| Alcance | ~10 m en espacio abierto |
| Tensión de alimentación | 3,6–6 V (la placa del módulo lleva regulador) |
| Nivel lógico | 3,3 V |
| Velocidad por defecto | 9600 baudios (38400 en modo AT) |
| PIN por defecto | 1234 o 0000 |
| Rol | Maestro y esclavo |
Diferencias entre HC-05, HC-06 y HM-10
| Módulo | Bluetooth | Rol | Pines | iPhone |
|---|---|---|---|---|
| HC-05 | 2.0 clásico | Maestro y esclavo | 6 | No funciona |
| HC-06 | 2.0 clásico | Solo esclavo | 4 | No funciona |
| HM-10 | 4.0 BLE | Maestro y esclavo | 6 | Funciona |

Pines y conexión del HC-05
El módulo se puede alimentar a 5V porque lleva un regulador en la placa, pero sus pines de datos trabajan a 3,3 V. Arduino lee sin problemas la señal de 3,3 V del pin TXD del HC-05. En sentido contrario, en lugar de conectar directamente la señal TX de 5 V de Arduino al pin RXD del módulo, usa un divisor de tensión: TX de Arduino → 1 kΩ → RXD, RXD → 2 kΩ → GND. Así llegan unos 3,3 V a RXD.
| Pin del HC-05 | Función | Arduino Uno |
|---|---|---|
| EN (KEY) | Entrar en modo AT | Sin conectar (3,3 V para el modo AT) |
| VCC | Alimentación | 5V |
| GND | Masa | GND |
| TXD | Salida de datos del módulo | D10 (RX de SoftwareSerial) |
| RXD | Entrada de datos del módulo (3,3 V) | D11, a través de un divisor de 1 kΩ / 2 kΩ |
| STATE | HIGH cuando está conectado | Sin conectar, o a un pin de entrada si quieres |
Estados del LED y emparejamiento con el móvil
Al alimentar el módulo, su LED parpadea rápido: significa que espera una conexión. En los ajustes de Bluetooth de tu móvil Android busca el dispositivo «HC-05» y empareja usando 1234 como PIN (si no funciona, 0000). Emparejar no abre la conexión por sí solo; de eso se encarga una aplicación de terminal serie Bluetooth. Cuando hay conexión, el LED da dos destellos cortos cada 2 segundos. Si el LED está 2 segundos encendido y 2 apagado, el módulo está en modo de comandos AT.
Primera comunicación con el móvil
El código siguiente convierte Arduino en un puente entre el móvil y el ordenador: cada carácter que llega del teléfono aparece en el Monitor Serie, y todo lo que escribes en el Monitor Serie va al teléfono. Es el mejor punto de partida para probar la conexión:
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}Carga el código y abre el Monitor Serie a 9600 baudios. En el móvil, conéctate al HC-05 con una aplicación de Google Play como Serial Bluetooth Terminal y escribe algo: lo que escribas aparecerá en el Monitor Serie. Lo que escribas en el Monitor Serie también aparecerá en el móvil. Si esto funciona, la conexión, el cableado y la velocidad son correctos.
Controlar un LED y un relé desde el móvil
Ahora vamos a actuar según los caracteres que llegan del móvil: con un 1 se enciende el LED y con un 0 se apaga. Además, Arduino envía una respuesta al móvil tras cada orden:
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}Muchas aplicaciones Bluetooth permiten asignar el carácter que quieras a cada botón, así que puedes hacer en el móvil un pequeño mando con botones de «Encender» y «Apagar». Si conectas un módulo relé en lugar del LED, con el mismo código controlas una lámpara o un ventilador desde el móvil. Enviar los caracteres F, B, L y R (adelante, atrás, izquierda y derecha) a un driver de motores L298N es también la base de un coche controlado por Bluetooth.
Configurar el módulo con comandos AT
Puedes cambiar el nombre, el PIN y la velocidad del HC-05 con comandos AT. Para entrar en modo AT, alimenta el módulo mientras mantienes pulsado el pequeño botón que lleva (o con el pin EN conectado a 3,3 V); el LED empieza a parpadear despacio, una vez cada 2 segundos. En el código puente escribe bt.begin(38400), elige como fin de línea Both NL & CR (NL y CR) en el Monitor Serie y envía los comandos:
| Comando | Función |
|---|---|
| AT | Prueba de conexión, responde OK |
| AT+NAME=BlueGrays | Cambia el nombre visible del módulo |
| AT+PSWD="4321" | Cambia el PIN (sin comillas en versiones antiguas) |
| AT+UART=9600,0,0 | Ajusta la velocidad en modo datos |
| AT+ROLE=0 | Lo pone como esclavo (con 1, maestro) |
| AT+VERSION? | Muestra la versión del firmware |
| AT+ORGL | Restablece la configuración de fábrica |
Bluetooth con el ESP32 y la Raspberry Pi Pico
El ESP32 clásico integra tanto Bluetooth clásico como BLE; con la librería BluetoothSerial puedes conectarte al móvil sin necesidad de un HC-05. En cambio, el ESP32-S3 y el ESP32-C3 solo admiten BLE. La Raspberry Pi Pico W también tiene Bluetooth integrado. En la Raspberry Pi Pico estándar, sin Bluetooth, conectas el HC-05 a los pines UART; como la Pico trabaja a 3,3 V, esta vez no hace falta divisor de tensión. Alimenta el módulo desde el 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')Ideas de proyectos con el HC-05
- Coche controlado por Bluetooth: un robot que conduces desde el móvil con un driver L298N y dos motores DC.
- Interruptor domótico: enciende y apaga lámparas y enchufes desde el móvil con un módulo relé.
- Lámpara con selector de color: ajusta el color de un LED RGB con valores enviados desde el móvil.
- Pantalla de sensores inalámbrica: envía la temperatura y la humedad de un DHT11 al terminal del móvil.
- Brazo robótico: controla servomotores con deslizadores en el móvil.
- Comunicación entre dos Arduino: configura un HC-05 como maestro y el otro como esclavo para enviar datos sin cables.
Errores comunes y cómo solucionarlos
- El móvil no encuentra el módulo: usas un iPhone, el módulo está conectado a otro dispositivo o se ha quedado en modo AT.
- Llegan caracteres sin sentido: las velocidades no coinciden; en modo datos se suele usar 9600 y en modo AT, 38400.
- Los comandos AT no responden: el módulo no está en modo AT, la velocidad no es 38400 o no has elegido Both NL & CR como fin de línea.
- El programa no se carga: el módulo está conectado a los pines 0 y 1; desconéctalo al cargar o usa SoftwareSerial.
- La conexión se corta al arrancar los motores: los motores alteran la alimentación; aliméntalos desde una fuente aparte y añade un condensador a la alimentación del módulo.
- El módulo se estropeó al cabo de un tiempo: puede que llegaran 5 V al pin RXD sin divisor; usa siempre un divisor de 1 kΩ / 2 kΩ.
El HC-05 es la forma más fácil de pasar tus proyectos con cable a inalámbricos; si lo combinas con el control de motores, estarás listo para tu primer robot teledirigido. En la app BlueGrays encontrarás un coche controlado por Bluetooth con L298N y un robot que esquiva obstáculos, con esquemas y código.
Preguntas frecuentes
¿El HC-05 funciona con iPhone?
No. iOS no permite que las aplicaciones normales abran la conexión serie por Bluetooth clásico que usan el HC-05 y el HC-06. Para iPhone debes usar un módulo BLE como el HM-10 o un ESP32 con BLE.
¿Qué alcance tiene el HC-05?
Unos 10 metros en espacio abierto. Las paredes, las superficies metálicas y otros dispositivos inalámbricos reducen esa distancia. En casa funciona bien dentro de la misma habitación o en la de al lado.
¿Qué diferencia hay entre el HC-05 y el HC-06?
Los dos usan Bluetooth clásico. El HC-05 puede ser maestro o esclavo y tiene 6 pines; el HC-06 es solo esclavo y suele tener 4 pines. Para comunicarte con el móvil sirve cualquiera de los dos; para enlazar dos Arduino necesitas al menos un HC-05.
¿Cuál es el PIN por defecto del HC-05?
En la mayoría de los módulos es 1234 y en algunos, 0000. Puedes cambiarlo en modo AT con el comando AT+PSWD; si no quieres que otros controlen tu proyecto, cambiar el PIN por defecto es buena idea.
¿Puedo comunicar dos Arduino con HC-05?
Sí. Configura un HC-05 como maestro con AT+ROLE=1 e indícale la dirección del otro módulo con el comando AT+BIND; el segundo módulo se queda como esclavo. Al encenderse, el maestro se conecta automáticamente al esclavo y los dos Arduino se comunican por el puerto serie.
¿Es imprescindible el divisor de tensión en el pin RXD?
Es recomendable. Los pines de datos del HC-05 trabajan a 3,3 V; muchos módulos aguantan 5 V durante un tiempo, pero pueden estropearse con el uso. Un sencillo divisor con resistencias de 1 kΩ y 2 kΩ elimina ese riesgo. El pin TXD no necesita divisor.
Proyectos para hacer después de leer esto
Ver todos los proyectos
Coche controlado por Bluetooth con L298N
Proyecto de coche robot 2WD (dos motores, cuatro ruedas) que se puede controlar desde el teléfono con Arduino y el módulo Bluetooth HC-05. Un total de cuatro ruedas se accionan simultáneamente mediant

Robot para evitar obstáculos
¿Qué le parece construir un vehículo inteligente que encuentre su propio camino? El Robot Evitador de Obstáculos explora constantemente su entorno gracias al sensor ultrasónico que lleva delante. Cuan
Más artículos
Aprende paso a paso a conectar con seguridad el módulo Bluetooth HC-05 a Arduino, emparejarlo con el móvil, controlar un LED y un relé desde el teléfono y cambiar su nombre y PIN con comandos AT.

