Por Rui Pina para o Pplware
Tutorial realizado no âmbito do Mestrado em Computação Móvel do Instituto Politécnico da Guarda na Unidade Curricular de Seminário
O Amarino toolkit possibilita a comunicação via Bluetooth entre um smartphone com o Sistema Operativo Android e um microcontroladorArduino, permitindo controlar dispositivos ligados a este.O Amarino software toolkit assenta basicamente em dois componentes:Numa aplicação Android que é executada no smartphone e em um “sketch” (programa no Arduino), escrito com as bibliotecas Amarino
Este tutorial mostra como ligar um smartphone Android a um microcontrolador Arduino via Bluetooth, e para exemplificar este funcionamento, foi criada uma aplicação para o smartphone que liga e desliga um LED, ligado ao Arduino.
Material necessário:
- Smartphone Android
- Microcontrolador Arduino
- Modulo Bluetooth para o Arduino
- Amarino Software Toolkit
- LED
- Cabo USB
- Potenciómetro
O Amarino Software Toolkit pode ser descarregado aqui
O SDK contém:
- Amarino – Android Application – aplicação que deve ser instalada no smartphone
- MeetAndroid – Arduino Library – biblioteca do Amarino a ser usada nos sktches do Arduino
- Amarino Plug-in Bundle – conjunto de aplicações do Amarino para controlar o Arduino já predefinidas
- Amarino Library – API para enviar e receber dados do Arduino
O modulo Bluetooth usado foi o seguinte:
- Bluetooth Chip: eUnistone 31308/2
- Version: Bluetooth 2.0 + EDR (Configurable BT 1.2)
- TX Power: 2.5dBm
- RX Sensitivity: -86dBm
- Antenna: 2dBiOutdoor Range: 60 m LOS (Line of sight)
Indoor Range: 40 m NLOS (Non line of sight)
(Range measured between the Bluetooth module for Arduino and the BT Linksys dongle)
Opções especiais
- Minimum and Maximum RSSI thresholds control
- Adaptive Frequency Hopping
- Security: Authentication, Pairing and Encryption
- Store 5 different trusted devices in its internal memory
- Master or Slave operation supported
Para modulo Bluetooth, inicialmente foi configurado diretamente, ou seja sem o ATMEL ligado ao Arduino, e colocando os jumpers em posição USB no Shied XBee onde é colocado o modulo Bluetooth.
O que é preciso fazer?
1. Descobrir e emparelhar o modulo Bluetooth ao smartphone
Para isso usei com seguintes comandos AT (Manual)
Configuração do Putty para a ligação à Serial Port
Comandos AT para configurar o Bluetooth
TODOS OS COMANDOS SÃO SEGUIDOS DE CTRL+M() CTRL+J()
- 0-AT+JRES RESet SW reset of the system
- 1-AT+JDDS=0 Device Discovery Start
- 2-AT+JDIS=3 Discoverable Inquiry & Page Scan enabled
- 3-AT+JRLS=1101,11,Serial Port,01,000000 Register local sevice command
- 4-AT+JAAC=1 Auto accept connection requests command
- 5-AT+JPCR=04,0000 PIN code reply
- 6-AT+JSCR Stream connection request
- 7-AT+JRBD MAC address
ENVIAR PEDIDO DE EMPARELHAMENTO DO DISPOSITIVO
Se conseguimos emparelhar o dispositivo (smartphone), com estes comandos AT, estes comandos vão ser usados no sketch do Arduino, já com o ATMEL e os jumpers colocados na posição XBee.
2. Criar um ou mais que um evento no Amarino a ser enviado para o Arduino
Poderíamos usar a aplicação Amarino, que já tem alguns eventos predefinidos, mas vamos criar um app, que controla um LED no Arduino.
É preciso importar a Amarino Library Build Path->Configure Build Path->Libraries->Add JARs…no Eclipse.
package rp.toggleled.com;
import rp.ruipina.com.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ToggleButton;
import at.abraxas.amarino.Amarino;
public class ToggleLEDActivity extends Activity implements View.OnClickListener{
/* TODO: change the address to the address of your Bluetooth module
* and ensure your device is added to Amarino
*/
private static final String DEVICE_ADDRESS = "00:03:19:0D:1D:B5";
private ToggleButton tbOnOff;
private int on,off;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Amarino.connect(this, DEVICE_ADDRESS);
tbOnOff = (ToggleButton) findViewById(R.id.tbOnOff);
tbOnOff.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
// stop Amarino's background service, we don't need it any more
Amarino.disconnect(this, DEVICE_ADDRESS);
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(tbOnOff.isChecked()){
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'O', 1);
}else {
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'F', 0);
}
}
}
IMPORTANTE: Criar uma pasta com o nome “libs” no projeto e colocar dentro o AmarinoLibrary_v0_55.jar para a aplicação não crashar!!!
IMPORTANTE2: No AndroidManifest.xml colocar a aplicação como debuggable (true)
3. Um sketch (programa Arduino)
Montagem no Arduino
Temos de colocar as bibliotecas do Amarino na pasta do nosso Arduino IDE C:\arduino-1.0.1\libraries.
4. Carregar o sketch para o Arduino
#include
// declare MeetAndroid so that you can call functions with it
MeetAndroid meetAndroid;
int val = 0;
int led = 13;
void setup()
{
initProgram();
// register callback functions, which will be called when an associated event occurs.
meetAndroid.registerFunction(SwitchOn, 'O');
meetAndroid.registerFunction(SwitchOff, 'F');
}
void loop()
{
meetAndroid.receive(); // you need to keep this in your loop() to receive events
}
/*
* Whenever the LED app changes
* this functions will be called
*/
void SwitchOn(byte flag, byte numOfValues)
{
digitalWrite(led, meetAndroid.getInt());
digitalWrite(led, HIGH);
}
void SwitchOff(byte flag, byte numOfValues)
{
digitalWrite(led, meetAndroid.getInt());
digitalWrite(led, LOW);
}
void initProgram()
{
Serial.begin(115200);
delay(2000);
Serial.print("AT+JRES\n\r"); // Reset command
delay(2000);
Serial.print("AT+JSEC=1,1,1,04,1111\n\r"); // Enable security command
delay(2000);
Serial.print("AT+JDIS=3\n\r"); // Discorable command
delay(2000);
Serial.print("AT+JRLS=1101,11,Serial Port,01,000000\n\r"); // Register local sevice command
delay(2000);
Serial.print("AT+JAAC=1\n\r"); // Auto accept connection requests command
delay(2000);
Serial.print("AT+JPCR=04,0000\r\n"); // PIN code reply
delay(2000);
//connect the phone
pinMode(led, OUTPUT);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led,HIGH);
delay(2000);
digitalWrite(led,LOW);
delay(3000);
Serial.print("AT+JSCR\r\n");
delay(3000);
pinMode(led, OUTPUT);
digitalWrite(led,LOW);
}
Depois de compilado e executado o sketch o Arduino está pronto a receber comandos do smartphone.
5. Executar a aplicação do Android (Amarino)
Esperamos que tenham gostado deste tema e estamos abertos a sugestões. Num próximo artigo iremos apresentar como realizar a comunicação Arduino –> Android.