Conectar placa arduino (bq zum) por Bluetooth en Android

Con Cordova o Phonegap tenemos la gran ventaja de desarrollar una sola vez y que esta sea compatible para multiple plataformas móviles en las que se encuentran Android y IOS.

Cuando vamos a desarrollar una aplicación que hace uso de elementos nativos de la plataforma, es decir no solo es una capa de presentación web si no que utilizamos elementos físicos como el giroscopio, wifi o bluetooth en la mayoría de los casos nos vemos obligados de utilizar plugins de cordova/phonegap.

En este caso vamos a utilizar cordova-plugin-bluetooth-serial.

La aplicación de ejemplo consiste en conectar nuestro móvil con una placa Arduino que dispone de modulo de Bluetooth, en este caso bq zum pero se puede utilizar cualquier otra añadiendo el modulo de Bluetooth.

Para ello:

  • En la placa Arduino conectaremos un LED en el pin 13.
  • Cargamos el programa en la placa.
  • El código de la App lo tenemos dispone en el repo de github.

  • Nos descagamos el código o hacemos git clone:
    git clone git@github.com:Luisangonzalez/cordova-bluetooth-serial.git

  • Accedemos al directorio: cd cordova-bluetooth-serial
  • Asumiendo que tenemos instalado el SDK de Android.
  • Con cordova instalado y configurado compilamos la APP:
    • Añadimos la plataforma android: $ cordova platform add android
    • Instalamos el plugin bluetooth: $ cordova plugin add cordova-plugin-bluetooth-serial
    • compilamos la app: $ cordova run

Si observamos el código Arduino que hemos subido a la placa consiste en estar leyendo constantemente y en el caso de leer “b” encender el led y en caso “c” apagar el led.

1
2
3
4
5
6
7
8
9
10
11
12
13
if (bluetooth_0.available() > 0) {
bluetooth_0.println("Avaliable");
read = bluetooth_0.readString();
if (read == "b" || ledon) {
bluetooth_0.print("ON");
digitalWrite(led_0, HIGH);
ledon = true;
} else if (read == "c" || !ledon) {
bluetooth_0.print("OFF");
digitalWrite(led_0, LOW);
ledon = false;
}
}

En el caso del código de cordova observamos en www/js/index.js :

  • Al comienzo del archivo en comentarios incluimos las funciones globales como LED13ON y LED13OFF que posterimente indicamos:

    1
    2
    3
    /*
    global cordova, console, $, bluetoothSerial,refreshButton, deviceList, disconnectButton, connectionScreen, messageDiv, led13ButtonON,led13ButtonOFF
    */
  • A parte de las funciones para conectar y emparejar las propias que hemos realizado para enviar “b” para encender el LED:

    1
    2
    3
    LED13ON: function() {
    bluetoothSerial.write("b");
    }

y “c para apagarlo”:

1
2
3
LED13OFF: function() {
bluetoothSerial.write("c");
}

En el caso de www/index.html:
para hacer uso de las funciones de index.js simplemente añadimos al id de los botones el nombre de las funciones:

1
2
3
4
<p>
<a class="topcoat-button--large" id="led13ButtonON">LED 13 ON</a>
<a class="topcoat-button--large" id="led13ButtonOFF">LED 13 OFF</a>
</p>

Para cualquier enviar comentarios para que os pueda ayudar si me es posible, espero que os haya gustado ;).