Foto Pisciotta

PISCIOTTA

Soluções Inteligentes



Professor


Artigos

Apostilas




Módulo Bluetooth com Arduino



490 Acessos - 15 Curtidas

postado 01 de Agosto de 2016 - atualizado 08 de Abril de 2025

Autor: Alex Pisciotta


Saiba usar e configurar os módulos Bluetooth HC-05 e HC-06 e aproveite os benefícios dessa tecnologia confiável e acessível.

Módulos Bluetooth estão ficando cada vez mais baratos e seu uso é bastante facilitado devido principalmente à grande disponibilidade no mercado e possibilidade de interfaceamento com celulares SmartPhones. É cada vez mais fácil conseguir fazer seu próprio aplicativo para celular que permita comunicação através do Bluetooth, e os módulos HC-05 e HC-06 permitem controlar o mundo real através do celular. A tecnologia Bluetooth está no centro da expansão dos dispositivos IoT, e dominar essa tecnologia pode ser fator crucial para desenvolvedores de hardware e software.

Um módulo Bluetooth constrói um caminho físico invisível (o próprio espaço) para a sua informação serial trafegar. Os protocolos de comunicação são encapsulados, ou seja, você não precisa se preocupar com eles pois o circuito presente no módulo faz todo o trabalho por você. Você só precisa considerar o módulo Bluetooth como se fosse um par de fios que possibilita a ligação dos terminais TX e RX do seu microcontrolador.

História do Bluetooth

A tecnologia Bluetooth foi desenvolvida inicialmente pela empresa Ericsson, na Noruega, entre 1989 e 1994, com o intuito de permitir transmissão de áudio sem fio à curtas distâncias, para aplicação em fones de ouvido sem fio. Mais tarde a Ericsson abriu a tecnologia para o mundo e fundou um consórcio de empresas (SIG - Special Interest Group) para permitir a colaboração entre as diversas empresas para aprimorar a tecnologia e permitir a comunicação entre dispositivos de diferentes fabricantes. Foi desenvolvido inicialmente o padrão Bluetooth SPP (Serial Port Protocol, ou protocolo de porta serial), com um protocolo de comunicação exclusivo, que garantia o pareamento de dois dispositivos para troca de informações utilizando frequência de 2.4GHz (a mesma banda das comunicações WiFi). Depois foram criados outros padrões para permitir transferência de imagens (BIP), comunicação com interfaces de usuário (mouses e teclados), e o GATT, que é um padrão adaptativo que se adequa à necessidade do dispositivo/fabricante, expandindo muito as possibilidades dessa tecnologia.

origem do símbolo Bluetooth.

O nome Bluetooth veio de um rei do século X, Harald Blåtand ou, em inglês, Harold Bluetooth. A história conta que Rei Blåtand ajudou a unir povos que guerreavam entre si em partes do que é hoje a Noruega, Suécia e Dinamarca. Da mesma forma, a tecnologia Bluetooth foi criada como um padrão aberto para permitir a conexão e a colaboração entre diferentes produtos e indústrias. O símbolo Bluetooth é uma junção das letras H e B utilizadas naquela região.

Bluetooth na prototipagem com Arduino

Para o público que desenvolve utilizando Arduino ou outra plataforma similar, é grande a oferta de módulos Bluetooth da série HC, pertencente à empresa chinesa Wavesen. Ele não é o único existente no mercado, mas devido ao seu baixo custo, popularizou-se de uma forma gigantesca. É dele que tratamos essencialmente neste artigo.

O módulo Bluetooth HC-0X, por assim dizer, é uma placa de circuito que já vem com o chipset de comunicação Bluetooth, o BC417 da CSR (Cambridge Silicon Radio), uma memória flash externa de 8MB, um cristal, resistores, capacitores e outros componentes mínimos para seu funcionamento, incluindo uma antena desenhada na própria trilha de circuito impresso, facilmente identificada pelo zigzag dourado em uma das extremidades. Se você quiser saber mais sobre os módulos da Wavesen, baixe os documentos do fabricante abaixo:

Esse módulo geralmente é soldado em uma outra placa, geralmente chamada de placa base, que é responsável por disponibilizar os terminais para contato, além de possuir alguns outros componentes para compatibilização dos sinais e indicação do funcionamento do módulo (LEDs indicativos). Essa placa pode ter diferentes formas e pinagens. Abaixo seguem dois exemplos de formatos.


Você pode verificar mais detalhes do BluetoothBee no link BluetoothBee.
Placa mais popular.

É importante ressaltar que os módulos BT da família HC, apesar de poderem ser energizados com tensões de 4 a 6V, utilizam a tensão de 3.3V em seus terminais TX e RX. Portanto, se você colocar diretamente o pino TX a uma saída do Arduino, que trabalha em 5V, você vai queimar o seu módulo Bluetooth. O contrário não causa problema algum, pois o TX do módulo BT enviando sinais de 3.3V para o RX do Arduino não causaria sua queima, e o Arduino conseguiria ainda assim fazer a interpretação dos sinais (pois garante leitura de nível lógico alto a partir de 2.8V segundo o datasheet do ATMEGA328). Mas se você for utilizar com algum outro microcontrolador, verifique se ele é capaz de compreender 3.3V como nível lógico alto; caso negativo você precisará utilizar conversores ativos de nível de tensão.

Para ligar o TX do Arduino ao RX do módulo BT, basta fazer um divisor de tensão com dois resistores, de forma que os 5V da saída TX do Arduino se convertam em 3.3V no RX do módulo.


Existem três modos de operação:

  • Modo Master (Mestre): o módulo é capaz de estabelecer uma comunicação com outros dispositivos Bluetooth, ou seja, é capaz de procurar outros dispositivos e requerer uma conexão;
  • Modo Slave (Escravo): o módulo só pode receber conexões de outros dispositivos Bluetooth;
  • Modo Loopback: é um modo de testes em que o dispositivo recebe dados de um módulo Master e responde com os mesmos dados recebidos.

Diferenças entre HC-05 e HC-06

O Módulo Bluetooth HC-05 pode trabalhar nos 3 modos de operação: Master, Slave e Loopback.

O Módulo Bluetooth HC-06 pode trabalhar apenas no modo de operação Slave.

Em outras palavras, o módulo HC-05 é mais completo, e permite que o dispositivo que utiliza esse módulo consiga rastrear e solicitar pareamento com outros dispositivos. Se compararmos à comunicação USB, é como se ele fosse um computador que busca e reconhece outros dispositivos conectados a ele. Já o HC-06 é mais simples, e só responde a um pedido de comunicação feito por outros dispositivos. Comparando novamente com a comunicação USB, é como se fosse um mouse, que não pode localizar outros dispositivos, mas apenas responde à comunicação do computador.

* Nota: HC-05 e HC-06 são módulos para uso comercial (venda para pessoas comuns, como nós), e seus compatíveis industriais seriam, consecutivamente, o HC-03 e o HC-04.

Consulte aqui um documento comparativo desses dois módulos.

Configurações

Os módulos Bluetooth já vêm com uma configuração padrão de fábrica, mas você pode alterar suas configurações através de comandos AT, que são comandos padronizados enviados serialmente para o módulo. A cada comando AT enviado, uma resposta é retornada, e todos os comandos se iniciam por AT, e devem sempre ser escritos em letras maiúsculas.

HC-06

Os módulos HC-06, por serem mais simples, possuem basicamente 5 comandos disponíveis. Confira o datasheet desse módulo no link abaixo.

Estou utilizando um HC-06 da Electrofreaks, um Bluetooth Bee. Para entrar no modo AT, basta alimentá-lo e não parear com nenhum outro dispositivo e ele estará pronto para receber comandos AT. Os parâmentros padrões são: Baud Rate 9600, ID: linvor e Senha: 1234. Abaixo encontra-se a lista dos comandos e respostas esperadas:


Código Descrição Exemplo de Retorno
AT Testa Comunicação OK
AT+VERSION Verifica a Versão de Software Linvor V1
AT+NAMEnovonome Altera o nome do dispositivo para novonome OKsetname
AT+PINxxxx Altera a senha do módulo para xxxx xxxx deve ser uma sequência de 4 números
AT+BAUD1 Seta a taxa de comunicação para 1200 OK1200
AT+BAUD2 Seta a taxa de comunicação para 2400 OK2400
AT+BAUD3 Seta a taxa de comunicação para 4800 OK4800
AT+BAUD4 Seta a taxa de comunicação para 9600 (Padrão de Fábrica) OK9600
AT+BAUD5 Seta a taxa de comunicação para 19200 OK19200
AT+BAUD6 Seta a taxa de comunicação para 38400 OK38400
AT+BAUD7 Seta a taxa de comunicação para 57600 OK57600
AT+BAUD8 Seta a taxa de comunicação para 115200 OK115200
AT+BAUD9 Seta a taxa de comunicação para 230400 OK230400
AT+BAUDA Seta a taxa de comunicação para 460800 OK460800
AT+BAUDB Seta a taxa de comunicação para 921600 OK921600
AT+BAUDC Seta a taxa de comunicação para 1382400 OK1382400

Importante ressaltar que computadores não podem se comunicar a taxas acima de 115.200bps.

Para realizar a comunicação serial com o módulo Bluetooth nós podemos utilizar um Arduino, mas precisamos ter algo muito importante em mente: Comunicação Serial pura é ponto-a-ponto, ou seja, só é possível fazer a comunicação serial entre 2 dispositivos. Existem protocolos de comunicação serial que permitem a comunicação entre mais de 2 dispositivos, como o RS-485, que envia um endereço do dispositivo destino junto com o dado, fazendo com que os outros dispositivos ligados na rede simplesmente ignorem aquele dado. Mas a comunicação serial pura não permite comunicar mais de 2 dispositivos e, no caso temos 3:

  • o computador,
  • o arduino e
  • o módulo Bluetooth.

Outro problema é que o Arduino, enquanto se comunica com o computador pela porta USB, também está utilizando o canal de comunicação serial do microcontrolador, TX e RX. Esses sinais têm uma derivação e passam por um conversor ( que antes era o chip FTDI, mas agora é outro microprocessador, o 16U) para transmitir a informação pelo cabo USB. Ou seja, TX e RX ficam ocupados enquanto o Arduino se comunica pela porta USB. Isso faz com que precisemos de um artifício para poder enviar os comandos do computador para o Arduino e o Arduino envie ao módulo Bluetooth por um outro canal de comunicação.

Existem placas Arduino, como o MEGA2560, que possuem mais de uma porta serial, o que permitiria essa transferência sem maiores complicações. Mas o Arduino Uno só possui um canal serial. Ainda bem que existe uma biblioteca que "emula" uma nova porta serial em quaisquer outros pinos do Arduino, suprindo nossa necessidade. O nome dessa biblioteca é SoftwareSerial.h, e ela já está inclusa na IDE do Arduino, e existe até um exemplo que você pode utilizar para configurar o seu módulo Bluetooth.

Nesse exemplo, são utilizados os pinos 10 e 11 para a comunicação, sendo o primeiro como RX e o segundo para TX. Vale ressaltar que em uma comunicação serial, a conexão deve ser cruzada, ou seja, o TX do primeiro dispositivo ligado ao RX do segundo dispositivo e vice-versa. Segue abaixo a transcrição dos comentários escritos por Tom Igoe, traduzidos para o Português. Repare que eu modifiquei o arquivo para permitir o uso na configuração do módulo Bluetooth.




/* Comentários em Português
  Software serial: teste de múltiplas seriais
  Recebe da serial física, envia para a serial emulada.
 Recebe da serial emulada, envia para a serial física.
 O circuito: 
 * RX é o pino digital 10 (conectar ao TX do outro dispositivo)
 * TX é o pino digital 11 (conectar ao RX do outro dispositivo)
  Nota:
 Nem todos os pinos do Mega e Mega 2560 suportam interrupções por mudança de estado, 
 então somente os seguintes pinos podem ser utilizados como RX: 
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
  Nem todos os pinos do Leonardo suportam interrupções por mudança de estado, 
 então somente os seguintes pinos podem ser utilizados como RX: 
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
 
 Criado a algum tempo incerto
 modificado em 25 de Maio de 2012
 por Tom Igoe
 baseado no exemplo de Mikal Hart
 
 Este código exemplo é de domínio público
Exemplo modificado por Alex Pisciotta pata configuração de Módulo Bluetooth

 */
//Carrega a biblioteca SoftwareSerial
#include <SoftwareSerial.h>
    
//Define os pinos para a serial  (RX, TX)
SoftwareSerial novaSerial(10,11);
String dado = "";
    
void setup()  
{ 
  Serial.begin(9600); //Inicia a serial padrão
  Serial.println("Configurar HC-06");
  Serial.println("Nao utilize quebra de linha");
  Serial.println("Envie os comandos AT:"); 
  novaSerial.begin(9600); //Inicia Serial emulada
} 
    
void loop() 
{ 
  if (novaSerial.available()) //Se existir dado na novaSerial
  { 
     while(novaSerial.available()) //Enquanto existir dado
     {
       dado = dado + (char)novaSerial.read(); //Armazena os caracteres
       delay(5); //Aguarda 5ms para que haja tempo da mensagem chegar
     } 
   Serial.println(dado); //E depois escreve a mensagem na serial padrão
   dado = ""; //Limpa o dado
  } 
  if (Serial.available()) //Se houver dado na serial padrão
  { 
    delay(5); //aguarda 5ms
    novaSerial.write(Serial.read()); //Escreve na novaSerial o que foi lido na serial padrão
  } 
}

Carregue esse software no seu Arduino, faça as ligações do módulo BT conforme a figura abaixo, plugue o Arduino à porta USB do seu computador e então abra o Serial Monitor do seu Arduino.

Basicamente estamos alimentando o módulo BT com 3.3V e GND, e ligando o terminal RX do Arduino (pino 10) ao TX do módulo Bluetooth (pino 2), e o TX do Arduino (pino 11) a um divisor de tensão que transformará os sinais de 5V em algo próximo de 3.3V para aplicar ao RX do módulo Bluetooth (pino 3). Eu utilizei os resistores de 3k3 e 1k5 para compatibilizar as tensões, mas outras combinações são possíveis, e podem ser calculadas pela fórmula do divisor de tensão.

Digitando o comando AT, você deve receber a resposta OK na tela, vinda do seu módulo Bluetooth. Se isso acontecer, estará tudo certo para você executar os comandos e observar as respostas de confirmação.

A seguir se observa a ligação dos pinos do módulo BluetoothBee para referência aos sinais disponíveis.

Baixe aqui a folha de dados do HC-06 BluetoothBee da ElecFreaks.

Uma boa experiência para entender o funcionamento é utilizar o App Android chamado Bluetooth SPP Pro onde se pode enviar e receber dados do SerialMonitoring, fazendo uma espécie de chat entre o computador e o dispositivo Android.

Outra experiência bacana é utilizar o aplicativo Speech Bluetooth: Esse aplicativo utiliza o GoogleTalk para traduzir a frase falada (captada pelo microfone) em uma sequência de caracteres que são enviados via Bluetooth ao Arduino, que por sua vez envia para a porta Serial padrão, chegando ao SerialMonitoring. Dessa forma, a frase falada ao celular é enviada ao computador. Observe que as letras com acentos não chegam corretamente porque não fazem parte da tabela ASCII, ou seja, são caracteres especiais. Para que eles aparecessem na tela teríamos que modificar o programa do Arduino para "tratar" esses caracteres e exibi-los adequadamente. Mesmo assim, poderíamos utilizar esse aplicativo para enviar comandos de Fala ao Arduino, para ligar/desligar lâmpadas e outras cargas de nossa residência.

Veja abaixo o vídeo mostrando as experiências com o HC-06.

HC-05

Para o módulo HC-05 entrar em modo de Comandos AT, deve-se polarizar pino Key (ou Enable) em nível lógico alto. O módulo que utilizo possui a placa base FC-114, que tem um pequeno botão no canto inferior direito, e ao pressioná-lo o módulo fica habilitado a receber os comandos AT.

Os comandos para o HC-05 são um pouco diferentes, como pode ser observado na tabela seguinte, e os comandos devem ser finalizados com quebra de linha (o famoso ), portanto o SerialMonitoring do Arduino deve ser configurado para Both NL & CR (ambos nova linha e retorno de carro, em inglês). Abaixo você encontra a folha de dados do fabricante e a lista de comandos AT suportados.

Código Descrição
AT+ROLE Informa o modo de Operação: Loopback, Master ou Slave
AT+ADDR? Endereço do módulo na rede
AT+RNAME? Retorna o nome do módulo remoto
AT+INQ Inicia a busca de outros dispositivos BT
AT+RMAAD Exclui a lista de dispositivos pareados
AT+PAIR Realiza o pareamento com o BT remoto
AT+LINK Estabelece conexão como BT remoto

Você encontra uma experiência bastante interessante com o HC-05 neste post do Blog do FilipeFlop.com, uma ótima referência para estudo de Arduino e outras tecnologias. Nesse post é ensinado a estabelecer dois arduinos com módulos bluetooth, estando um deles como escravo e o outro como Mestre utilizando o HC-05. Basicamente é coletado o endereço do BT escravo através do BT mestre, que usa essa informação para se conectar automaticamente ao escravo todas as vezes que for ligado. No exemplo, o mestre faz com que o escravo se comporte como um pisca-pisca, mas você consegue modificar o programa pra fazer muita coisa interessante.

Experiências com Aplicativos

Aqui no Pisciotta.com.br você encontra uma montagem feita com o módulo Bluetooth e o aplicativo Bluetooth RC Controller para controlar um carrinho. Clique aqui.

Muitas outras experiências podem ser realizadas com módulos Bluetooth e, conforme eu for fazendo, postarei aqui.

Bluetooth Low Energy (BLE ou Bluetooth 4.0)

A nova tecnologia de baixa energia apresenta protocolos diferentes do Bluetooth convencional, e permite o envio de informações a maiores distâncias com um consumo de energia ainda menor. Estão sendo utilizados em uma infinidade de dispositivos, permitindo uma rápida expansão do movimento IoT.

Com o BLE é possível localizar um usuário dentro de uma loja, por exemplo, utilizando técnicas de triangulação. Dessa forma, uma loja pode enviar mensagens sobre sapatos quando o cliente se aproximar da vitrine, sem que o cliente tenha nenhum aplicativo da loja instalado em seu smartphone.

Beacons são espalhados pela loja (ou qualquer outro ambiente) para permitir essa triangulação.

Em breve você encontrará aqui novas experiências e informações de outros módulos de comunicação Bluetooth.