Etiquetas: , , , ,

O Arduino pode comunicar-se com outros dispositivos (Smartphone, computador ou algum outro microcontrolador) via conexão Bluetooth utilizando um módulo HC-05 (mestre/escravo). Desse modo, é possível conectar a sua placa Arduino a outros sistemas, para enviar e receber dados. A comunicação por Bluetooth possibilita, por exemplo, controlar o seu robô por meio de uma aplicação para Smartphone, exibir as medidas de um sensor no seu computador ou ainda permitir que outros robôs comuniquem-se entre si.

Leia antes: Comunicação Serial com Arduino

Equipamento:

  • Computador
  • 2 x placas Arduino UNO
  • 2 x cabos USB para conectar o Arduino ao computador
  • 2 x módulos Bluetooth HC-05 ZS-040 (ou 1 módulo HC-06 e 1 módulo HC-05)
  • Cabos Dupont M/F

Apresentação do módulo Bluetooth HC-05

module-bluetooth-hc05 Arduino e o Módulo Bluetooth HC-05

O módulo Bluetooth HC-05 apresenta 6 pinos que permitem realizar a conexão.

  • VCC pino de alimentação. Tipicamente conectado ao pino 5V do Arduino.
  • GND terra. Tipicamente conectado ao pino GND do Arduino
  • RX pino de recepção. Tipicamente conectado ao pino de transmissão (TX) do Arduino
  • TX pino de transmissão. Tipicamente conectado ao pino de recepção (RX) do Arduino
  • Status retorna 1 quando o módulo é conectado
  • Key ou EN precisam estar alimentados para entrar no modo de configuração e não pode estar conectados para entrar em modo de comunicação.

A particularidade do módulo Bluetooth HC-05 é que pode ser utilizado em modo escravo (caso em que será equivalente a um módulo HC-06, com a mesma forma de utilização) ou em modo mestre, o que significa que pode conectar-se a um outro módulo Bluetooth (HC-06, HC-05 em modo escravo ou outro) de forma autônoma, sem ação externa.

Esquema de ligação para configuração

arduino-bluetooth-hc05_bb Arduino e o Módulo Bluetooth HC-05


ATENÇÃO:

  • Utilizamos os pinos 2 e 3 para a comunicação serial com o Arduino UNO. Em função da placa escolhida, esses pinos podem ser incompatíveis com a comunicação SoftwareSerial. Em especial no caso das placas Mega, Micro e Leonardo. Verifique a documentação.
  • Como o nível lógico do módulo Bluetooth é 3,3V, recomendamos usar um divisor de tensão para reduzir a tensão de 5V do Arduino. (1k de resistência entre pin3 e Rx; 2k Ohm entre Rx e GND).
arduino-bluetooth-hc05-voltage-div_bb Arduino e o Módulo Bluetooth HC-05

Configuração do módulo HC-05

A configuração do módulo Bluetooth pode ser interessante para verificar o seu funcionamento e para modificar os seus parâmetros, sobretudo se quiser utilizá-lo no modo master. O módulo deve estar alimentado, mas não emparelhado, e o pino Key/EN deve estar alimentado a 3V quando o módulo for aceso. Quando o módulo estiver em modo de configuração, o LED se acenderá por dois segundos a intervalos de dois segundos.

Abra o monitor serial do Arduino e certifique-se de que a opção de fim de linha esteja a exibir “Nova Linha”  e que a taxa de transferência esteja regulada a 9600.

Observe que o módulo Bluetooth HC-05 entra no modo AT com uma taxa de transferência (baud rate) de 38400 bps.

Código de configuração

Para gerir a comunicação com o módulo HC-05, utilizamos a biblioteca SoftwareSerial.h, que permite criar uma porta serial distinta da utilizada pela porta USB. O código abaixo permite modificar as configurações do módulo HC-05 (nome, código PIN, taxa de transmissão (baud rate), etc.) e localizar informações como o número da versão do firmware.

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define baudrate 38400

String msg;

SoftwareSerial hc05(rxPin ,txPin);

void setup(){
  pinMode(rxPin,INPUT);
  pinMode(txPin,OUTPUT);
  
  Serial.begin(9600);
  Serial.println("ENTER AT Commands:");
  hc05.begin(baudrate);
}

void loop(){
    readSerialPort();
    if(msg!="") hc05.println(msg);
    
    if (hc05.available()>0){
      Serial.write(hc05.read());
    }
}

void readSerialPort(){
  msg="";
 while (Serial.available()) {
   delay(10);  
   if (Serial.available() >0) {
     char c = Serial.read();  //gets one byte from serial buffer
     msg += c; //makes the string readString
   }
 }
}

Para uma boa comunicação, certifique-se de seleccionar a taxa de transmissão correta no monitor serial, bem como “nova linha” (NL) nas configurações de comunicação.

Comandos de configuração

Além da vantagem de poder se utilizado como módulo mestre, o módulo Bluetooth HC-05 também permite conhecer as configurações salvas.

Em geral, ao digitar no monitor serial AT+<command>?, obtém-se o valor registrado no módulo (ex: AT+PSWD? para descobrir o código PIN do módulo). Ao inserir a linha AT+<command>=<Param>, é possível definir um valor para o módulo (ex: AT+PWSD=0000 para alterar o código PIN para 0000).

Veja abaixo alguns comandos AT básicos:

  • Para testar a comunicação, digite AT no monitor serial da IDE do Arduino. Se tudo estiver bem, o módulo deverá responder OK.
  • Para verificar o nome do módulo, digite AT+NAME=<Param> no módulo. Ele deverá responder OK. (Ex: Para alterar o nome do módulo para BTM1, digite AT+NAME=BTM1)
  • Para alterar o código PIN do módulo, digite AT+PSWD=<Param> . O módulo deverá responder OK. (Ex: se quiser alterar o PIN para 0000, digite AT+PSWD=0000)
  • AT+ROLE=<Param> para modificar a função do módulo para mestre ou escravo (Ex: para transformar o módulo em mestre, AT+ROLE=1).
  • Para modificar a velocidade de transmissão do módulo (somente se necessário), digite AT+UART=<Param1>,<Param2>,<Param3>, sendo Param1, 2 e 3 as configurações de comunicação serial: o baud rate, o bit de parada e o bit de paridade, respectivamente. (Em modo padrão, 9600,0,0. Ex: se quiser alterar a taxa de transmissão para 115200, digite AT+UART=115200,0,0).

Veja outros comandos AT para o módulo Bluetooth HC-05 neste link.

ATENÇÃO: Existem diferentes versões do módulo HC-05 e a lista de comandos AT pode variar, assim como os procedimentos. Verifique o número de série marcado no módulo e a versão do firmware, digitando o comando AT+VERSION?. No nosso caso, o módulo HC-05 é da série ZS-040 e da versão 2.0-20100601.

N.B.: Se não funcionar, verifique a conexão e a condutividade dos cabos e a taxa de transmissão (baud rate).

Se tiver dificuldades para configurar o seu módulo Bluetooth HC-05, pode deixar um comentário abaixo.

Configuração do módulo escravo

Para o módulo escravo, pode alterar o nome digitando AT+NAME=HC05-Slave e escolher as configurações de comunicação e a senha que desejar. Certifique-se de que eles são iguais aos dos módulo master.

  • AT retorna OK
  • AT+NAME=HC05-Slave
  • AT+UART=9600,0,0
  • AT+ROLE=0
  • Insira AT+ADDR para obter o endereço do módulo escravo (no nosso caso, +ADDR:98d3:32:21450e)

Também é possível utilizar um módulo HC-06 como módulo escravo.

Configuração do módulo mestre

Para o módulo mestre, será preciso modificar a função do módulo e escolher as mesmas configurações de comunicação que para o módulo escravo.

  • AT retorna OK
  • AT+NAME=HC05-Master
  • AT+UART=9600,0,0
  • AT+ROLE=1
  • É preciso salvar o endereço do módulo escravo para que o módulo mestre consiga parear: AT+BIND=98d3,32,21450e (substitua os dois pontos “:” por vírgulas “,”)

Esquema de ligação para a comunicação

No modo de comunicação, o pino Key/EN não pode estar alimentado.

arduino-bluetooth-hc05-communication Arduino e o Módulo Bluetooth HC-05

Código de comunicação

Com os módulos já configurados, poderá desconectar o pino Key ou EN, carregar os código abaixo nas suas placas Arduino e acender novamente o módulo HC-05 para entrar em modo de comunicação.

Assim como para o módulo HC-06, nós utilizamos a biblioteca SoftwareSerial.h. Aqui estão algumas das suas funções:

  • SoftwareSerial hc05(Rx,Tx) para definir a porta serial e os pinos que servirão para a comunicação
  • hc05.begin() para definir a taxa de transmissão
  • hc05.available() para verificar se os dados estão disponíveis no buffer da porta serial
  • hc05.read() para ler os dados da porta serial, um byte por vez
  • hc05.print() para enviar uma cadeia de caracteres em ASCII
  • hc05.write() para enviar dados, um byte por vez.
  • hc05.flush() para esvaziar os dados do buffer.

Código Mestre

#include <SoftwareSerial.h>

SoftwareSerial ArduinoSlave(2, 3);
String answer;
String msg;

void setup() {

  Serial.begin(9600);
  Serial.println("ENTER Commands:");
  ArduinoSlave.begin(9600);

}

void loop() {
  //Read command from monitor
  readSerialPort();

  //Read answer from slave
  while (ArduinoSlave.available()) {
    delay(10);
    if (ArduinoSlave.available() > 0) {
      char c = ArduinoSlave.read();  //gets one byte from serial buffer
      answer += c; //makes the string readString
    }
  }
  //Send data to slave
  if (msg != "") {
    Serial.print("Master sent : ");
    Serial.println(msg);
    ArduinoSlave.print(msg);
    msg = "";
  }
  //Send answer to monitor
  if (answer != "") {
    Serial.print("Slave recieved : ");
    Serial.println(answer);
    answer = "";
  }
}

void readSerialPort() {
  while (Serial.available()) {
    delay(10);
    if (Serial.available() > 0) {
      char c = Serial.read();  //gets one byte from serial buffer
      msg += c; //makes the string readString
    }
  }
  Serial.flush();
}

Código Escravo

#include <SoftwareSerial.h>

SoftwareSerial ArduinoMaster(2, 3);
String msg;

void setup() {
  Serial.begin(9600);
  ArduinoMaster.begin(9600);
}

void loop() {
  readSerialPort();

  // Send answer to master
  if (msg != "") {
    Serial.print("Master sent : " );
    Serial.println(msg);
    ArduinoMaster.print(msg);
    msg = "";
  }
}

void readSerialPort() {
  while (ArduinoMaster.available()) {
    delay(10);
    if (ArduinoMaster.available() > 0) {
      char c = ArduinoMaster.read();  //gets one byte from serial buffer
      msg += c; //makes the string readString
    }
  }
  ArduinoMaster.flush();
}




Ao abrir os dois monitores seriais correspondentes e digitar um comando no monitor da placa mestre, poderá ver o seguinte resultado: a placa mestre envia uma cadeia de caracteres que a placa escrava recebe e reenvia. Assim se verifica que a comunicação está a funcionar nos dois sentidos.

master-and-slave-connected-hc05 Arduino e o Módulo Bluetooth HC-05

Se tiver dificuldade para configurar ou comunicar com o seu módulo Bluetooth HC-05, pode contactar-nos ou deixar um comentário.

Aplicação

E então, o que faria se a sua placa Arduino pudesse comunicar-se com outros sistemas? Escreva-nos um comentário.

Fontes