Para a comunicação entre o Arduino e o Android, utilizaremos um módulo Bluetooth HC-06, ou HC-05. O módulo já vem pronto para o uso, porém, com as configurações padrões, então, vamos alterar o nome do dispositivo, a senha para conexão e o Baud Rate. Com as configurações já prontas, criaremos uma pequena aplicação, apenas para testes.
Primeiramente, devemos conectar o Bluetooth no Arduino da seguinte forma:
Nessa montagem, usamos as portas 10 e 11 para comunicação, uma vez que as portas 0 e 1 RX e TX padrões, serão usadas para comunicação USB com o Arduino, devemos criar uma nova comunicação serial para o módulo Bluetooth.
Segue o código para a comunicação:
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(10,11);//(RX/TX)
void setup()
{
Bluetooth.begin(9600);
Serial.begin(9600);
}
void loop()
{
if(Bluetooth.available())
{
byte a=Bluetooth.read();
Serial.write(a);
}
if(Serial.available())
{
byte a=Serial.read();
Bluetooth.write(a);
}
O código acima, simplesmente, pega o que é escrito na porta serial USB e escreve na porta serial Bluetooth e vice-versa. A biblioteca SoftwareSerial permite a criação de uma segunda porta serial, passando os pinos (RX,TX) desejados.
Após o upload para o Arduino, abrimos o Serial Monitor. Definimos a velocidade em 9600 e definimos a quebra de linha como nenhuma, em caso do módulo HC-06 e ambos para o HC-05. E usamos o comando AT para testar a comunicação, se tudo estiver correto deverá retornar OK.
A sintaxe dos comandos AT, basicamente, é
AT+COMANDOparametro, caso tudo esteja correto, o programa retornará OK em todos os comandos, caso tudo ocorra corretamente.
1. Alterar o nome do dispositivo:
AT+NAMESteve
OKsetname
2. Alterar a senha:
AT+PIN4242
OKsetpin
3. Alterar o Baud Rate:
AT+BAUD7
OK57600
1---------1200
2---------2400
3---------4800
4---------9600
5---------19200
6---------38400
7---------57600
8---------115200
Para comunicação do Android com o robô, nós devemos, simplesmente, escrever os dados de um lado e ler do outro. A camada de script facilita muito a comunicação, pois, não e necessário manipular sockets diretamente. O código abaixo é um "Hello World", bem simples, que apenas envia uma mensagem e espera uma resposta:
import android
droid = android.Android()
droid.toggleBluetoothState(True)
droid.bluetoothConnect('00001101-0000-1000-8000-00805F9B34FB')
droid.bluetoothWrite("Hello blue world")
msg = droid.bluetoothReadLine().result
print msg
Primeiramente, importamos a biblioteca Android, que fornece o acesso a todos os recursos necessários para a interação da camada de script com o sistema.
O primeiro, passo é ativar o Bluetooth
toggleBluetoothState, logo após iniciamos a conexão com a função
bluetoothConnect. Essa função recebe dois parâmetros, o primeiro é o UUID para a comunicação serial, e o segundo, o MAC do dispositivo ao qual queremos nos conectar; se omitirmos o MAC, é aberta uma lista para seleção do dispositivo.
A função
bluetoothWrite, escreve os dados na linha de comunicação e a função
bluetoothReadLine.result, lê os dados. Antes de iniciarmos a comunicação, pareamos o módulo Bluetooth como um dispositivo normal, com a senha que definimos.
No lado do Arduino, o programa funciona com o mesmo princípio. O código é baseado no que foi usado para configurar o módulo:
#include <SoftwareSerial.h>
SoftwareSerial Bluetooth(10,11);//(RX/TX)
String msg;
void setup() {
Bluetooth.begin(57600);
Serial.begin(57600);
}
void loop()
{
if(Bluetooth.available() > 0)
{
msg = Bluetooth.readString();
Serial.println(msg);
Bluetooth.flush();
}
if(Serial.available())
{
byte a = Serial.read();
Bluetooth.write(a);
}
}