Vous êtes sur la page 1sur 7

INSTITUTO

POLITECNICO NACIONAL
ESCUELA SUPERIOR DE CMPUTO

Application Development for Mobile Devices


Profre: M. en C. Alejandro Cifuentes A:
Alonso Contreras Jos Manuel
Jacobo Emmanuel Daz Rodrguez
ARDUINO Y ANDROID COMUNICACIN BLUETOOTH

PROYECTO ARDUINO 1 ANDROID, BLUETOOTH COMUNICACIN


Objetivo
Realizar la comunicacin via Bluetooh entre la tarjeta Arduino 1 con el sistema operativo Android, mediante un
modulo bluetooth, configurando en modo esclavo, desde una aplicacin android desarrollada ejecutndose en el
dispositivo mvil.

Hardware Requerido:

Tarjeta Arduino Uno


1 LEDs
1 Resistencias (220 ohms)
Mdulo Bluetooth Serial(Slave)
Protoboard

Mdulo Bluetooth
El Bluetooth es un estndar de comunicacin inalmbrica que permite la transmisin de datos a travs de
radiofrecuencia en la banda de 2,4 GHz. Existen muchos mdulos Bluetooth para usarlos en nuestros
proyectos de electrnica, pero los ms utilizados son los mdulos de JY-MCU, ya que son muy econmicos
y fciles de encontrar en el mercado. Son mdulos pequeos y con un consumo muy bajo que nos
permitirn agregar funcionalidades Bluetooth a nuestro Arduino. Estos mdulos contienen el chip con una
placa de desarrollo con los pins necesarios para la comunicacin serie.
Existen dos modelos de mdulos Bluetooth: el HC-05 que puede ser maestro/esclavo (master/slave), y el
HC-06 que solo puede actuar como esclavo (slave). La diferencia entre maestro y esclavo es que en modo
esclavo es el dispositivo quien se conecta al mdulo, mientras que en modo maestro es el mdulo quien
se conecta con un dispositivo.
Fsicamente, los dos mdulos son muy parecidos, solo varan algunas conexiones. Los pins que
encontraremos son los siguientes:
-Vcc: Alimentacin del mdulo entre 3,6V y 6V.
-GND: La masa del mdulo.
-TXD: Transmisin de datos.
-RXD: Recepcin de datos a un voltaje de 3,3V.
-KEY: Poner a nivel alto para entrar en modo configuracin del mdulo (solo el modelo HC-05)
-STATE: Para conectar un led de salida para visualizar cuando se comuniquen datos.

ESQUEMA CIRCUITO ARDUINO 1 Y MODULO BLUETOOTH


Comandos AT
Los comandos AT son un tipo de comandos que sirven para configurar el mdulo Bluetooth a travs de un
microcontrolador, un ordenador o con cualquier dispositivo que posea una comunicacin serie (Tx/Rx).
Son unas instrucciones que nos permiten cambiar los baudios del mdulo, el PIN, el nombre, etc. Para usar
los comandos AT el mdulo Bluetooth no debe estar vinculado a ningn dispositivo (led rojo del mdulo
parpadeando). Segn las especificaciones del mdulo, el tiempo que se tiene que respetar entre el envo
de un comando AT y otro tiene que ser de 1 segundo. Si se enva un comando AT y en menos de un
segundo se enva otro, el mdulo no devuelve respuesta.
Ahora vamos a configurar el mdulo Bluetooth a travs de comandos AT enviados desde el
Monitor Serial del Arduino. El cdigo del Arduino necesario tanto por el mdulo HC-05 como el
HC-06 es el siguiente:


CODIGO ARDUINO MODULO BLUETOOTH
#include <SoftwareSerial.h> //Librera que permite establecer comunicacin serie en otros pins

//Aqu conectamos los pins RXD,TDX del mdulo Bluetooth.
SoftwareSerial BT(10,11); //10 RX, 11 TX.

void setup()
{
BT.begin(9600); //Velocidad del puerto del mdulo Bluetooth
Serial.begin(9600); //Abrimos la comunicacin serie con el PC y establecemos velocidad
}

void loop()
{
if(BT.available())
{
Serial.write(BT.read());
}

if(Serial.available())
{
BT.write(Serial.read());
}
}



CODIGO ANDROID
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class DeviceListActivity extends Activity{
public static String EXTRA_DEVICE_ADDRESS = "device_address";

private BluetoothAdapter mBtAdapter;
private ArrayAdapter<String> mPairedDevicesArrayAdapter;
private ArrayAdapter<String> mNewDevicesArrayAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.device_list);

setResult(Activity.RESULT_CANCELED);

Button scanButton = (Button) findViewById(R.id.button_scan);
scanButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
doDiscovery();
v.setVisibility(View.GONE);
}
});

mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
mNewDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);

ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
pairedListView.setAdapter(mPairedDevicesArrayAdapter);
pairedListView.setOnItemClickListener(mDeviceClickListener);

ListView newDevicesListView = (ListView) findViewById(R.id.new_devices);
newDevicesListView.setAdapter(mNewDevicesArrayAdapter);
newDevicesListView.setOnItemClickListener(mDeviceClickListener);
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);

filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);

mBtAdapter = BluetoothAdapter.getDefaultAdapter();


Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();

if (pairedDevices.size() > 0) {
findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
for (BluetoothDevice device : pairedDevices) {
mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
}
} else {
String noDevices = getResources().getText(R.string.none_paired).toString();
mPairedDevicesArrayAdapter.add(noDevices);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
if (mBtAdapter != null) {
mBtAdapter.cancelDiscovery();
}

this.unregisterReceiver(mReceiver);
}
private void doDiscovery() {

setProgressBarIndeterminateVisibility(true);
setTitle(R.string.scanning);

findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE);

if (mBtAdapter.isDiscovering()) {
mBtAdapter.cancelDiscovery();
}

mBtAdapter.startDiscovery();
}

private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
// Cancel discovery because it's costly and we're about to connect
mBtAdapter.cancelDiscovery();

String info = ((TextView) v).getText().toString();
try {
String address = info.substring(info.length() - 17);

Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS, address);

setResult(Activity.RESULT_OK, intent);
finish();
}catch (IndexOutOfBoundsException e) {
setResult(Activity.RESULT_CANCELED);
finish();
}
}
};
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override

public void onReceive(Context context, Intent intent) {


String action = intent.getAction();

if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle(R.string.select_device);
if (mNewDevicesArrayAdapter.getCount() == 0) {
String noDevices = getResources().getText(R.string.none_found).toString();
mNewDevicesArrayAdapter.add(noDevices);
}
}
}
};
}

Conclusiones.
La implementacin este proyecto se realizo con ayuda del software que proporciona
arduino, este proyecto fue muy interesante ya que se podra anexar mas funcionalidades
para el desarrollo de aplicacin android, en el creciente mercado donde se requiere que
se combine hardware y software para la implementacin de ciertas necesidades. Arduino
es flexibe ya que se pueden integrar sensores los cuales pueden ser manejados desde un
dispositivo mvil y tener el control del hardware. Ademas arduino es libre es una ventaja
grande ya que no es muy costoso y se puede ampliar conforme requerimientos.

Vous aimerez peut-être aussi