Logo Pisciotta

PISCIOTTA

Soluções Inteligentes

PROFESSOR

Listar
Artigos, curiosidades e muitas dicas.

Aproveite, curta, compartilhe.

M??dulo Bluetooth com Arduino



BLUETOOTH, ARDUINO

2101 Views - 28 Curtidas




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.