Site icon AranaCorp

Arduino e o módulo Bluetooth HC-06

arduino and hc06

É possível comunicar com o seu Arduino via conexão Bluetooth utilizando o módulo HC-06 (escravo). Isso permite conectar a placa Arduino a um outro sistema (Smartphone, computador ou outros microcontroladores), para receber e enviar dados. A comunicação por Bluetooth permite, por exemplo, controlar o seu robô por meio de uma aplicação para Smartphone ou receber os valores de um sensor no seu computador.

Leia antes: Comunicação Serial com Arduino

Equipamento

Apresentação do módulo HC-06

O módulo Bluetooth HC-06 apresenta 4 pinos que permitem estabelecer a comunicação serial.

N.B.: Por tratar-se de um módulo escravo, o módulo HC-06 não pode conectar-se a outros dispositivos por si só. Para isso, é necessário usar um módulo mestre, como o módulo Bluetooth HC-05.

Esquema de ligação

Alguns módulos HC-06 funcionam em 3V3 e não suportam o nível de tensão de 5V no pino Rx. Neste caso, é necessária uma ponte divisora de tensão para converter o sinal lógico (resistência de 1k entre pin3 e Rx, e 2k Ohm entre Rx e GND).


ATENÇÃO: Utilizamos aqui os pinos 2 e 3 do Arduino UNO. Em função do microcontrolador utilizado, os pinos que servem para a comunicação SoftwareSerial podem ser diferentes. É o caso das placas Arduino Mega, Micro e Leonardo, especialmente. Verifique a documentação.

Configuração do módulo HC-06

A configuração do módulo Bluetooth pode ser interessante para testar o funcionamento do módulo e para modificar os seus parâmetros, sobretudo quando utilizamos diversos módulos. O módulo deve estar alimentado, mas não emparelhado (o LED deve piscar).

O código a seguir permite modificar o nome, o código PIN e a taxa de transmissão (baud rate) do módulo HC-06

#include <SoftwareSerial.h>

SoftwareSerial hc06(2, 3);

void setup() {
  //Initialize Serial Monitor
  Serial.begin(9600);
  Serial.println("ENTER AT Commands:");
  //Initialize Bluetooth Serial Port
  hc06.begin(9600);
}

void loop() {
  //Write data from HC06 to Serial Monitor
  if (hc06.available()) {
    Serial.write(hc06.read());
 }
  
  //Write from Serial Monitor to HC06
  if (Serial.available()) {
   hc06.write(Serial.read());
 }
}

Para testar a comunicação, digite AT no monitor serial da IDE do Arduino. Certifique-se de seleccionar o baud rate correto (9600) e “Não fim de linha” (“No end line”) nas opções de comunicação. Se tudo estiver bem, o módulo deverá responder OK. Se não funcionar, certifique-se de que o módulo esteja bem conectado e verifique a sua versão.

Para modificar o nome do módulo, digite AT+NAMEnom_module. O módulo deverá responder OKsetname. (Ex: se quiser alterar o nome do módulo para BTM1, digite AT+NAMEBTM1)

Para modificar o código PIN do módulo, digite AT+PINxxxx. O módulo deverá responder OKsetPIN. (Ex: se quiser alterar o PIN para 0000, digite AT+PIN0000)

Para alterar a taxa de transmissão do módulo (somente se necessário), digite AT+BAUDx. Ex: se quiser alterar a baud rate para 9600, digite AT+BAUD4. O módulo deverá responder OK9600. (Obs.: 1 parar 1200, 2 para 2400, 3 para 4800, 4 para 9600, 5 para 19200, 6 para 38400, 7 para 57600, 8 para 115200)

ATENÇÃO: Existem diferentes versões do módulo HC-06 e a lista de comandos AT pode variar. Verifique bem o número de série marcado no módulo e a versão do firmware com o comando AT+VERSION.

Por exemplo, o módulo HC-06 da série ZS-040 na versão 3.0-20170609 retorna ERROR(0) quando enviamos o comando AT+NAMExxxx (sendo xxxx o novo nome do módulo). Os comandos AT para este módulo são:

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

Emparelhamento

Feitas as configurações desejadas no módulo HC-06, poderá emparelhá-lo com o sistema que quiser, como faria com outro periférico Bluetooth qualquer. Seleccione o nome na lista dos periféricos detectados (no modo padrão: HC-06) e insira o código PIN que configurou anteriormente (no modo padrão: 1234). Isso feito, o LED do módulo deverá parar de piscar.

Código

Com o módulo emparelhado, poderá modificar o código a seguir para obter a funcionalidade desejada. No exemplo a seguir, supomos que uma aplicação enviará o comando ON ou OFF para o módulo Bluetooth para ativar uma função do código.

Para administrar o módulo HC-06, utilizamos a biblioteca SoftwareSerial.h, que gerencia as ligações seriais da placa Arduino. As funções importantes de se conhecer são:

#include <SoftwareSerial.h>

SoftwareSerial hc06(2,3);

String cmd="";
float sensor_val=0;

void setup(){
  //Initialize Serial Monitor
  Serial.begin(9600);
  //Initialize Bluetooth Serial Port
  hc06.begin(9600);
}

void loop(){
  //Read data from HC06
  while(hc06.available()>0){
    cmd+=(char)hc06.read();
  }

  //Select function with cmd
  if(cmd!=""){
    Serial.print("Command recieved : ");
    Serial.println(cmd);
    // We expect ON or OFF from bluetooth
    if(cmd=="ON"){
        Serial.println("Function is on");
    }else if(cmd=="OFF"){
        Serial.println("Function is off");
    }else{
        Serial.println("Function is off by default");
    }
    cmd=""; //reset cmd
  }
  // Simulate sensor measurement
  sensor_val=(float)random(256); // random number between 0 and 255
    
  //Write sensor data to HC06
  hc06.print(sensor_val);
  delay(100);
}

Bônus: scan do baud rate

Se tiver dificuldade para encontrar a taxa de transmissão do seu módulo Bluetooth, aqui está um código que inicializa o módulo Bluetooth e envia o comando AT para cada valor de taxa de transmissão.

#include <SoftwareSerial.h>
SoftwareSerial hc06(2, 3);

void setup() {
  //Initialize Serial Monitor
  Serial.begin(9600);
  // scan
  scanBaudrate();
}

void loop() {}

void scanBaudrate() {
  unsigned long bauds[12] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000};
  for (int i = 0; i < 12; i++) {
    hc06.begin(bauds[i]);
    delay(10);
    Serial.print(F("Baudrate "));
    Serial.println(bauds[i]);
    command("AT", 2000);

  }
}
String command(const char *toSend, unsigned long milliseconds) {
  String result;
  Serial.print("Sending: ");
  Serial.println(toSend);
  hc06.print(toSend);
  unsigned long startTime = millis();
  Serial.print(F("Received: "));
  while (millis() - startTime < milliseconds) {
    if (hc06.available()) {
      char c = hc06.read();
      Serial.write(c);
      result += c;  // append to the result string
    }
  }
  Serial.println();  // new line after timeout.
  return result;
}


Quando o baud rate estiver correto, o módulo Bluetooth deverá responder OK. Este código permite saber facilmente se o seu módulo está a funcionar e qual a taxa de transmissão utilizada.

Aplicação

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Exit mobile version