Site icon AranaCorp

Arduino e o Módulo Bluetooth HC-05

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:

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

O módulo Bluetooth HC-05 apresenta 6 pinos que permitem realizar a conexã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


ATENÇÃO:

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:

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.

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.

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

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

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:

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.

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

Exit mobile version