Componentes Eletronicos

Módulos Bluetooth HC05 e HC06 para Comunicação com Dispositivos Móveis com Arduino

Eletrogate 22 de junho de 201710 min

Introdução

O Arduino vem sendo amplamente utilizado em projetos em que é preciso fazer a comunicação sem fio de sensores, controladores e processadores. A comunicação bluetooth, já popularizada e usada em diversos equipamentos como Smartphones, tablets, Headsets, notebooks e outros, é uma das melhores opções para implementar redes sem fio com Arduino.

O HC05 e o HC06 são os principais módulos Bluetooth para interfacear com Arduino. Além de fáceis de usar e prototipar, são baratos e facilmente encontrados em qualquer distribuidor de eletrônicos que trabalhe com Arduino.

Neste post você vai conhecer um pouco mais sobre a tecnologia bluetooth, sobre os módulos HC05 e HC06, e vai aprender a fazer o seu arduino conversar com seu Smartphone por meio de uma rede Bluetooth.

 

Redes bluetooth são coração da IoT

A tecnologia Bluetooth consiste em um protocolo para comunicação de rádio para uso pessoal, isto é, é uma especificação de rede sem fio classificada como PAN (Personal Area Network). Foi desenvolvida inicialmente em 1994 pela Ericsson como uma alternativa sem fio ao protocolo RS-232. A faixa de frequência utilizada pelo Bluetooth é de 2.4 a 2.485 GHz.

Um grupo de empresas e centros de desenvolvimento chamado de Bluetooth Special Interest Group (conheça aqui) é responsável por escrever as especificações do protocolo e lançar versões atualizadas e novas funcionalidades.

O protocolo é licenciado e para que um produto possa estampar o emblema da comunicação bluetooth é preciso estar de acordo com todas as especificações do protocolo. Para cada versão do Bluetooth existem testes de qualificação pelos quais um produto deve passar para poder ser certificado como um equipamento que utiliza comunicação Bluetooth.

O Arduino vem sendo amplamente utilizado em projetos em que é preciso fazer a comunicação sem fio de sensores, controladores e processadores. A comunicação bluetooth, já popularizada e usada em diversos equipamentos como Smartphones, tablets, Headsets, notebooks e outros, é uma das melhores opções para implementar redes sem fio com Arduino.

O HC05 e o HC06 são os principais módulos Bluetooth para interfacear com Arduino. Além de fáceis de usar e prototipar, são baratos e facilmente encontrados em qualquer distribuidor de eletrônicos que trabalhe com Arduino.

As principais versões já lançadas do protocolo são:


Tabela 1:
Principais versões do Bluetooth

Os módulos bluetooths disponíveis no mercado estão divididos em três classes, conforme o alcance e potência máxima, são elas:

Tabela 2: Classes bluetooth de acordo com potência máxima e alcance

Atualmente existem diversos fabricantes e módulos bluetooth, assim como softwares e aplicativos disponíveis gratuitamente que permitem a integração dessa tecnologia em seus projetos eletrônicos.


Aplicações Módulos HC05 e HC06

O módulo Bluetooth HC-05 pode trabalhar tanto em modo mestre (faz e aceita pareamento com outros dispositivos) como modo escravo (apenas aceita pareamento). Já o módulo HC-06 pode trabalhar apenas em modo escravo.

Ambos possuem implementados a versão 2.0+EDR do bluetooth, e são aplicados principalmente para substituir conexões seriais sem fio, propósito para o qual é usado o perfil SPP (Serial Port Profile) do bluetooth. Os dois módulos pertencem a classe dois, e portanto possuem alcance de aproximadamente 10 metros e dissipam uma potência máxima de 2.5 mW.

Importante observar que a tensão de comunicação nos módulos é de 3.3 V, ou seja, apesar de a alimentação ser 5V, os pinos RX e TX utilizam sinais de 3.3V para se comunicar. Desta forma, é necessário utilizarmos divisor de tensão para obter 3.3 V a partir da saída de 5V do TX do Arduino.

Como o RX do Arduino apenas irá receber os sinais lógicos do HC05 e o Arduino entende 3.3V como nível alto, não necessidade de fazer o divisor para o TX do HC05 (que vai para o RX do Arduino), mas apenas no RX do HC05 (que recebe sinais do TX do Arduino)

Dentre as aplicações desses dois módulos estão:

  • Transmissão de dados de sensores;
  • Comunicação entre duas placas arduino para troca de dados;
  • Transmissão de dados para atuadores;
  • Comunicação do arduino com Smartphone e outros dispositivos móveis;

Agora que você conhece os principais conceitos por trás do bluetooth e os módulos HC-05 e HC-06 para utilizar com arduino, vamos implementar o nosso primeiro projeto utilizando comunicação bluetooth.


Descrição Projeto

Neste projeto vamos mostrar como interfacear um Arduino Uno R3 com o seu smartphone Android. Por meio da conexão bluetooth entre o arduino e o smartphone vamos informar na tela do celular o estado de uma chave monitorada pelo Arduino, e no sentido inverso, vamos enviar comandos do celular para o arduino para fazê-lo ativar e desativar um led conectado em uma de suas portais digitais.

Assim, são três dimensões principais do projeto:

  • Estabelecer comunicação bluetooth entre o arduino e o celular/tablet por meio de um módulo HC-05 ou HC-06;
  • Ler o estado de uma chave com o Arduino e enviar para o celular para ser mostrado na tela;
  • Enviar comandos do celular para o Arduino para que ele ative e desative um led;

Aspectos hardware

Materiais necessários para o projeto com Módulo Bluetooth HC-05/HC-06 e Arduino

Caso você utilize um HC-05, a conexão bluetooth poderá ser estabelecida tanto a partir do módulo como a partir do celular. Já se você optar pelo HC-06, você vai ter que fazer o pareamento a partir do celular, pois este módulo opera apenas em modo escravo, e não faz operações de busca e pareamento por si só.

Ligações de hardware

Para este projeto vamos utilizar o módulo HC-05, que pode ser ligado tanto em modo mestre como em modo escravo. Os 6 pinos do HC-05 estão bem identificados no módulos e consistem nos seguintes:

  • State
  • RX
  • TX
  • GND
  • +5V
  • EN

Os pinos RX e TX são os canais de comunicação do módulo. O RX do módulo deve ser ligado ao TX do arduino por meio do divisor de tensão. O TX do módulo pode ser ligado direto ao RX do Arduino.

O pino +5V que é o pino de alimentação e o GND é a referência de alimentação, que deve ser a mesma do Arduino. O pino EN é utilizado para habilitar o modo de comandos AT do módulo bluetooth e também vamos ligá-lo por conveniência, para poder testar o módulo caso preciso.

Os comandos AT são um set de comandos que podem ser enviados para o módulo por meio de um terminal serial. Esses comandos são usados para configurar o módulo e poder conversar com ele.

Para a nossa montagem, vamos utilizar os pinos RX e TX, +5V e GND. Veja na figura abaixo como ficaram as ligações de hardware:

Editado por Gustavo Murta

O Arduino UNO R3 dispoe de um led onboard conectado ao pino 13, vamos utilizá-lo para identificar os comandos enviados pelo celular.

Agora que a montagem está pronta e o aplicativo SPP Bluetooth tools pro está instalado em seu dispositivo móvel, é hora de programar o Arduíno para conversar com o módulo Bluetooth e parear o celular com o nosso hardware.

Aspectos de software

O nosso firmware será o seguinte:

// Carrega a biblioteca SoftwareSerial
#include <SoftwareSerial.h>

int pushButton = 10; // pino que lerá o estado do botão
int led = 13;
int stateOfButton = 0;
int LastState = LOW;
char buf;

void setup(){
  Serial.begin(9600);
  pinMode(pushButton, INPUT);
  pinMode(led, OUTPUT);
  delay(1000);
}

Na figura 2 temos as variáveis que declaramos e a função void setup(). Veja que nós iniciamos a comunicação serial com um baud rate de 9600 e inicializamos o pino 13 como saída(usado para ativar o led do arduino) e o pino 10 como entrada (será usado para ler o estado do pushbutton). Além disso, vamos usar a biblioteca SoftwareSerial.h, que possui várias funções para manipular a porta serial.

void loop(){
  if (LastState != digitalRead(pushButton){
    if (digitalRead(pushButton) == HIGH){
      Serial.println("Estado da chave = Ligado");
      LastState = HIGH;
    }else{
      Serial.println("Estado da chave = Desligado");
      LastState = LOW;
    }
  }
  verificaComandoCelular();
  delay(1000);
}

 

Na figura 3 temos a função void loop(). Aqui nós avaliamos se houve alguma mudança no estado do pushbutton. Caso o estado tem mudado de desligado para ligado, nós enviamos para a porta serial a mensagem “Estado da chave = Ligado”. Caso a mudança tenha sido o contrário, nós enviamos para a porta serial a mensagem “Estado da chave = Desligado”.

Como a porta serial (pinos TX e RX) estão ligados ao módulo HC05, a mensagem é enviada para o módulo, e caso o módulo esteja conectado com algum dispositivo móvel, a mensagem é repassada para esse dispositivo.

Ainda no loop nós chamamos a função verificaComandoCelular(), mostrado na figura abaixo:

void verificaComandoCelular(){
  int watchDogCounter = 0;
  while(Serial.available() > 0){
    buf = Serial.read();
    
    // Caracter L para ligar o led
    Serial.println(buf);
    if (buf == 'L')
      digitalWrite(13, HIGH);

    // Caracter D para desligar o led
    if (buf == 'D')
      digitalWrite(13, LOW);

    // Se ficar mais de 5 segundos no loop, sai automaticamente
    delay(100);
    watchDogCounter++;
    if (watchDogCounter > 50)
      break;
  }
}

Esta função monitora a porta serial com a função serial.available(), implementada na biblioteca softwareSerial.h, que nós adicionamos no início do programa. Esta função retorna o número de bytes disponíveis na porta serial. Assim, sempre que o Arduino receber algum dado na porta serial enviado pelo módulo HC05 (que por sua vez receberá os dados via bluetooth do celular), esta função irá nos dizer o número de bytes recebidos.

Sempre que algum byte chegar na porta serial, vamos avaliar se foi o caractere ‘L’ ou ‘D’. Caso o caractere ‘L’ tenha sido recebido, o programa acende o led conectado ao pino 13 do arduino. Caso o caractere recebido tenha sido ‘D’, o programa apaga o led.

Você também pode conferir o código completo e atualizado visitando o repositório desse post no GitHub da Eletrogate.

OBS. importante : Para carregar o programa no Arduino, desconecte os pinos TX e RX do módulo Bluetooth, para não ocorrer conflito com a serial. 

 


Botando pra Rodar!

Antes de começar a enviar e receber comandos nós precisamos conectar o módulo HC05 a um celular ou tablet. Para isso, faça o seguinte:

1 – Energize o módulo HC05 conectando o arduino na porta USB de seu PC ou notebook;

2 – Habilite o bluetooth em seu celular/tablet;

3 – Abra o aplicativo Bluetooth SPP tools pro;

4 – Na tela inicial você verá que o aplicativo está fazendo uma varredura para encontrar os dispositivos mais próximos. O módulo HC05 geralmente aparece com o nome LINVOR ou HC05. Selecione-o e a tela abaixo será exibida. Clique em conectar para estabelecer o link bluetooth com o módulo;

Figura 5: Tela de conexão com módulo HC05

Figura 5: Tela de conexão com módulo HC05

5 – Uma vez conectado, escolha a opção “byte stream mode” para visualizar dados e enviar comandos;

Figura 6: Escolha a opção byte stream mode

Figura 6: Escolha a opção byte stream mode

6 – Agora você verá na tela os dados enviados pelo HC05 e poderá enviar comandos para o módulo. Se você pressionar a chave, a mensagem “Estado da chave = Ligado” será exibida na tela do aplicativo. Quando você soltar, a mensagem “Estado da chave = Desligado” será exibida.

7 –  Para enviar comandos, basta digitar o caractere ‘L’ e clicar na tecla de envio. Você verá o led conectado ao pino 13 acendendo. Se enviar ‘D’, o led no pino 13 irá apagar. Veja na figura 8 como você verá os dados na tela  do tablet/celular.

Figura 7: Envio e recebimento de dados com módulo HC05 conectado ao tablet

Figura 7: Envio e recebimento de dados com módulo HC05 conectado ao tablet


Considerações Finais

É isso por hoje pessoal!

Neste post nós montamos o módulo HC05 com o Arduino UNO. Com o Arduino monitoramos o estado de uma chave e enviamos essa informação para o módulo HC-05, que por sua vez enviou para um dispositivo Android por meio de uma conexão bluetooth.

O dispositivo móvel apresenta os dados na tela por meio do aplicativo Bluetooth SPP Tools Pro. No sentido inverso, enviamos comandos do tablet para o módulo HC05/Arduino para acender e desligar um led.

Ao invés do estado da chave, você poderia ler um sensor de temperatura, de corrente, de umidade, e vários outros. E além de acender o led com comandos do celular, você poderia acionar um motor de passo, controlar um sinal PWM para variar a luminosidade de uma lâmpada e várias outras aplicações.

O que achou? Faça a sua própria montagem e nos conte como foi o desenvolvimento de sua aplicação!

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

22 de junho de 2017

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!