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.

Diagrama etiquetado de un módulo Bluetooth HC-05: una placa adaptadora azul que lleva una lata de radio Bluetooth blindada con metal y remaches en las esquinas, una antena PCB en zigzag, un LED de estado y una cabecera de 6 pines (EN, VCC, GND, TXD, RXD, STATE) a lo largo del borde inferior para la conexión serie.
El módulo convierte un enlace Bluetooth en una conexión serie corriente: cruza TX/RX con el microcontrolador y parecerá exactamente un cable. Descargar SVG

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.

  1. Apaga el módulo.
  2. Mantén EN en HIGH (o pulsa y mantén el botón pequeño, si tu placa tiene uno).
  3. Enciéndelo mientras EN siga pulsado.
  4. El LED parpadea ahora despacio, más o menos una vez cada dos segundos, en lugar de deprisa.
  5. 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

Referencias