Componentes · 6 min de leitura

Módulo Bluetooth HC-05: controle seu Arduino pelo celular

Como ligar o módulo Bluetooth HC-05? Pinos e divisor de tensão, pareamento com o celular, controle de LED e relé, comandos AT, HC-05 vs HC-06 vs HM-10, compatibilidade com iPhone, ESP32 e Pico.

O HC-05 é um módulo Bluetooth barato e muito comum que adiciona comunicação serial sem fio a projetos com Arduino. Com ele você acende um LED pelo celular, liga e desliga uma lâmpada com um relé, dirige um carrinho de controle remoto ou envia dados de sensores para o celular. Neste artigo você vai ver passo a passo como ligar o HC-05 de forma correta e segura, pareá-lo com o celular, escrever o seu primeiro código e usar os comandos AT que mudam as configurações do módulo.

Módulo Bluetooth HC-05 e jumpers
Módulo Bluetooth HC-05: a trilha em zigue-zague na parte de cima é a antena, e à esquerda ficam 6 pinos: EN, VCC, GND, TXD, RXD e STATE.

Como funciona o HC-05?

O HC-05 usa o SPP (Serial Port Profile) do Bluetooth clássico e se comporta como um “cabo serial sem fio”. Depois que o celular é pareado e conectado, cada caractere enviado pelo celular chega ao Arduino pelo pino TXD do módulo, e tudo o que o Arduino escreve no pino RXD vai para o celular. Do lado do Arduino você não precisa saber nada de Bluetooth: você usa Serial.print() e read() como se estivesse conversando com o Monitor Serial.

CaracterísticaValor
Versão do Bluetooth2.0 + EDR (clássico, SPP)
Alcance~10 m em espaço aberto
Tensão de alimentação3,6–6 V (a placa do módulo tem regulador)
Nível lógico3,3 V
Baud rate padrão9600 baud (38400 no modo AT)
PIN padrão1234 ou 0000
PapelMestre e escravo

HC-05 vs HC-06 vs HM-10

MóduloBluetoothPapelPinosiPhone
HC-052.0 clássicoMestre e escravo6Não funciona
HC-062.0 clássicoSó escravo4Não funciona
HM-104.0 BLEMestre e escravo6Funciona
Módulo Bluetooth HC-06
Módulo Bluetooth HC-06: muito parecido com o HC-05, mas com 4 pinos, e funciona só como escravo; isso basta para conversar com um celular.
O HC-05 e o HC-06 não funcionam com iPhone: o iOS não deixa apps comuns abrirem uma conexão serial por Bluetooth clássico. Se você quer conversar com um iPhone, use um módulo BLE (Bluetooth Low Energy) como o HM-10 ou um ESP32 com BLE. Celulares Android e computadores se conectam ao HC-05 sem problemas.

Pinos e ligação do HC-05

O módulo pode ser alimentado pelo 5V porque há um regulador na placa, mas os pinos de dados trabalham em 3,3 V. O Arduino lê sem problemas o sinal de 3,3 V do pino TXD do HC-05. No sentido contrário, em vez de ligar o sinal TX de 5 V do Arduino direto no pino RXD do módulo, use um divisor de tensão: TX do Arduino → 1 kΩ → RXD, RXD → 2 kΩ → GND. Assim chegam cerca de 3,3 V ao RXD.

Pino do HC-05FunçãoArduino Uno
EN (KEY)Entrar no modo ATDesconectado (3,3 V para o modo AT)
VCCAlimentação5V
GNDTerraGND
TXDSaída de dados do móduloD10 (RX do SoftwareSerial)
RXDEntrada de dados do módulo (3,3 V)D11, por um divisor de 1 kΩ / 2 kΩ
STATEHIGH quando conectadoDesconectado, ou um pino de entrada se você quiser
Você também pode ligar o HC-05 nos pinos 0 e 1 do Uno, mas esses pinos também são usados para carregar o código pela USB, então o carregamento falha com o módulo ligado. Usar os pinos 10 e 11 com SoftwareSerial deixa livres tanto o carregamento quanto o Monitor Serial.

Estados do LED e pareamento com o celular

Quando você alimenta o módulo, o LED pisca rápido: isso significa que ele está esperando uma conexão. Nas configurações de Bluetooth do seu celular Android, encontre o dispositivo chamado “HC-05” e faça o pareamento usando 1234 (ou 0000, se não funcionar) como PIN. Só o pareamento não abre uma conexão; quem faz isso é um app de terminal serial Bluetooth. Depois de conectado, o LED dá duas piscadas curtas a cada 2 segundos. Se o LED fica aceso 2 segundos e apagado 2 segundos, o módulo está no modo de comandos AT.

Primeira comunicação com o celular

O código abaixo transforma o Arduino em uma ponte entre o celular e o computador: cada caractere vindo do celular vai para o Monitor Serial, e tudo o que você digita no Monitor Serial vai para o celular. É o melhor ponto de partida para testar a conexão:

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

Carregue o código e abra o Monitor Serial em 9600 baud. No celular, conecte-se ao HC-05 com um app do Google Play como o Serial Bluetooth Terminal e digite alguma coisa: o que você digitar vai aparecer no Monitor Serial. O texto que você digita no Monitor Serial também aparece no celular. Se isso funcionar, sua conexão, sua ligação e o baud rate estão todos certos.

Controlando um LED e um relé pelo celular

Agora vamos agir de acordo com os caracteres que vêm do celular: quando chega 1, o LED acende, e quando chega 0, apaga. O Arduino também envia uma resposta para o celular depois de cada comando:

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

Muitos apps de Bluetooth permitem associar qualquer caractere a um botão, então você pode montar no celular um pequeno controle com botões “Ligar” e “Desligar”. Se você ligar um módulo relé no lugar do LED, o mesmo código controla uma lâmpada ou um ventilador pelo celular. Encaminhar os caracteres F, B, L e R, para frente, trás, esquerda e direita, a um driver de motor L298N também é a base de um carrinho controlado por Bluetooth.

Mudando as configurações do módulo com comandos AT

Você pode mudar o nome, o PIN e o baud rate do HC-05 com comandos AT. Para entrar no modo AT, alimente o módulo segurando o botãozinho dele (ou com o pino EN ligado em 3,3 V); o LED começa a piscar devagar, uma vez a cada 2 segundos. No código da ponte, escreva bt.begin(38400), defina o final de linha no Monitor Serial como Ambos, NL e CR e envie os comandos:

ComandoFunção
ATTeste de conexão, responde OK
AT+NAME=BlueGraysMuda o nome visível do módulo
AT+PSWD="4321"Muda o PIN (sem aspas nas versões antigas)
AT+UART=9600,0,0Define o baud rate no modo de dados
AT+ROLE=0Torna o módulo escravo (1 o torna mestre)
AT+VERSION?Mostra a versão do firmware
AT+ORGLRestaura as configurações de fábrica
Em algumas versões do HC-05, alguns comandos AT (o AT+NAME, por exemplo) só respondem se você segurar o botão enquanto envia o comando. Se você recebe OK para o AT, mas nenhuma resposta para alguns comandos, tente de novo segurando o botão.

Bluetooth com ESP32 e Raspberry Pi Pico

O ESP32 clássico tem Bluetooth clássico e BLE embutidos; com a biblioteca BluetoothSerial você se conecta ao celular sem um HC-05. Já o ESP32-S3 e o ESP32-C3 só suportam BLE. O Raspberry Pi Pico W também tem Bluetooth embutido. No Raspberry Pi Pico comum, sem Bluetooth, você liga o HC-05 nos pinos da UART; como o Pico funciona em 3,3 V, desta vez não precisa de divisor de tensão. Alimente o módulo pelo pino 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')

Ideias de projetos com HC-05

  • Carrinho controlado por Bluetooth: um robô dirigido pelo celular com um driver de motor L298N e dois motores CC.
  • Interruptor de casa inteligente: ligue e desligue lâmpadas e tomadas pelo celular com um módulo relé.
  • Luminária com seletor de cores: defina a cor de um LED RGB com valores enviados pelo celular.
  • Display de sensor sem fio: envie para o terminal no celular a temperatura e a umidade lidas por um DHT11.
  • Braço robótico: controle servo motores com controles deslizantes no celular.
  • Comunicação entre dois Arduinos: faça de um HC-05 o mestre e do outro o escravo para enviar dados sem fio.

Erros comuns e como corrigir

  • O celular não encontra o módulo: você está usando um iPhone, o módulo está conectado a outro aparelho ou ficou preso no modo AT.
  • Chegam caracteres embaralhados: os baud rates não batem; o modo de dados costuma usar 9600, e o modo AT, 38400.
  • Nenhuma resposta aos comandos AT: o módulo não está no modo AT, o baud rate não é 38400 ou o final de linha não está em Ambos, NL e CR.
  • O código não carrega: o módulo está ligado nos pinos 0 e 1; desconecte-o durante o carregamento ou use SoftwareSerial.
  • A conexão cai quando os motores ligam: os motores perturbam a alimentação; alimente-os por uma fonte separada e coloque um capacitor na alimentação do módulo.
  • O módulo queimou depois de um tempo: talvez tenham chegado 5 V ao pino RXD sem divisor; use sempre um divisor de 1 kΩ / 2 kΩ.

O HC-05 é o jeito mais fácil de levar seus projetos com fio para o mundo sem fio; junte-o com controle de motores e você está pronto para montar o seu primeiro robô controlado à distância. No app BlueGrays você encontra um carrinho controlado por Bluetooth com L298N e um robô que desvia de obstáculos, com esquemas do circuito e código.

Perguntas frequentes

O HC-05 funciona com iPhone?

Não. O iOS não deixa apps comuns abrirem a conexão serial por Bluetooth clássico usada pelo HC-05 e pelo HC-06. Para iPhone, use um módulo BLE como o HM-10 ou um ESP32 com BLE.

Qual é o alcance do HC-05?

Cerca de 10 metros em espaço aberto. Paredes, superfícies metálicas e outros aparelhos sem fio reduzem essa distância. Em ambientes internos, ele funciona de forma confiável no mesmo cômodo ou no cômodo ao lado.

Qual é a diferença entre o HC-05 e o HC-06?

Os dois usam Bluetooth clássico. O HC-05 pode ser mestre ou escravo e tem 6 pinos; o HC-06 é só escravo e costuma ter 4 pinos. Qualquer um basta para conversar com um celular; para ligar dois Arduinos você precisa de pelo menos um HC-05.

Qual é o PIN padrão do HC-05?

É 1234 na maioria dos módulos e 0000 em alguns. Você pode mudá-lo no modo AT com o comando AT+PSWD; se não quer que outras pessoas controlem o seu projeto, mudar o PIN padrão é uma boa ideia.

Dá para fazer dois Arduinos conversarem com HC-05?

Sim. Torne um HC-05 mestre com AT+ROLE=1 e passe a ele o endereço do outro módulo com o comando AT+BIND; o segundo módulo continua escravo. Ao ligar, o mestre se conecta ao escravo automaticamente, e os dois Arduinos conversam pela porta serial.

O divisor de tensão no pino RXD é mesmo necessário?

É recomendado. Os pinos de dados do HC-05 trabalham em 3,3 V; muitos módulos aguentam 5 V por um tempo, mas podem queimar com o tempo. Um divisor simples com resistores de 1 kΩ e 2 kΩ elimina esse risco. O pino TXD não precisa de divisor.

Ver todos os projetos