Etiquetas:, , , ,
0
(0)

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

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


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).

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.

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.

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?