loading

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.

<p>NO SE COMUNICA LO UNICO ES QUE ESTOY USANDO UN ARDUINO MEGA NO SE SI SE PRESENTA ALGUN CAMBIO GRACIAS</p>
<p>very thanks man!! some days before it works!</p><p>very usefull and actual!</p><p>Tnx!</p><p>+x+</p>
<p>I believe this returns the Services/Characteristics that a particular device is advertising:</p><p>Bluetooth.AdvertiserServiceUuids </p><p>After connecting to a particular device these functions return the Services/Characteristics available:</p><p>Bluetooth.SupportedServices</p><p>Bluetooth.SupportedCharacteristics</p>
<p>Dear CRCibernetica:</p><p>Is me again^_^,at the bottom there're 4 blocks of App Inventor's BLE component,do you know how to used them? Could they got the UUIDs from the BLE device?</p><p></p>
<p>Good Instr.,it made me learn a lots of things about BLE &amp; App Inv.! Is there any way to get the BLE device's Services &amp; Characteristic UUID by the used of APP inventor's BLE component?</p>
I think maybe this is what you need:<br> <br> <strong>Bluetooth.AdvertiserServiceUuids</strong> returns the list of the Services available on the advertising device.
<p>Thank's for your reply, but I still don't Understand how to get the UUID in esta Instr., Hope I can see you Modify this instr. soon,so that user can connect BLE device directly with the APP inventor,instead of used the NRF Master Control Panel.</p>
<p>The app does connect directly to the BLE Shield.</p>
<p>Dear CRCibernetica:</p><p> Sorry for let you misunderstand,what I meaning is to used the APP inventor program itself to get those two UUID , so that when we want to send/receive data to/from BLE Shield(especial when used other BLE devices) we don't need to used the App &quot;NRF Master Control Panel&quot; to find the UUIDs. After all,a good App should let user more convenience to used.</p>
<p>When creating a BLE app you will need not only to know the Service/Characteristic UUIDs but also how the data is structured/formatted. The user should not have to do any of this. NRF Master Control Panel is the tool for the developer to investigate and create the app. This app is created especifically for the Itead BLE Shield and to be used as an example. The app is purposefully made as barebones as possible.</p>
<p>Dear Sir:</p><p>It's very sorry that Google Chrome will change my content automatically, so that I even didn't known what I talk about!</p>

About This Instructable

3,452views

3favorites

License:

More by CRCibernetica:Como Usar El MIT App Inventor Con El Itead BLE Shield Como conectar el SONOFF WiFi Switch a io.adafruit.com via MQTT Como usar una Printrbot Play de Inventoría 
Add instructable to: