Esquemática para configuração
Aviso :
Usamos os pinos 2 e 3 do Arduino Uno. Dependendo do microcontrolador, alguns pinos podem não suportar a comunicação em série. Especialmente, o Arduino Mega, Micro e Leonardo. Verifique a documentação.
Desde que o módulo Bluetooth está a usar a lógica de 3.3V, é aconselhável adicionar um divisor de tensão para reduzir a tensão de 5V do Arduino. (resistor 1k entre pin3 e Rx; 2k Ohm entre Rx e GND).
Configuração do módulo HC-05
Configurar o módulo HC-05 pode ser interessante para verificar se ele está funcionando, ligado corretamente e para modificar seus parâmetros como seu nome (útil quando você está usando vários módulos), código PIN e velocidade de comunicação (baudrate). Especialmente se você quiser usá-lo como um módulo mestre. Para permitir a configuração, o módulo HC-05 deve ser alimentado mas não emparelhado e o pino KEY/EN deve ser definido como ALTO antes do módulo ser ligado. Quando em modo de configuração o LED piscará dois segundos a cada dois segundos.
Abra o monitor serial e selecione a opção de linha final “Nova linha” e um baudrate de 9600.
Nota que o HC-05 entra em modo de configuração com um baudrate de 38400bps.
Código de configuração
O código a seguir permite modificar e verificar os parâmetros usando o monitor serial e comandos AT.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String 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 } }}
Comandos AT
Comparado ao módulo HC-06, o HC-05 pode ser usado como um módulo mestre e você também pode verificar os parâmetros salvos usando os comandos AT.
Em geral, digitando o comando AT+<command>? irá solicitar o parâmetro salvo (ex: AT+PSWD? irá exibir o código PIN do módulo). Se introduzir AT+<command>=<Param>, pode definir o valor do parâmetro(ex: AT+PWSD=0000 para modificar o código PIN para 0000).
Existem alguns dos comandos AT:
Para testar a comunicação,introduza AT no monitor de série da IDE Arduino. Se tudo estiver configurado corretamente ele deve exibir OK.
Para modificar o nome do módulo, digite AT+NAME=<Param>. O módulo deve responder OK (Defaut HC-05, Ex: Para alterar o nome para BTM1 introduza AT+NAME=BTM1).
Para modificar o código PIN, introduza AT+PSWD=<Param> . O módulo deve responder OK(Default 1234 Ex: para alterar o PIN para 0000 digite AT+PSWD=0000).
AT+ROLE=<Param> até a metade da função do módulo como escravo ou mestre (Default 0, Ex: para alterar a função como mestre digite AT+ROLE=1, como escravo digite AT+ROLE=0).
Para modificar a baudrate, entre AT+UART=<Param1>,<Param2>,<Param3> com os parâmetros de comunicação serial Param1, 2 e 3: baudrate, stop bit e parity bit respectivamente (Por padrão,defina para 9600,0,0. Ex: para modificar o baudrate para 115200 introduza AT+UART=115200,0,0).
Existem outros comandos AT para o módulo HC-05 Bluetooth que pode encontrar seguindo o link.
CAUÇÃO: Existem diferentes versões do módulo HC-05 e o procedimento de configuração pode variar. Certifique-se de verificar a etiqueta do módulo e a versão do firmware antes de usar. Para este tutorial, usamos um módulo HC-05 etiquetado ZS-040 e firmware versão 2.0-20100601.
N.B.: Se o módulo não responde verifique a cablagem, condutividade dos cabos e baudrate.
Não hesite em deixar um comentário ou contactar-nos se tiver problemas na configuração do seu módulo HC-05.
Configuração de escravo
Para configurar o módulo como escravo, você pode mudar o nome como AT+NAME=HC05-Slave e escolher os parâmetros de comunicação e o código PIN que você deseja. Você precisará ter certeza que o mestre e o escravo são os mesmos parâmetros de comunicação.
AT retorna OK
AT+NAME=HC05-Slave
AT+UART=9600,0,0
AT+ROLE=0
Enterrometer AT+ADDR para obter o endereço do módulo (ex: +ADDR:98d3:32:21450e)
Para o módulo escravo, você também pode usar um módulo HC-06
Configuração do módulo mestre
Para definir o módulo como mestre, você precisa mudar a função e definir o mesmo parâmetro de comunicação que o módulo escravo.
AT retorna OK
AT+NAME=HC05-Master
AT+UART=9600,0,0
AT+ROLE=1
O endereço do módulo escravo deve ser digitado no módulo mestre para que ele possa ser aplicado: AT+BIND=98d3,32,21450e (substituir pontos “:” por coma “,”)
Esquemática de comunicação
No modo de comunicação, o pino Key/EN não está ligado.
Código de comunicação
Quando ambos os módulos estão configurados, carregue os seguintes códigos nas placas Arduino ligadas aos seus módulos. Ligue os módulos para entrar no modo de comunicação. O módulo mestre deve conectar-se ao módulo escravo e o LED deve piscar a cada segundo.
Usamos a mesma biblioteca SoftwareSerial.h como para o módulo HC-06:
SoftwareSerial hc05(Rx,Tx) para definir os pinos da porta serial
hc05.begin() para definir a baudrate (valor deve ser o mesmo do seu módulo)
hc05.available() para testar se os dados estão disponíveis no buffer do módulo
hc05.read() para ler os dados um byte de cada vez
hc05.print() para enviar uma string em formato ASCII
hc05.write() para enviar dados um byte de cada vez
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 monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(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 buffermsg += 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 masterif(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 buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Se você abrir ambos os monitores seriais e entrar com um comando no monitor do quadro mestre, você deve ver os seguintes resultados. O quadro mestre envia um comando que é recebido e enviado de volta pelo quadro escravo. As comunicações funcionam corretamente em ambas as direções.
Se você tiver problemas para configurar ou emparelhar seus módulos Bluetooth, não hesite em nos contatar ou deixar um comentário.
Aplicação
Drive your roboot remotelly with your smartphone
Envie medições de temperatura para o seu smartphone