BLE – Arduino101 y App Inventor ( Part I )

Vamos a crear nuestra primera aplicación BLE con App Inventor y con Arduino 101.

Para empezar deberemos tener instalado, descargado y leido todos los consejos desde el principio de estos tutoriales para poder abordar cualquier problema que pudiera haber ocurrido hasta el momento.

Lo primero que realizaremos será  crear una aplicación capaz de conectarse con la extensión BLE y mandaremos un dato desde nuestro dispositivo móvil a nuestra placa. Para este primer paso podemos seguir el tutorial que nos proporcionan en IOT App Inventor pero nosotros vamos a modificarlo un poco.

Se recomienda reutilizar el mismo proyecto en el desarrollo de las lecciones o ir haciendo copias de ellas para ir añadiendo más elementos a la aplicación.

Durante este tutorial, vamos a realizar las siguientes acciones

  • Conectar la App a nuestra placa Arduino 101 con BLE.
  • Leer información del dispositivo
  • Comunicar un mensaje numérico a nuestra placa por Bluetooth
  • Controlar acciones con esta comunicación

App Inventor

Comenzaremos por crear una interfaz con los siguientes elementos.

Cada uno de los elementos lo suelo renombrar para luego no confundirnos y para que todo quede más claro.

Comenzaremos importando la extensión desde el siguiente botón del menú.

Y proseguiremos añadiendo cada uno de los elementos visibles que aparecen en la tabla.

Elemento InterfazNameDescripción
ListPickerList_BLESelector de lista para contener los Bluetooths encontrados por el dispositivo móvil
Botón SCANScan_BTNBotón para inicializar el escaneo de módulos BLE en las cercanías
BLEBluetoothLE101Insertar extensión para operar con BLE y habilitar los bloques preparados para ello
SpinnerSpinner_NumbersSelector de números en Spinner para mandar mensajes a la placa
LayoutHorizontal_LayoutVarios Layouts para contener los elementos horizontalmente
LabelsInfo_LBLEtiquetas de información y status del dispositivo

Para introducir los números que aparecerán dentro del Spinner deberemos escribir cada uno de los elementos separados por comas desde la definición de sus propiedades.

Para programarlo accedemos al apartado de Blocks y comenzamos a construir nuestro programa para desarrollar la aplicación.

Lo primero que debemos hacer es presionar el botón de SCAN para que el dispositivo reconozca cuántos dispositivos Bluetooth hay alrededor. Una vez hecho esto, deberíamos introducir todos los Bluetooth que encuentre en la lista de selección; pero como hemos dicho antes, vamos a operar con eventos que son los bloques amarillos.

Así que cuando el dispositivo encuentre dispositivos alrededor le diremos que introduzca los módulos encontrados en la lista.

Una vez hecho esto, deberemos elegir qué módulo queremos conectar; esta acción la realizará el usuario, seleccionando un módulo de la lista.

Y como seguimos realizando este proceso con eventos, emparejaremos nuestro móvil con nuestra placa cuando se encuentren y recogeremos el nombre y la dirección de nuestro módulo para que aparezca en pantalla y pintamos de verde la barra de status. Podemos añadir un evento para detectar si se ha producido una desconexión si no nos damos cuenta.

 

Podemos añadir algunas modificaciones a lo anterior para ser más robustos en la elaboración de nuestro programa o para obtener distinta iformación.

    

 

Ardublockly101

Desde la plataforma de Ardublockly101 podemos desarrollar el siguiente programa mediante la unión de los bloques adaptados para ello.

#include <CurieBLE.h>

BLEPeripheral ble;
BLECentral central = ble.central();

void setup() {
  Serial.begin(9600);
  ble.setLocalName("BLE_APP");
  ble.begin();

  Serial.println("BLE_APP Init");
}

void loop() {
  
  if (central.connected()) {
    Serial.print("Central Connected");
    Serial.println((central.address()));
  }

}


on este programa solo conectamos un dispositivo on otro, pero aún no hemos desarrollado la metodología para intercambiar información. Así que con la misma aplicación y añadiendo un par de bloques más podemos hacer que estos dos dispositivos empiecen a leer y escribirse mensajes el uno con el otro.

Empezaremos por la placa creando un anuncio para colgar en su tablón. Para ello, crearemos el servicio con un UUID y el mensaje a insertar para escribir un valor desde la aplicación.

El UUID para el servicio que hemos escogido es el siguiente : 19B10010-E8F2-537E-4F6C-D104768A1214

Y para el mensaje: 19B10011-E8F2-537E-4F6C-D104768A1215



#include <CurieBLE.h>

BLEPeripheral ble;
BLEService BLEService("19B10010-E8F2-537E-4F6C-D104768A1214");
BLEIntCharacteristic BLEmsg("19B10011-E8F2-537E-4F6C-D104768A1215",BLERead | BLEWrite );

void setup() {
  Serial.begin(9600);
  ble.setAdvertisedServiceUuid(BLEService.uuid());
  ble.addAttribute(BLEService);
  ble.addAttribute(BLEmsg);
  ble.setLocalName("BLE_APP");
  ble.begin();

  Serial.println("BLE_APP Init");

}

void loop() {
  BLECentral central = ble.central();
  if (central.connected()) {
    Serial.print("Central Connected");
    Serial.println((central.address()));
    while (central.connected()) {
      if (BLEmsg.written()) {
        Serial.print("Message Received ");
        Serial.println((BLEmsg.value()));
      }
    }
  }

}



 

Ahora solo nos falta escribir esta información desde la aplicación añadiendo los siguientes bloques. Los UUIDs deben coincidir con los definidos en el programa de Arduino. De esta manera haremos que nuestra lista de números ejecute la acción que determinemos.

En el momento que ejecutemos esta acción de escritura podemos detectar el momento en el que se ha ejecutado el evento y detectarlo en la aplicación.

Ahora solamente nos queda asociar distintas acciones sobre nuestra placa a la información que se comunican los módulos y de esta manera tendríamos un sistema completo para controlar remotamente nuestros robots.

Desde Ardublockly podemos desarrollar este apartado facilmente añadiendo el conjunto de bloques necesario y el código se crea a traves de la misma plataforma.

 

En este caso hemos realizado este ejercicio para poder escribir números, pero en la siguiente lección desarrollaremos una aplicación para poder leer mensajes de texto entre los dispositivos, ya que este paso no es tan evidente como puede parecer.