Introduction: Como Usar El MIT App Inventor Con El Itead BLE Shield

Resumen

El 15 junio 2016 agregaron la funcionalidad de Bluetooth Low Energy al MIT App Inventor. Este tutorial demuestra como comunicar entre un Arduino UNO conectado a un Itead BLE Shield y una applicación creada en el MIT App Inventor.

El Itead BLE Shield tiene un módulo bluetooth HM-10. La ventaja del shield sobre otras soluciones es que cuando esta configurado correctamente se puede comunicar con su Arduino y aplicaciones mandando Strings. Para gente explorando Bluetooth Low Energy y el MIT App Inventor es un buen lugar empezar.

Materiales

  1. Arduino UNO o compatible
  2. Itead BLE Shield
  3. Teléfono o tablet con Android 5.0 o mayor (4.3 no funciona con la extensión BLE de MIT App Inventor)

Step 1: Preparando El Itead BLE Shield

  1. Cambiar los jumpers para que estan en las siguientes posiciones (ver foto):
    TX--D2
    RX--D3

    NOTAR que estamos conectando el TX del módulo Bluetooth a pin D2(RX) del Arduino y el RX del módulo a pin D3(TX) del Arduino.
  2. Poner el switch del Itead BLE Shield en 5V si esta usando un Arduino UNO.
  3. Conectar el shield al Arduino UNO.
  4. UPLOAD el código abajo a su Arduino. Este código nos permite comunicar con el BLE Shield.
  5. Abrir el Serial Monitor y asegurar que los parámetros estan en "No line ending" y "9600 baud".
  6. En el campo de texto probar la conexión con "AT" en mayúsula y apretar "Send". Si todo esta funcionando bien el shield debe responder con "OK".
  7. El módulo de Bluetooth tiene que estar configurado como "Peripheral". Enviando el comando "AT+ROLE0" debe devolver "OK+Set:0". Sólo tenemos que hacer esto una vez. Queda grabado en el EEPROM del módulo Bluetooth.
  8. Es recomendable poner su propio nombre al módulo. Para averiguar el nombre actual manda el comando "AT+NAME?". El nombre debe ser corto. En mi caso puse el nombre "BLESHLD" con el comando "AT+NAMEBLESHLD".

Código para comunicar/configurar el BLE Shield

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void setup(){
   Serial.begin(9600);
while(!Serial) {
      ;
   }
   mySerial.begin(9600);
}
void loop(){
   if(mySerial.available()){
      Serial.write(mySerial.read());
   }
   if(Serial.available()){
      mySerial.write(Serial.read());
   }
}

Step 2: Verificando La Configuración Del Módulo

Instalar la aplicación nRF Master Control Panel en su télefono o tablet.

Durante el SCAN inicial debe aparecer el módulo Bluetooth, en mi caso el nombre es BLESHLD.

Apretando el botón "CONNECT" se puede ver los Services/Characteristics publicado por el módulo.

En este caso es interesante el "Unknown Service". Alli es donde sospechaba que el módulo estaba tramitando y recibiendo datos seriales. El Service UUID y Characteristic UUID parecen iguales pero hay un digito de diferencia:

Service UUID: 0000ffe0-0000-1000-8000-00805f9b34fb

Characteristic UUID: 0000ffe1-0000-1000-8000-00805f9b34fb

Asegurar que desconectar antes de salir. Solo un dispositivo puede conectar a un módulo Bluetooth Low Energy a la vez.

Step 3: Instalando La Extension BluetoothLE En MIT App Inventor

En está página se puede bajar la extension BluetoothLE.aix

  1. Crear un nuevo proyecto.
  2. Sube el archivo BluetoothLE.aix en Palette-->Extension-->Import Extension

La extension requiere Android 5.0 o mayor instalado en su teléfono o tablet para funcionar.

Step 4: Programando Bluetooth LE En El MIT App Inventor

Para los que quieren llegar directamente al código se puede bajarlo aca en formato .aia (código fuente):

DOWNLOAD BLEShieldTest.aia

CONCEPTOS BASICOS

Bluetooth Low Energy es un poco diferente que el Bluetooth clásico.

Primero hay que hacer un SCAN para registrar los dispositivos BLE cercanos. Luego hay que CONECTAR usando la dirección MAC o índice del dispostivo encontrado. Cuando uno esta conectado al dispositivo se puede ENVIAR o RECIBIR datos a través de un servicio/caracteristica. En nuestro caso el HM-10 tiene un servicio disponible que normalmente se utiliza para comunicar con un HRM (Heart Rate Monitor). Nosotros podemos aprovechar este servicio en MIT App Inventor.

Step 5: SCAN

Usamos un botón para iniciar el escaneo de dispositivos BLE. Cuando encuentra los dispositivos se dispara el evento .DeviceFound. En el evento .DeviceFound agregamos los dispositivos a un ListPicker para que podemos escoger el BLE deseado. Luego de que seleccionamos el dispositivo BLE los datos del dispositivo se encuentra en ListPick.Selection y el índice del dispositivo esta en ListPicker.SelectionIndex.

Step 6: CONNECT

En este evento se esta usando la versión de Bluetooth.Connect que utilice un índice porque ya lo tenemos en ListPicker.SeleccionIndex. También existe el método que conecta por la dirección MAC.

Luego de conectar al BLE shield el LED de Status debe ponerse fijo.

Step 7: DISCONNECT

Por algún razón la única manera de desconectar del dispositivo es mediante la dirección MAC y no el índice como se hizo para conectar. En este caso se puede utilizar el método Bluetooth.FoundDeviceAddress con ListPicker.SelectionIndex para encontrar la dirección MAC y pasarlo a Bluetooth.DisconnectWithAddress.

Step 8: SEND DATA

BluetoothLE funciona con Services y Characteristics. En nuestro caso sabemos que el HM-10 cuenta con estos UUIDs preconfigurados:

Service UUID: 0000ffe0-0000-1000-8000-00805f9b34fb
Characteristic UUID: 0000ffe1-0000-1000-8000-00805f9b34fb

Para no tener que copiar se puede guardar los UUIDs en dos variables globales.

Para mandar un String a través de este "canal" se usa Bluetooth.WriteStringValue poniendo los parámetros service_uuid, characteristic_uuid y en value el String que queremos mandar.

Apretar click en el botón SendData debe mandar "Data Sent!!!" al Arduino. El caracter "\n" agregar una nueva linea en el terminal.

Step 9: RECEIVE DATA

Para recibir datos hay que usar primero el método Bluetooth.ReadStringValue. Luego de que esta inicializado se puede recibir los datos cada vez que el Arduino manda datsos usando Bluetooth.StringValueChanged.

BUG!!? La primera vez que conecto al shield no veo los datos entrando. Pero luego de desconectar/conectar de nuevo todo funciona como se debe.

Step 10: Siguientes Pasos

Este primer tutorial era para mostrar los conceptos básicos de BluetoothLE en MIT App Inventor usando lo mínimo posible. En el siguiente voy a hacer una aplicación mas completa.