Los módulos Bluetooth tienen distintos modelos que van ganando en velocidad de transferencia y en alcance desarrollándose dentro del Bluetooth SIG (Special Interest Group)

Bluetooth 2.0 (BR/EDR) – Basic Rate/ Enhanced Data Rate

Para empezar a trastear una buena opción son los módulos HC-05 que son bastante baratos para hacer funcionar una placa Arduino, así como el HC-06 funcionan sin problema con aplicaciones Android; tal y como realizamos en el siguiente tutorial.

Bluetooth 4.0

Ahora se habla del uso de BLE (Bluetooth Low Energy) que es una versión pensada para módulos IOT orientados a un bajo consumo para alargar la duración de las baterías de nuestros dispositivos.

Estos componentes para su uso maker se pueden comprar por internet como:

  • HC-08
  • HC-10
  • HM-10
  • CC2541/2540

Bluetooth 5.0

Esta tecnología aparecerá en 2017 y según el Bluetooth SIG cuadruplicará el rango de comunicación y duplicará su velocidad haciendo apta esta tecnología para uso personal e industrial.

 

Del Bluetooth al WiBree

Wibree es una nueva tecnología  digital de radio interoperable para pequeños dispositivos desarrollada por Nokia diseñado para que funcione con poca energía. De esta manera los dispositivos pueden durar meses o años con una pila de botón. Su nombre proviene de dos palabras wi de wireless y bree, un término del inglés antiguo que significa travesía o atajo. Desde junio de 2007, se le conoce como “Bluetooth low energy technology” o Bluetooth ULP (Ultra Low Power).

Dispone de una tasa de transferencia de 1 Mbps en la capa física. Está basado en un microchip de bajo costo con opciones más amplias para su empleo en la industria; además tiene el mismo tamaño de los dispositivos Bluetooth, como los que se encuentra en un teléfono móvil. Tiene soporte para seguridad, ya que emplea el sistema de cifrado AES y esquemas de seguridad configurables.

Aplicaciones

Wibree se diseñó con dos alternativas: aplicación única y aplicación modo dual.

  • Wibree de implementación única  –> funciona para dispositivos que requieren un consumo bajo de energía, pequeños y de bajo costo, como relojes, sensores deportivos, teclados inalámbricos, etc.
  • Wibree de implementación modo dual Bluetooth y Wibree –> se diseña para su uso en dispositivos Bluetooth donde Wibree se integra con Bluetooth y BluetoothRF utilizando los dispositivos existentes dirigido especialmente a dispositivos como teléfonos móviles y computadoras personales

El porqué de este nuevo post…

Este modelo relacionado con Arduino suscitó mi interés después de comprar una placa Arduino 101, que integra un módulo Bluetooth LE (Low Energy).

arduino101_vs_arduinouno

Y cuál es mi sorpresa cuando al hacerlo funcionar, no se puede desarrollar de la misma manera que hacíamos comunicación mediante la librería SoftwareSerial con un modelo Bluetooth HC-05 externo.

Para esta nueva configuración se requiere de una librería denominada CurieBLE que se instala en el momento de integrar la placa Arduino 101 dentro del IDE de Arduino. Y desde aquí poder realizar un ejemplo de comunicación.


#include <CurieBLE.h>

BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = 13; // pin to use for the LED

void setup() {
  Serial.begin(9600);

  // set LED pin to output mode
  pinMode(ledPin, OUTPUT);

  // set advertised local name and service UUID:
  blePeripheral.setLocalName("BLASCARR");
  blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

  // add service and characteristic:
  blePeripheral.addAttribute(ledService);
  blePeripheral.addAttribute(switchCharacteristic);

  // set the initial value for the characeristic:
  switchCharacteristic.setValue(0);

  // begin advertising BLE service:
  blePeripheral.begin();

  Serial.println("BLE LED Peripheral");
}

void loop() {
  // listen for BLE peripherals to connect:
  BLECentral central = blePeripheral.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());

    // while the central is still connected to peripheral:
    while (central.connected()) {
      // if the remote device wrote to the characteristic,
      // use the value to control the LED:
      if (switchCharacteristic.written()) {
        if (switchCharacteristic.value()) {   // any value other than 0
          Serial.println("LED on");
          digitalWrite(ledPin, HIGH);         // will turn the LED on
        } else {                              // a 0 value
          Serial.println(F("LED off"));
          digitalWrite(ledPin, LOW);          // will turn the LED off
        }
      }
    }

    // when the central disconnects, print it out:
    Serial.print(F("Disconnected from central: "));
    Serial.println(central.address());
  }
}


 

Lo curioso de este código es la introducción de un identificador en la linea 7 UUID (Universally Unique Identifier) específico para el funcionamiento de este Bluetooth con una aplicación concreta.

UUID = 19B10000-E8F2-537E-4F6C-D104768A1214

Este identificador se usa en varios contextos. En este caso Arduino 101 desarrollado junto con Intel explica, en el siguiente tutorial, cómo podemos desarrollar la comunicación a través de una aplicación llamada nrf Connect for Mobile que se puede desacargar desde el Google Play; creada por Nordic SemiConductor ASA.

Casualidades de la vida que el módulo Bluetooth LE que integra Arduino / Genuino 101 es un nrf51822 y cualquiera de las aplicaciones de deseemos crear será dependiente de esta empresa, tal y como explican en el siguiente minitutorial a través de sus servicios GATT.

screen-shot-2015-10-15-at-12-25-46-pm

Y de la misma manera, el grupo Bluetooth SIG dispone de unas tarifas para crear UUIDs en estos módulos Bluetooth.

Como ya hemos hecho con el módulo HC-05 voy a explicar paso a paso cómo crear nuestras propias aplicaciones para hacer funcionar los módulos BLE con App Inventor y ArduBlockly y así comprender mejor como se desarrolla en este entorno para extender nuestros proyectos IOT.

Probando con otras aplicaciones Android al uso, no se puede establecer comunicación con este nuevo módulo Bluetooth y por ahora solo he podido realizar el ejemplo del tutorial.

Al final no es tan simple como parece, o puede que un poco más complicado que el HC-05 en caso de querer desarrollar una aplicación propia. De todas maneras, desde este post nos muestran cómo poder realizar nuestra propia aplicación para conectar con Arduino 101.

Resulta que una de las dificultades de usar un modelo típico Hc-05 y otro más avanzado es que Apple no nos permite establecer comunicación con robots por debajo de los modelos Bluetooth 4.0, dejando al resto de lado. Así que solo podremos hacer funcionar los HC-05 con Android.

Por último, mencionar que si no nos gusta el modo de comunicación con este módulo Bluetooth, seguimos disponiendo del modo de uso con un Bluetooth LE externo el que nosotros queramos, junto con la librería SoftwareSerial y no nos dará ningún problema.