29 janeiro 2015

Diferença entre os módulos bluetooth HC-05 e HC-06

Muita gente fica na dúvida entre adquirir um módulo bluetooth HC-05 ou um HC-06. Mas afinal, qual é a diferença entre eles, já que geralmente os módulos são muito parecidos visualmente ?

diferença módulo bluetooth hc-05 e hc-06


A diferença básica entre os módulos é que o HC-05 pode ser configurado nos modos Master (mestre), Slave (escravo) e Loopback, e o HC-06 apenas no modo Slave.
 
  • Modo Master (Mestre) : O módulo pode se conectar à outros dispositivos bluetooth
  • Modo Slave (Escravo) : O módulo apenas recebe conexões de outros dispositivos bluetooth
  • Modo Loopback : O módulo recebe os dados do módulo Master e envia de volta esses mesmos dados. É um modo utilizado geralmente para testes.

Em quais situações devo utilizar os modos Master ou Slave ?

Tudo vai depender do seu projeto, mas imagine um circuito em que exista um sensor de temperatura, e que você necessite de um aviso quando a temperatura atingir determinado valor. Nesse caso, seria mais indicado um HC-05 no modo Master, que faria a conexão com algum outro dispositivo, como celular, um computador ou outro módulo bluetooth, e daria o alerta sem a necessidade de checar o sensor à todo instante.

Por outro lado, em circuitos onde você precisa enviar comandos ao Arduino e apenas checar o estado de sensores esporadicamente, pode ser utilizado o HC-06 ou o próprio HC-05 em modo Slave.

Diferenças de configuração entre o HC-05 e o HC-06

Tanto o HC-05 como o HC-06 podem ser configurados por meio de comandos AT, à partir de programas de controle serial como o Serial Monitor,o Termite e o TeraTerm.

Por ter mais recursos o HC-05 possui mais comandos AT do que o HC-06. Eu elaborei uma tabela mostrando os principais comandos disponíveis para cada um :

Tabela comandos AT bluetooth

Arrisco a dizer que para o HC-06 os únicos comandos disponíveis são esses da tabela. Como são muitos tipos de firmware disponíveis, podemos ter algum tipo de comando diferente ou não documentado, mas basicamente no HC-06 você configura o nome, senha e velocidade da serial. Já no HC-05 além dos comandos básicos temos comandos para configuração do modo master/slave, comando para pareamento, rastreamento de dispositivos, etc.

Uma lista completa dos comandos aceitos pelo HC-05, com exemplos de utilização, você encontra aqui.

Configuração do módulo bluetooth com comandos AT

Como eu comentei anteriormente, os módulos são configurados utilizando-se uma série de comandos AT, enviados ao módulo via porta serial.

O módulo HC-06 é um pouco mais simples de configurar, e eu falo sobre isso no artigo Configuração do módulo Bluetooth HC-06 com Arduino, que fiz recentemente para o blog da BUILDBOT. Resumidamente, basta conectar o HC-06 ao Arduino, carregar o programa e enviar os comandos AT.

No caso do HC-05, para enviar esse comandos temos que utilizar um pino adicional do HC-05, o pino KEY , que deve estar em estado ALTO (HIGH). Esse procedimento coloca o módulo em "modo AT". Alguns módulos vem até mesmo com um pequeno botão para colocar esse pino em nível HIGH.

Para configurar o HC-05 utilizando um Arduino Uno, faça a ligação abaixo, utilizando um divisor de tensão no pino RX do módulo.

ATENÇÂO : Nunca é demais lembrar, e aqui no blog eu já comentei isso várias vezes. Os módulos bluetooth mais comuns trabalham com nível de sinal de 3.3V (não confundir com a alimentação do módulo, que pode ser de 3.6 à 6V). Assim, para usar o módulo com as placas Arduino que trabalham com nível de sinal de 5V, utilize sempre um divisor de tensão para evitar danos ao módulo bluetooth.

Para calcular o valor dos 2 resistores que formam o divisor de tensão, acesse este link. Preencha os campos R1 e R2 com o valor dos resistores que você possui, coloque a tensão de entrada como 5V e clique em Calcular para calcular a tensão de saída, que não deve exceder 3.3V :

Calculador divisor de tensão

Vamos utilizar os pinos 6 e 7 como RX e TX usando a biblioteca SoftwareSerial, que permite o uso de outros pinos do Arduino como interface serial. O pino 3.3V do Arduino será conectado ao pino KEY do módulo :

Circuito Arduino Uno - HC-05


Para programar o módulo, primeiramente carregue este programa no Arduino :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Programa : Modulo BT HC-05 - Programacao
// Autor : Arduino e Cia

// Carrega a biblioteca SoftwareSerial
#include <SoftwareSerial.h>
   
// Define os pinos para a serial   
SoftwareSerial MinhaSerial(6, 7); // RX, TX  
String command = "";   
   
void setup()   
{  
  // Inicia a serial  
  Serial.begin(115200);  
  // Mensagem inicial
  Serial.println("Digite os comandos AT :");  
  // Inicia a serial configurada nas portas 6 e 7
  MinhaSerial.begin(38400);  
}  
   
void loop()  
{  
  // Verifica se ha comunicacao com o modulo
  // e efetua a leitura
  if (MinhaSerial.available()) 
  {  
     while(MinhaSerial.available()) 
     {
       command += (char)MinhaSerial.read();  
     }  
   Serial.println(command);  
   command = "";
  }  
  
  // Envio de comandos
  if (Serial.available())
  { 
    delay(10);
    MinhaSerial.write(Serial.read());  
  }  
}

Abra o serial monitor e selecione a velocidade de comunicação para 115200 e também os parâmetros NL (New Line) e CR (Carriage Return), conforme destacado. Em alguns segundos a mensagem Digite os comandos AT aparecerá na tela :

Serial monitor - Comandos AT modulo bluetooth

Digite os comandos AT na parte superior do Serial Monitor e clique em ENVIAR. Se o comando for aceito pelo módulo, você receberá a mensagem OK após cada um deles.

Utilize os comandos AT abaixo para as principais tarefas :

  • AT para testar o módulo
  • AT+VERSION? para mostrar a versão do firmware
  • AT+NAME=<nome_do_modulo>  para alterar o nome do módulo. Exemplo : AT+NAME=ARDUINO_E_CIA
  • AT+PSWD=<senha> para alterar a senha. Exemplo : AT+PSWD=1234

Posteriormente farei um outro artigo falando sobre como conectar duas placas Arduino utilizando módulos bluetooth HC-05.



57 comentários:

  1. Olá, segui todos os passos a risca e nada retornou no Serial Monitor.
    O que pode estar acontecendo?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Voce setou a velocidade da serial corretamente ? Veja se o pino "key" do modulo está conectado corretamente. É ele que determina se o módulo bluetooth vai entrar em modo de programação.

      Abraço !

      Excluir
    2. Eu também estou com o mesmo problema e meu pino "Key" está conectado a 3,3 v conforme descrito na imagem do esquemático acima.

      O que poderia ser?

      Excluir
    3. Boa noite David,

      Por favor reveja as conexões e não se esqueça de usar o divisor de tensão para evitar a queima do módulo.

      Abraço !

      Excluir
    4. Se o HC 05 é mais versátil que o modelo 06, por que o 05 é mais barato????

      Excluir
    5. Boa tarde,

      Nem sempre. Eles estão com os preços bem parecidos, pelo que eu vi.

      Abraço!

      Excluir
    6. Boa noite, para que posso fazer uma programação com o arduino e bluetooth h-05 para movimentação de motores como eu faço

      Excluir
  2. Olá, estou com uma dúvida na linha que esta o comando: "command += (char)MinhaSerial.read(); ".
    Para que serve o "+=" ? Procurei sobre isso mas não encontrei nada :/

    Obrigado!

    ResponderExcluir
    Respostas
    1. Boa noite,

      É uma das operações matemáticas disponíveis na programação do Arduino. Esse link explica como funciona :

      http://arduino.cc/en/Reference/IncrementCompound

      Abraço !

      Excluir
  3. Veja o comando Serial.begin(115200) no SETUP()

    ResponderExcluir
  4. Olá boa noite.

    Parabéns pelas ótimas explicações.

    Preciso de um código para o Arduino enviar um comando a cada 1s para um módulo Bluetooth transmitir um comando. Estou usando conjunto (Arduino + HC-05).

    Muito obrigado.

    ResponderExcluir
    Respostas
    1. Boa tarde Guilherme,

      Não tenho esse código pronto, mas você pode utilizar esse artigo como base:

      http://www.arduinoecia.com.br/2014/06/texto-android-arduino-bluetooth.html

      Abraço !

      Excluir
  5. AMIGO, o meu modulo HC-05 está respondendo de forma estranha os comandos AT ! Parece que ele responde palavras árabes ou hieroglifos. Sabe o motivo ? É de extrema urgência amigo.

    ResponderExcluir
    Respostas
    1. Boa tarde Wendell,

      Tente alterar a velocidade de comunicacao serial com o modulo, provavelmente é isso, talvez o seu módulo não tenha vindo setado com a velocidade padrao, que se eu não me engano é de 9600.

      Tente alterar a linha 18 do programa de 38400 para 9600.

      Abraço e espero que ajude. :)

      Excluir
    2. Estou com o mesmo problema do amigo acima. Alterei a velocidade mas agora aparece erro. Obrigado

      Excluir
    3. Estou com o mesmo problema do amigo acima, porém alterei a velocidade e não deu certo ainda. Poderia me informa o que pode ser? Obrigado

      Excluir
    4. Boa noite Thiago,

      O seu módulo é o mesmo que eu utilizo no post ?

      Abraço.

      Excluir
  6. ola amigo eu fiz a mudança do nome do modulo com o arduino ,mas eu quero experimentar fazer um projeto com o pic esta mudança fica gravada no modulo ?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Fica gravada sim, pode usar tranquilamente.

      Abraço !

      Excluir
  7. Boa tarde amigao, excelente post!!

    Estou prestes a comprar um modulo HC-05, vou utiliza-lo com PIC e não com arduino.... devo utilizar algum divisor de tensão em algum pino TX/RX?? grato desde já!!

    ResponderExcluir
    Respostas
    1. Boa tarde Rodrigo,

      Não conheço direito o PIC, mas o HC-05 tem nível de tensão suportado de 3.3V. Qualquer valor acima disso exige o divisor de tensão.

      Abraço !

      Excluir
  8. Aos colegas que conseguiram fazê-lo funcionar, que versão da IDE estão a usar?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Aqui no Arduino e Cia usamos a versão 1.6.1 da IDE nesse post.

      Abraço !

      Excluir
    2. Tenho a IDE 1.6.5, e não funciona, chega a mostrar a mensagem "DIGITE OS COMANDOS AT:

      Excluir
  9. é possível fazer uma comunicação full duplex entre dois módulos do hc-06?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Não, o HC-06 funciona apenas em modo escravo (aceita pareamento).

      Abraço!

      Excluir
  10. Tem como disponibilizar o link de download da biblioteca???

    ResponderExcluir
    Respostas
    1. Bom dia Bruno,

      A biblioteca Software Serial já está incluída na IDE do Arduino.

      Abraço!

      Excluir
  11. tem como enviar o arquivo zip hc05.LIB e hc06.LIB para usar no proteus ?? .. quero montar uns projetos ...desde ja agradeco ...... meu e mail lucas.soaress@outlook.com

    ResponderExcluir
    Respostas
    1. Bom dia,

      Eu não tenho esses arquivos. Vamos ver se o pessoal do blog consegue te ajudar.

      Abraço!

      Excluir
  12. Boa tarde, segui todos os passos e somente retorna "Digite os comandos AT :"
    Uso o Arduino Mega ADK com o módulo bluetooth HC-05
    Também usei dois resistores de 150 ohms.
    O que pode ser?

    ResponderExcluir
  13. Bom Dia,

    Sou Técnico em Eletrônica, Domino um pouco informática, estou entrando na área de programação e acompanhando seu curso, Poderia descrever um método de realizar esse procedimento de gravar comandos no Arduino UNO usando um celular Android para programar via Bluetooth, usando o modulo Bluetooth hc-05, só que seria sem a conexão via cabo pela COM1 e sim um modo de configuração do Arduino uno pelo Smartphone Galaxy sem cabo, tudo feito pelo Bluetooth do celular para o modulo Bluetooth do Arduino UNO ??? ( Tudo Portátil, sem PC, usando uma fonte externa alimentando a placa de Arduino )

    Toda essa dificuldade surgiu porque o modelo do meu celular é Samsung Galaxy Grand Duo 2 e ele não tem conexão Via OTG, para usar o cabo, por esse motivo que eu gostaria de programar e copilar meu Arduíno uno via Bluetooth ;

    Ligações Físicas;
    De um lado eu teria o meu celular com o App ArduinoDroid instalado pareado via Bluetooth e do outro a minha placa Arduino Uno ligado a um modulo Bluetooth e usando uma fonte de 5v ou 03 Baterias de 1,5v, ou 9v ...

    Poderia descrever a parte física e o código..

    De ante mão, já agradeço...

    ResponderExcluir
  14. Olá tudo bem?! Eu tenho uma dúvida. Comprei um bt Shield 2.2 que trabalha tanto em modo mestre como escravo. Para acionar lâmpadas por bluetooth, eu teria que usar o modo mestre ou escravo?? E como eu coloco em modo mestre e/ou escravo?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Eu não conheço esse módulo, especificamente, mas para o exemplo do Bluetooth, coloque-o em modo escravo.

      Abraço!

      Excluir
  15. Bom dia!
    Faço um curso técnico de eletrônica e em meu trabalho de conclusão de curso pretendo desenvolver um circuito que ligue/desligue lâmpadas por um aplicativo de celular via bluetooth e para isso comprei o módulo bluetooth HC-06, consigo fazer o circuito com o mesmo ou devo trocar para o HC-05?

    ResponderExcluir
    Respostas
    1. Bom dia Pedro,

      Consegue fazer com o HC-06 sim. Siga o mesmo esquema.

      Abraço!

      Excluir
  16. Amigo, eu estou referenciando seu site em meu tcc, mas para isso preciso do nome de quem escreveu o artigo, acho que isso ajudaria a mim e muitos outros.

    ResponderExcluir
    Respostas
    1. Bom dia Will,

      O autor do artigo é Adilson Thomsen. Qualquer dúvida, entre em contato utilizando o formulário de contato no lado direito da página.

      Abraço e obrigado!

      Excluir
  17. Bom dia.. estou com problema em meu modulo Bluetooth e gostaria de ajuda.. fiz toda a ligação só que quando ligo a placa de arduino ele demora a ligar (luz vermelha fik piscando) e não consigo conectar o celular ele não fica visível e quando coloco para pesquisar bluetooth no meu celular não aparece... antes ele funcionava legal e agora esta com esse problema..

    ResponderExcluir
    Respostas
    1. Bom dia,

      Você alterou alguma configuração do módulo ?

      Abraço.

      Excluir
  18. Bom dia.
    não esta aparecendo os comandos AT no serial monitor.
    Esta tudo conferido oque pode ser?

    ResponderExcluir
  19. Boa noite.
    Gostaria de saber se consigo comunicar com um fone bluetoth utilizando o modulo HC-05????

    ResponderExcluir
  20. Boa Noite.
    Gostaria de saber se consigo comunicar um fone buetooth motorola HK1110 utilizando o modulo HC-05??? o modulo esta ok pois testei e comuniquei com celular. tb habilitei a configuração do modulo para master.
    Quem puder ajudar agradecido..

    ResponderExcluir
    Respostas
    1. Bom dia Anderson,

      Os módulos BT, pelo menos os que eu testei, não tem os protocolos de comunicação para funcionar dessa maneira.

      Abraço!

      Excluir
  21. oi bom dia estou pesquisando para utilizar em comunicaçao dmx sendo 1 master e varios slave, vc sabe se isso é possivel linkar varios modulos para receber sinal e ter apenas 1 transmissor
    abraços

    ResponderExcluir
  22. olá
    estou montndo um carrinho controlado por bluethoth pelo android, estou usando o motor shield e modulo hc-05 mas estou com problema na programacão

    #include //Inlcui a biblioteca SoftwareSerial.h
    // carrega a biblioteca AFMotor
    #include

    // Define o motor1 ligado a conexao 1
    AF_DCMotor motor1(1);
    // Define o motor2 ligado a conexao 2
    AF_DCMotor motor2(2);


    #define RxD 10 //Define RxD como 10
    #define TxD 11 //Define TxD como 11
    SoftwareSerial blueToothSerial(RxD,TxD); //Instância a biblioteca SoftwareSerial.h
    void setup()
    {
    // Define a velocidade maxima para os motores 1 e 2
    motor1.setSpeed(255);
    motor2.setSpeed(255);

    }

    void loop()
    {
    char letra; //Variável char para armazenar o caractere recebido
    if(blueToothSerial.available()) //Se algo for recebido pela serial do módulo bluetooth
    {
    letra = blueToothSerial.read(); //Armazena o caractere recebido na variável letra

    if(letra == 'F') //Se o caractere recebido for a letra 'F'
    {
    // Aciona o motor 1 no sentido horario
    motor1.run(FORWARD);
    // Aciona o motor 2 no sentido horario
    motor2.run(FORWARD);
    //==================
    }
    else if (letra == 'B') //Se o caractere recebido for a letra 'B'
    {
    // Aciona o motor 1 no sentido anti-horario
    motor1.run(FORWARD);
    // Aciona o motor 2 no sentido anti-horario
    motor2.run(FORWARD);
    //==================
    }
    else if(letra == 'R') //Se o caractere recebido for a letra 'R'
    {
    // Aciona o motor 2 no sentido horario
    motor2.run(FORWARD);
    // Desliga o motor 1
    motor1.run(RELEASE);
    //==================
    }

    else if (letra == 'L') //Se o caractere recebido for a letra 'L'
    {
    // Aciona o motor 1 no sentido horario
    motor1.run(FORWARD);
    // Desliga o motor 2
    motor2.run(RELEASE);
    //==================
    }

    else if(letra == 'S') //Se o caractere recebido for a letra 'S'
    {
    // Desliga os 2 motores
    motor1.run(RELEASE);
    motor2.run(RELEASE);
    //==================
    }
    }
    }
    void parear_dispositivo()
    {
    blueToothSerial.begin(9600); //Configura o baud rate do bluetooth como 9600
    blueToothSerial.print("AT");
    delay(400);
    blueToothSerial.print("AT+DEFAULT"); // Restaura configuração de fabrica do Bluetooth
    delay(2000);
    blueToothSerial.print("AT+NAMELabDeGaragem"); // Configura o nome do disopsitivo bluetoothpara "WANDERSON RENATO3" , a legenda do bluetooth não pode passar de 12 caracteres
    delay(400);
    blueToothSerial.print("AT+PIN1234"); // Muda o codigo de acesso para "1234"
    delay(400);
    blueToothSerial.print("AT+AUTH1");
    delay(400);
    blueToothSerial.flush(); // Dá um flush na serial do módulo bluetooth
    }

    ResponderExcluir
  23. Olá ! eu possuo dois módulos HC 05. Eles não vem com o pino "Key", vem com o tal pino "En". Todavia, eu consigo entrar no modo AT. A questão é que quando configuro ambos como "slave", qualquer dispositvo android detecta os meus módulos. Mas como "master" , eles ficam "invisíveis", eles não são encontrados por nenhum dispositivo android. Estou correndo atrás de ajuda por vários fóruns por aí. Queria que os dispositivos androids que possuo, reconhecessem meus módulos como "master". Pois tenho uma aplicação para controlar o teclado do android, via Arduino. Você poderia tentar me orientar sobre o que devo fazer ? muito obrigado por sua atenção !

    ResponderExcluir
    Respostas
    1. Oi Sawadee,

      Nesse caso, é o seu módulo que vai se conectar com o Android, certo ? e não o contrário... Dê uma olhada nesse post que eu fiz para o blog FILIPEFLOP, sobre o HC-05 em modo master: http://blog.filipeflop.com/wireless/tutorial-arduino-bluetooth-hc-05-mestre.html

      Abraço!

      Excluir
  24. eu consigo utilizar o modo slave e master na mesma programação ??

    ResponderExcluir
    Respostas
    1. Oi Giulia,

      Infelizmente não. Ou um modo, ou outro, mas os dois ao mesmo tempo não.

      Abraço!

      Excluir
  25. Estou tendo um problema com a comunicação bluetooth do arduino e um galaxy tab2 10,1. Ele pareia certinho, mas depois dá erro e não funciona mais. O que pode ser? Será alguma programação errada ou o tablet?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Pode ser alguma incompatibilidade entre o tablet e o módulo... Com outros aparelhos o módulo funciona normalmente ? Com um celular, por exemplo.

      Abraço!

      Excluir
  26. Olá, gostaria de enviar a informação de um sensor para um PIC. Para isso, disponho de 2módulos hc-05. queria saber se seria suficiente programá-los (usando o arduino) em modo slave para que um envie o sinal e o outro o capture para transferir ao PIC.

    ResponderExcluir
    Respostas
    1. Boa noite Artur,

      Sim, você pode configurar os módulos no Arduino, do jeito que você precisa. Como depois a comunicação é serial, é relativamente fácil adaptar para uso com o PIC.

      Abraço!

      Excluir
  27. Boa noite
    E possível deixar o modulo HC 05 invisível obrigado jorge

    ResponderExcluir
  28. Boa noite, como eu faço para controlar os motores de um projeto de uma ponte rolantes com o arduino uno e o bluetooth h-06 qual a biblioteca que eu posso usar e o passo é o meu primeiro projeto sobre arduino

    ResponderExcluir