Uma nova tentativa de comunicação bluetooth com Arduino, após orientação do nosso colega de classe Vinicius Bazan: fazer o reset manual do módulo Bluetooth (curto do pino 5 - Reset - com o pino 1 - 3.3V). Após o reset, foi possível reconfigurar o módulo usando a ferramenta BluetoothBee Setting Tool para Name: MKrules / PIN: 0233, e realizar a comunicação com o celular.
Como as portas RX e TX do Bluetooth Bee estão em nível 3.3V e as portas RX e TX do Arduino estão em 5V, é recomendável utilizar a XBEE shield como intermediário (nos primeiros testes, a conexão cruzada entre RX e TX foi feita diretamente. Felizmente, não houve nenhum dano irreversível). Portanto, as conexões ficam:
Bluetooth Bee
|
XBEE Shield
|
Arduino UNO
|
3.3V (Pino 1)
|
(ligação direta Bluetooth Bee - Arduino)
|
3.3V
|
TX (Pino 2)
|
RX (Pino 0)
|
Pino 2
|
RX (Pino 3)
|
TX (Pino 1)
|
Pino 3
|
GND
|
GND
|
GND
|
Devido ao mal-funcionamento do BT do celular disponível no momento do teste, a comunicação BT será estabelecida entre o Arduino e o laptop, utilizando o software Tera Term como mostrado em http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06/?ALLSTEPS. Tal link também fornece um código .ino para, através de comandos recebidos por BT, acender e apagar um LED e fazer o retorno ao outro dispositivo, enviando uma string. O código foi alterado para a inserção de um potenciômetro e uso da biblioteca SoftwareSerial, o que permite a configuração de outras portas do Arduino para uso de comunicação serial. Assim, evita-se que a comunicação BT interfira na comunicação USB-Arduino, permitindo que uploads de novos códigos sejam feitos mesmo que o módulo BT esteja ligado.
//Código retirado de: //http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06/?ALLSTEPS
//Alterações feitas em 31/05/2015
#include <SoftwareSerial.h>
#define POT A0
SoftwareSerial bt(2,3); //RX,TX
char blueToothVal; //value sent over via bluetooth
char lastValue; //stores last state of device (on/off)
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
bt.begin(9600);
}
void loop()
{
int potReading = analogRead(POT);
if(bt.available())
{//if there is data being recieved
blueToothVal=bt.read(); //read it
}
if (blueToothVal=='n')
{//if value from bluetooth serial is n
digitalWrite(13,HIGH); //switch on LED
if (lastValue!='n')
bt.println(F("LED is on")); //print LED is on
Serial.println(F("LED is on")); //print LED is on
lastValue=blueToothVal;
}
else if (blueToothVal=='f')
{//if value from bluetooth serial is n
digitalWrite(13,LOW); //turn off LED
if (lastValue!='f')
bt.println(F("LED is off")); //print LED is on
Serial.println(F("LED is off")); //print LED is on
lastValue=blueToothVal;
}
else if (blueToothVal=='p')
{
bt.print("Pot: ");
bt.println(potReading);
lastValue=blueToothVal;
}
delay(1000);
}
|
Após emparelhar o módulo BT (MKrules) do Arduino ao laptop, abrir uma nova conexão serial no Tera Term na porta (COM#: Serial Padrão por link Bluetooth), onde # é o número da porta serial em que o módulo BT ficou emparelhado. Um indicativo de que a conexão está ocorrendo é um LED azul no módulo Bluetooth Bee.
Figura 1: LED azul em destaque. Tera Term aberto no laptop
Figura 2: digitando-se ‘n’ no Tera Tem, o LED verde acende e o Arduino envia a string “LED is on”
Figura 3: digitando-se ‘f’ no Tera Tem, o LED verde apaga e o Arduino envia a string “LED is off”
Figura 4: digitando-se ‘p’ no Tera Term, o Arduino envia o valor do potenciômetro (posição 1)
Figura 5: enquanto nenhuma outra tecla for apertada, o valor do potenciômetro (agora numa posição 2) continua sendo exibido.
Em suma, a programação do módulo Bluetooth dentro do Arduino funciona da mesma forma que comunicação serial (Serial.available(), Serial.print(), Serial.println(), Serial.read(). Portanto, a comunicação ocorrerá pelo envio de char (byte). O futuro aplicativo no App Inventor deverá receber a sequência de char, formar uma string e extrair as informações necessárias.






