Componente · Comunicação

Módulo Bluetooth HC-05

O HC-05 adiciona serial Bluetooth a um robô—pareie-o com o celular para controlá-lo ou transmitir dados usando os mesmos pinos TX/RX de uma conexão com fio.

O que é

O HC-05 é a forma mais simples de tornar um robô sem fio. É um módulo Bluetooth que funciona como um cabo serial sem cabo: seu microcontrolador lê e escreve bytes nos pinos TX/RX exatamente como faria por USB, mas a outra ponta é um celular ou notebook pareado via Bluetooth. Envie um F de um aplicativo no celular e o robô avançará—sem Wi-Fi, rede ou contas.

Diagrama rotulado de um módulo Bluetooth HC-05: uma placa adaptadora azul que comporta um rádio Bluetooth blindado com rebites nos cantos, uma antena de PCB em zigue-zague, um LED de estado e um conector de 6 pinos (EN, VCC, GND, TXD, RXD, STATE) na parte inferior para a conexão serial.
O módulo transforma uma conexão Bluetooth em uma conexão serial comum—cruze TX/RX com o microcontrolador e ele parecerá exatamente um cabo com fio. Baixar SVG

Como funciona

O HC-05 implementa o Serial Port Profile (SPP) do Bluetooth. Depois do pareamento, tudo o que o módulo recebe pelo ar aparece em seu pino TX, e tudo o que você envia ao RX é transmitido pelo ar ao dispositivo pareado. Seu código usa apenas a porta serial—Serial.read() / Serial.print()—e a conexão sem fio fica invisível. A configuração (nome, taxa de baud, função mestre/escravo) é feita com comandos AT em um modo separado, mas, na maioria dos robôs, os padrões funcionam sem alterações.

Quando usar

Use um HC-05 quando quiser comandar ou monitorar um robô sem um cabo:

  • Robôs controlados pelo celular — um aplicativo Bluetooth envia comandos de movimento que o robô lê pela serial e converte em controle de motores.
  • Telemetria ao vivo — transmita valores de sensores ou odometria a um notebook enquanto o robô funciona.
  • Ajuste sem fio — modifique parâmetros durante a execução, em vez de regravar o firmware.

Se o robô já usa um ESP32, você não precisa de um HC-05—o ESP32 já tem Bluetooth e Wi-Fi integrados. O HC-05 é o complemento que oferece a mesma solução sem fio a um Arduino Uno.

Conexões e armadilhas

  • Cruze as linhas seriais: TX do módulo → RX da placa e RX do módulo → TX da placa. Invertê-las é a principal causa de “não conecta”.
  • Reduza o sinal no pino RX de uma placa de 5 V, como o Uno, para 3,3 V.
  • Libere a porta serial de hardware durante a gravação ou use um par de pinos de serial por software — o módulo e o programador USB não podem compartilhar a única UART do Uno.
  • Faça o pareamento primeiro (o PIN costuma ser 1234/0000); o LED integrado mostra o estado da conexão.

Pinagem

Pino Nome O que faz
1 EN / KEY Mantido em HIGH na energização para entrar no modo de comandos AT
2 VCC 3,6–6 V. A placa adaptadora regula internamente para 3,3 V
3 GND Massa
4 TXD O módulo transmite. Vai para o RX do microcontrolador
5 RXD O módulo recebe. Lógica de 3,3 V — reduza um sinal de 5 V
6 STATE HIGH quando há um dispositivo conectado. É realmente útil, mas costuma ser ignorado

O pino STATE merece mais atenção do que recebe. Um robô que o lê sabe quando o celular saiu do alcance, o que é a diferença entre parar com segurança e bater em uma parede enquanto espera um comando que nunca chegará.

Conectando a um Arduino

Os dois erros aqui respondem pela maioria dos relatos de “não vai conectar”.

HC-05 Arduino Uno Observação
VCC 5 V O regulador integrado trata disso
GND GND
TXD Pino 10 (RX do SoftwareSerial) TX do módulo → RX da placa. Cruze-os
RXD Pino 11 por divisor (TX do SoftwareSerial) TX da placa → RX do módulo, por um divisor 2:1
EN Deixe aberto Necessário apenas no modo AT
STATE Qualquer pino digital Verificação opcional da conexão

Cruze as linhas seriais

TX transmite e RX recebe. Dois dispositivos que tentam transmitir pelo mesmo fio não conseguem fazer nada, e não há erro — o pareamento funciona normalmente, o LED fica aceso e nenhum dado trafega. O TX do módulo vai para o RX da placa. O RX do módulo vai para o TX da placa.

Reduza a linha RX

RXD é uma entrada de 3,3 V, e um Arduino Uno gera 5 V. Dois resistores resolvem:

Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
                        │
                      2 kΩ
                        │
                       GND

TXD não precisa de divisor no outro sentido — a saída de 3,3 V do módulo supera o limiar alto de 3,0 V do Uno.

Não use os pinos 0 e 1

O Uno tem uma UART de hardware, e o programador USB já tem esse recurso reservado. Conecte o módulo ali e os envios falharão enquanto ele estiver conectado, a saída do monitor serial irá para o módulo e a depuração será impossível. Use SoftwareSerial em outros dois pinos.

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
  }
}

A verificação de conexão no início do laço é a parte que a maioria dos tutoriais omite, e é justamente o que impede um robô descontrolado. O alcance do Bluetooth é de cerca de 10 m, e paredes o reduzem bruscamente; um robô que continua executando o último comando depois de perder o conexão seguirá em frente até colidir com algo.

Modo de comandos AT

Alterar o nome, a taxa de transmissão ou o PIN do módulo exige o modo AT, e entrar nele tem uma sequência específica que o módulo não torna evidente.

  1. Desligue a alimentação do módulo.
  2. Mantenha EN em HIGH (ou pressione e segure o pequeno botão, se a placa tiver um).
  3. Ligue a alimentação enquanto EN estiver pressionado.
  4. O LED agora pisca lentamente — aproximadamente uma vez a cada dois segundos — em vez de piscar rapidamente.
  5. Comunique-se com ele a 38400 baud, não 9600, enviando quebra de linha e 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

Duas armadilhas: o modo AT sempre usa 38400, independentemente do baud do modo de dados, e a frequência do LED é a única indicação confiável de que você está nele. Uma piscação rápida indica modo de dados, e seus comandos AT serão simplesmente transmitidos pelo ar ao dispositivo que estiver pareado.

HC-05 ou HC-06?

Eles parecem idênticos e são vendidos de forma intercambiável, mas existe uma diferença real.

HC-05 HC-06
Papel Mestre ou escravo Somente escravo
Pode iniciar uma conexão Sim Não
Modo AT Pelo pino EN, a 38400 A qualquer momento enquanto não pareado, no baud de dados
Preço Um pouco mais caro Um pouco mais barato

Se o módulo sempre precisar apenas aceitar a conexão de um celular, um HC-06 é suficiente. Se você quiser que dois robôs conversem ou que um robô se conecte a um módulo, em vez de esperar para ser conectado, precisa da função mestre do HC-05.

Solução de problemas

Sintoma Causa provável Solução
O pareamento funciona, mas nenhum dado trafega TX/RX não cruzados TX do módulo → RX da placa, RX do módulo → TX da placa
Caracteres corrompidos Baud divergente Use 9600 nas duas pontas ou configure o mesmo valor nas duas
A gravação falha enquanto o módulo está conectado Módulo nos pinos 0/1 Mude para pinos do SoftwareSerial
Os comandos AT não fazem nada O módulo não está realmente no modo AT Mantenha EN durante a energização; confirme a piscação lenta
O modo AT não responde Está usando o baud de dados O modo AT é sempre 38400
Não há pareamento PIN errado Tente 1234 e depois 0000
A conexão cai a alguns metros Alcance da classe 2 mais paredes Esperado; use o pino STATE para parar com segurança
O robô continua andando após desconectar Nenhuma verificação da conexão Leia STATE e pare quando estiver LOW
Funciona com USB, mas não com bateria Queda de tensão da fonte As rajadas de transmissão do rádio exigem 5 V estáveis

HC-05 ou ESP32?

Se você está escolhendo componentes, em vez de usar o que já tem, esta é a decisão real.

HC-05 + Arduino ESP32
Sem fio Bluetooth Classic SPP Wi-Fi e Bluetooth, integrados
Hardware adicional Um módulo, um divisor e dois pinos Nenhum
Interface de controle Um fluxo de bytes seriais Uma página na Internet servida pelo próprio robô
Alcance ~10 m ~50 m por Wi-Fi, ou qualquer lugar com rede
Aplicativo para celular necessário Sim — um terminal Bluetooth genérico Não — qualquer navegador
Valor didático Protocolos seriais e a conexão mais simples possível Redes, que são um assunto muito maior

O HC-05 é a resposta certa quando você já tem um Arduino e quer o caminho mais curto para um robô sem fio. Ele é realmente simples: um byte entra, um byte sai, sem conceitos de rede. Em um projeto novo com requisito sem fio, um ESP32 faz mais por menos e não precisa de peças extras — e um robô que serve sua própria página de controle não exige aplicativo instalado no celular de ninguém.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Módulo Bluetooth HC-05.

Comparar

Alternativas

Perguntas

Perguntas frequentes sobre Módulo Bluetooth HC-05

O que é um HC-05?

O HC-05 é um módulo Bluetooth que transforma uma conexão sem fio em uma conexão serial (UART) comum. Para o seu microcontrolador, ele funciona exatamente como um cabo serial—você lê e escreve bytes em TX/RX—exceto que a outra ponta é o celular ou o PC via Bluetooth. É a maneira mais fácil de controlar um robô sem fio.

Como conectar um HC-05 a um Arduino?

Alimente VCC e GND e depois cruze as linhas seriais — TX do módulo no RX do Arduino e RX do módulo no TX do Arduino. Como o pino RX do HC-05 usa 3,3 V, reduza o TX de 5 V do Arduino com um divisor de tensão. Assim, tudo o que você imprime na serial é enviado sem fio ao celular pareado, e vice-versa.

Qual é o alcance do HC-05?

Cerca de 10 metros em linha de visão—é um dispositivo Bluetooth Classe 2. Paredes e interferência reduzem esse alcance. Isso basta para controlar um robô em uma sala pelo celular, mas, para longo alcance, use Wi-Fi ou um rádio dedicado.

Como parear módulos HC-05?

Para parear com um celular, alimente o módulo, abra as configurações de Bluetooth do celular, selecione o HC-05 e digite o PIN (normalmente 1234 ou 0000). Para parear dois HC-05 entre si, defina um como mestre e outro como escravo com comandos AT e faça o pareamento pelo endereço.

Como programar o HC-05?

O HC-05 tem dois modos. No modo de dados, ele simplesmente repassa bytes seriais. Para alterar o nome, a taxa de transmissão ou a função de mestre/escravo, coloque-o no modo de comandos AT—mantenha o pino EN/KEY em nível alto na energização—e envie comandos AT pela serial.

Leitura complementar

Referências