fbpixel
Etiquetas: , , , ,
1
(1)

É 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

  • Computador
  • Arduino UNO
  • Cabo USB para comunicar o Arduino ao computador
  • Módulo Bluetooth HC-06
  • Cabos Dupont M/F

Apresentação do módulo HC-06

module bluetooth hc06

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

  • 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

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

arduino module hc06 schematics

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:

  • AT+NAME=xxxx para configurar o nome do módulo
  • AT+PSWD:”xxxx” para configurar a senha do módulo
  • AT+UART=115200,0,0 para configurar a taxa de transmissã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:

  • SoftwareSerial hc06(Rx,Tx) para definir a porta serial e os pinos que servirão para a comunicação
  • hc06.begin() para definir a taxa de transmissão
  • hc06.available() para testar se os dados estão disponíveis no buffer da porta serial
  • hc06.read() para ler os dados da porta serial, um byte por vez
  • hc06.print() para enviar uma cadeia de caracteres em ASCII
  • hc06.write() para enviar dados, um byte por vez.
#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

How useful was this post?

Click on a star to rate it!

Average rating 1 / 5. Vote count: 1

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?