Componentes · 6 min de lectura

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.

Módulo Bluetooth HC-05 y cables jumper
Módulo Bluetooth HC-05: la pista en zigzag de arriba es la antena, y a la izquierda hay 6 pines: EN, VCC, GND, TXD, RXD y STATE.

¿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ísticaValor
Versión de Bluetooth2.0 + EDR (clásico, SPP)
Alcance~10 m en espacio abierto
Tensión de alimentación3,6–6 V (la placa del módulo lleva regulador)
Nivel lógico3,3 V
Velocidad por defecto9600 baudios (38400 en modo AT)
PIN por defecto1234 o 0000
RolMaestro y esclavo

Diferencias entre HC-05, HC-06 y HM-10

MóduloBluetoothRolPinesiPhone
HC-052.0 clásicoMaestro y esclavo6No funciona
HC-062.0 clásicoSolo esclavo4No funciona
HM-104.0 BLEMaestro y esclavo6Funciona
Módulo Bluetooth HC-06
Módulo Bluetooth HC-06: muy parecido al HC-05, pero con 4 pines y solo funciona como esclavo; para comunicarse con el móvil es suficiente.
El HC-05 y el HC-06 no funcionan con el iPhone: iOS no permite que las aplicaciones normales abran una conexión serie por Bluetooth clásico. Si quieres comunicarte con un iPhone, usa un módulo BLE (Bluetooth Low Energy) como el HM-10 o un ESP32 con BLE. Los móviles Android y los ordenadores se conectan al HC-05 sin problemas.

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-05FunciónArduino Uno
EN (KEY)Entrar en modo ATSin conectar (3,3 V para el modo AT)
VCCAlimentación5V
GNDMasaGND
TXDSalida de datos del móduloD10 (RX de SoftwareSerial)
RXDEntrada de datos del módulo (3,3 V)D11, a través de un divisor de 1 kΩ / 2 kΩ
STATEHIGH cuando está conectadoSin conectar, o a un pin de entrada si quieres
También puedes conectar el HC-05 a los pines 0 y 1 del Uno, pero esos pines se usan además para cargar el programa por USB, así que la carga falla con el módulo conectado. Usar los pines 10 y 11 con SoftwareSerial deja libres tanto la carga como el Monitor Serie.

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:

Arduino (C++)
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:

Arduino (C++)
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:

ComandoFunción
ATPrueba de conexión, responde OK
AT+NAME=BlueGraysCambia el nombre visible del módulo
AT+PSWD="4321"Cambia el PIN (sin comillas en versiones antiguas)
AT+UART=9600,0,0Ajusta la velocidad en modo datos
AT+ROLE=0Lo pone como esclavo (con 1, maestro)
AT+VERSION?Muestra la versión del firmware
AT+ORGLRestablece la configuración de fábrica
En algunas versiones del HC-05, ciertos comandos AT (por ejemplo, AT+NAME) solo responden si mantienes pulsado el botón mientras los envías. Si AT te devuelve OK pero algunos comandos no responden, vuelve a probar con el botón pulsado.

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):

MicroPython
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.

Ver todos los proyectos

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.