Fundamentos y Experimentación con Bluetooth Low Energy

Resumen: En esta publicación, Rebeca Rodiguez nos da una importante lección sobre la importancia de profundizar un poco en los fundamentos de las tecnologías que usamos, y a su vez nos propone un experimento muy interesante para aplicar estos conocimientos en una aplicación que permite controlar una luz (LED) de manera remota desde un teléfono celular.

(!) Antes de seguir estas instrucciones asegúrese de entender las Condiciones de Uso de nuestro sitio.

¿Conocen lo que es el Bluetooth de Baja Energía?

Saber de una tecnología va más allá de solo leer artículos informativos acerca de ella, antes de empezar a experimentar con BLE pensé que se me facilitaría desarrollar con está herramienta, no obstante descubrí que los conocimientos con los que contaba eran mínimos, y necesitaba aprender más para poder trabajar en uno de los proyectos actuales del Centro de Innovación, por lo que con el apoyo de Jose Núñez, uno de los ingenieros y colaboradores del centro, empecé la aventura de investigar y experimentar el mundo del Bluetooth de Baja Energía.

En muchos casos es muy fácil poder hacer aplicaciones funcionales e interesantes porque ya alguien más se tomó la molestia de hacer frameworks, librerías y tutoriales que nos facilitan la complejidad que conlleva realizar algo desde cero; probablemente si te gusta el mundo maker o estudias algo relacionado a la tecnología te has encontrado con proyectos que incluyan bluetooth como parte de las aplicaciones, sin embargo ¿te has preguntado la historia o cómo funciona toda la comunicación que hay detrás de esa tecnología o solamente has seguido los pasos de un tutorial e instalado las librerías respectivas copiando y pegando código y nos conformamos con que funcione a la primera?

PD: no importa si agarramos código de internet o nos basamos en algo ya existente para realizar un proyecto o aprender, existe mucha información y hay que sacarle el mayor provecho, pero es importante entender cómo funciona lo que estamos programando, la historia que hay detrás de  la comunicación entre los dispositivos y los términos empleados.

Resultado de imagen para BLUETOOTH low energy

El BLE es la versión ligera y mejorada del Bluetooth 4.0 clásico, está diseñado para abordar las necesidades de eficiencia energética y la simplicidad en el diseño de los productos, convirtiendose en una solución inalámbrica ULP (Ultra Low Power, Ultra Bajo Consumo); esta tecnología opera en la banda mundial de 2.4GHz, cuenta con una banda de bits de capa física de 1Mbps en un rango de 15metros.

El Bluetooth de Baja Energía fue desarrollado por Nordic Semiconductor, fue uno de los primeros miembros de “Wibree Alliance” la organización que inicio el desarrollo estándar de la ULP (Ultra Low Power), sin embargo después fue adoptado por el SIG (Special Interest Group, Grupo con Especial Interés), que fue conformado por cinco compañías (Ericsson, Nokia, Toshiba, IBM e INTEL). Nordic ha jugado un papel importante en el desarrollo de BLE, y continua desempeñando un papel clave a través del trabajo realizado como miembro asociado de Bluetooth SIG.

Lo interesante al usar BLE es que ha sido implementado en la gran mayoría de plataformas móviles modernas, sea iOS, Android, móviles con Windows, entre otros.

Hay conceptos indispensables con los que se van a encontrar siempre que empiecen a investigar acerca del BLE, por lo que conocer el significado o familiarizarse con los términos es importante.

Comenzamos hablando de perfiles y protocolos: el primer concepto es la subcategoría GAP (Generic Access Profile, Perfil de Acceso Genérico). El GAP es el encargado de permitir que el dispositivo sea público al exterior y por lo tanto define la forma de interacción entre los dispositivos. El GAP tiene dos roles importantes de conexión:  (1) los dispositivos centrales – de ahí el término BLE Central – (que corresponde a los móviles, tablet o dispositivos con capacidad de procesamiento mayor que inician la conexión con los periféricos) y (2) los periféricos (dispositivos pequeños de baja potencia y consumo) a los que se pueden conectar los dispositivos centrales.

Una vez que se establece la conexión entre los dispositivos centrales y los dispositivos periféricos entra al juego el GATT (Generic Attribute Profile, Perfil Genérico de Atributos) permitiendo la comunicación en ambas direcciones, a través del protocolo ATT que se usa para almacenar los servicios, los datos y las características propias de cada dispositivo utilizado; es importante destacar que un periférico BLE solo puede ser conectado a un dispositivo central a la vez, ya que tan pronto como el periférico es conectado al dispositivo central dejara de ser visible para otros dispositivos, sin embargo un dispositivo central (celulares, tablets…) si puede ser conectado a varios periféricos.

Al igual que en el GAP, el GATT también tiene roles de interacción que es importante conocer, como por ejemplo: el servidor que contiene las características de la búsqueda ATT asi como las definiciones del servicio y las características, el otro concepto es el cliente GATT que es el encargado de enviar las solicitudes. Todas las transacciones de comunicación entre los dispositivos son iniciadas por el GATT cliente (central) que recibe la respuesta del dispositivo esclavo, el GATT servidor (periférico).

Existen muchas aplicaciones para poder escanear periféricos BLE desde un dispositivo móvil, sin embargo hay una de ellas que me gustó mucho al momento de utilizarla. Se trata de nRF Connect for Mobile (Que antes se llamaba nRF Master Control Panel) es un app muy útil para experimentar y entender los conceptos de comunicación BLE.

Hay un ejemplo que encontré y quiero compartir porque está interesante ya que permite controlar un LED desde el celular, es decir podemos controlar un TinyTILE de Intel o una placa de Arduino 101 a través de un dispositivo central.

NOTA: Antes de iniciar el ejercicio es importante repasar qué es Intel Curie, esto para tener más claro el funcionamiento de los dispositvos perifericos utilizados, pueden guiarse con el siguiente enlace: https://costaricamakers.com/?s=curie

EJERCICIO PROPUESTO

Materiales:

  • 1LED
  • 1 Protoboard
  • Cable para prototipar
  • 1 tiny tile o placa arduino 101
  • 1 resistencia de 220Ω
  • Instalar el app de nRF Master Control Panel

Pasos a seguir:


PASO 1: Prototipar según la imagen del diagrama, que se obtuvo de: https://cdn.sparkfun.com/assets/learn_tutorials/4/9/2/Exp_1_Blink_bb.png

 

 

 

 

 

 

 


PASO 2: Conectar el periférico utilizado (Arduino 101 o TinyTILE), abrir el Arduino IDE y cargarle el código de ejemplo:

#include 
BLEPeripheral blePeripheral;
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // BLE LED servicio app

//BLE caracteristicas asigandas
BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = 13; // pin asignado al LED

void setup() {
    pinMode(ledPin, OUTPUT);

    blePeripheral.setLocalName("TINYTILE BLE"); //Nombre que se le asigna al periferico para ser encontrado
    blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

    blePeripheral.addAttribute(ledService); //caracteristicas del servicio
    blePeripheral.addAttribute(switchCharacteristic);

    switchCharacteristic.setValue(0);

    blePeripheral.begin();
}

void loop() {
    // Escucha los perifericos BLE para conectarse:
    BLECentral central = blePeripheral.central();

    // Si el central es conectado al periferico:
    if (central) {
        // Mientras la central siga conectada al periferico:
        while (central.connected()) {
            // Si el dispositivo remoto escribió a la característica,
            // usar un valor para encender el LED
            if (switchCharacteristic.written()) {
                // Cualquier valor a diferencia de 0 encendera el LED
                if (switchCharacteristic.value()) {
                    digitalWrite(ledPin, HIGH);
                }
                else {
                    digitalWrite(ledPin, LOW);
                }
            }
        }
    }
}

PASO 3: Abrir el app y hacer escaner de los dispositivos periféricos, conectar en este caso con el “TINYTILE BLE” como se muestra en la siguiente imagen. Una vez que se selecciona la opción de “CONNECT”, hay que hacer click en “Unknown Service” van aparecer unas flechas, haga click en la  flecha que tiene direción hacia abajo.

 


PASO 4: Se abrirá una pantalla o cuadro de dialogo, donde debemos seleccionar la opción de “UNIT 8” e introducir un número distinto de 0 para encencer el LED y haga click en enviar o “SEND”.

¡El LED debe encenderse! para volver apagarlo, debe abrir el mismo cuadro de diálogo e ingresar el número 0 y hacer nuevamente click en enviar y el LED debe apagarse.

Gracias por leer este artículo. Nos será de mucho valor que nos digas en comentarios si te fue de utilidad, si trataste de hacer el experimento y si realizaste cambios al mismo.

IoT para Hogares Inteligentes

Que significa Iot para Hogares Inteligentes?:

Para ir tomando los primeros pasos en la tecnología de IoT (Internet de las cosas) enfocado hacia el tema de los hogares inteligentes, es necesario primero investigar sobre cuales tecnologías hay disponibles.  Hogares inteligentes y el Internet de las cosas, que de ahora en adelante solo lo mencionare como IoT, se refiere a varios conceptos como inteligencia, automatización, comunicación, seguridad y eficiencia energética todo enfocado a intentar mejorar la calidad de vida de la persona y su hogar.  Algunos de los objetivos de lo que se intenta con IoT para hogares inteligentes es:

  • Control y automatización de luces.
  • Dispositivos de entretenimiento como equipos de sonido, televisores, etc.
  • Sistemas de alarma y sensores de seguridad.
  • Sistemas de control de temperatura.

Arquitectura del sistema

La arquitectura de un sistema de IoT para hogares inteligentes se reduce a los siguientes componentes:

  • Sensores y actuadores: reciben las señales y ejecutan comandos en el hogar tan sencillo como apagar una luz.
  • Cliente de control remoto: Puede ser desde un navegador web o una aplicación celular, pero desde este punto el usuario envía el comando a ejecutar por el actuador o en el caso del sensor, es aquí donde se recibe la información.
  • Servicio de nube o base de datos: Es el intermediario entre el usuario (cliente de control remoto) y los sensores y actuadores.

A continuación se explica de manera sencilla el funcionamiento de un sistema de IoT Smart Homes:

Figura 1: Diagrama de un sistema IoT para hogares

El hogar primero que todo debe tener los dispositivos en el hogar con el hardware necesario para el hardware en estudio.  Ejemplo básico, un switch o apagador de luces, debe tener el hardware que le permita la comunicación con el dispositivo que le vaya a mandar los comandos.  El HUB o la computadora que permita la comunicación con los dispositivos, aunque esto se puede reemplazar por un protocolo que permita la conexión directa.  Ahora para enviar los comandos desde una aplicación de celular hacia mi computadora o HUB en la casa para activar los dispositivos, esta información debe pasar por una nube de almacenamiento para la conexión.  A la vez, nos permite almacenar información de eficiencia energética para optimización de recursos.   Esto en cuanto a los protocolos de comunicación, se listan algunos a continuación.

  1. Wifi.
  2. Bluetooth.
  3. Radiofrecuencia.
    1. Z-Wave.
    2. Zigbee.
    3. BidCos.

Seguridad: 

Ahora, sabiendo el hardware existente para una posible construccion de un smart home, algo muy importante que no se puede olvidar es la seguridad.  Sin tener un protocolo con la debida incriptacion de datos, cualquier persona con un conocimiento tecnico en el area, podria eventualmente hackear las senales y manipular el hardware.  Para evitar esto es necesario siempre revisar la encriptacion que pueda tener los dispositivos que se utilicen.  En el caso de los dispositivos de radiofecuencia tales como Z-Wave, estos protocolos ya venden productos con certificados de seguridad.  En el caso de usar un dispositivo para comunicacion por WiFi, es necesario encriptar los datos.

Ahora, ya teniendo esta introduccion la idea es montar un prototipo usando los protocolos anteriores, estableciendo una conexion segura entre el usuario y los actuadores.

Se despide,

Luis Diego Jimenez Sanchez

 

 

 

Soporte del Intel Realsense para Ubuntu

http://reconstructme.net/wp-content/uploads/2015/11/r200.jpg

¿Realsense? ¿Que tiene de especial esta cámara?

Pués, la cámara Intel Realsense R200 posee 3 cámaras, las cuales en conjunto con sensores integrados permite generar ambientes en 3 Dimensiones hasta distancias de 5 a 10 metros. 1 cámara brinda imágenes RGB, y las otras 2 brindan imágenes infrarrojas (IR) para reproducir la profundidad. Hace uso de un proyector láser para realizar un escaneo de 3D para percepción de escenas y fotografías mejoradas.

Al permitir hacer escaneo en 3D de habitaciones puede detectar movimientos de manos, cabezas, cuerpos y mucho más.

¡Y algo muy importante! ¡Se puede utilizar con el Intel Joule!https://communities.intel.com/community/image/2729/2.png?a=97855

¿Cómo instalar el soporte para sistemas basados en Linux, como Ubuntu?

 

Primero debemos de asegurarnos que el sistema se encuentra actualizado a la última versión.

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Lo segundo es verificar la versión del Kernel de Linux que estamos utilizando

uname -r

El valor que nos imprime debe ser mayor o igual que 4.4.0-50

Luego debemos de instalar algunas dependencias para Librealsense

sudo apt-get install libusb-1.0-0-dev pkg-config

sudo apt-get install libglfw3-dev

 

Posteriormente ocupamos clonar el siguiente repositorio, se puede descargar por medio de la interfaz web en https://github.com/IntelRealSense/librealsense o con el siguiente comando

git clone https://github.com/IntelRealSense/librealsense

Una vez clonado el repositorio nos dirigimos al directorio y ejecutamos el los siguientes comandos

mkdir build && cd build

cmake ../ -DBUILD_EXAMPLES=true

La bandera “DBUILD_EXAMPLES” es para que se compilen los ejemplos con los que podemos probar el funcionamiento de la cámara. El último comando puede tomar bastante tiempo, una vez finalizado ejecutamos lo siguiente

make && sudo make install

Una vez concluido el paso anterior la biblioteca se encontrará instalada en /usr/local/lib y los encabezados se ubican en /usr/local/include Además como compilamos los ejemplos los vamos a poder encontrar en /usr/local/bin

 

https://www.intel.es/content/dam/www/public/us/en/images/photography-abstract/realsense-static-promo-rwd.png.rendition.intel.web.416.234.png

Como instalar OpenCV en Ubuntu

https://blog.desdelinux.net/wp-content/uploads/2016/04/ubuntu.png

OpenCV es una biblioteca para manipulación de imágenes bastante potente y gratis tanto para propósitos académicos como comerciales. Posee extensiones en C++, C, Python y Java y soporta gran variedad de Sistemas Operativos, como Windows, Linux, Mac OS, iOS y Android.

En esta publicación se explicará la manera de instalar OpenCV para Python en Ubuntu.

http://www.akirasan.net/content/images/2016/06/opencv-python.png

Existen múltiples maneras de lograr este propósito, a continuación explicaremos las 2 principales.

1- La primera opción nos instalará la versión más actualizada de OpenCV 2.

  1. sudo apt-get install libopencv-dev python-opencv

2- La segunda opción nos instalará la última versión que existe (version 3.2.0 actualmente) de OpenCV 3, la cual incluye mejoras y optimizaciones sobre la versión 2. Por lo lo primero debemos descargar el siguiente script https://github.com/milq/milq/blob/master/scripts/bash/install-opencv.sh

Una vez descargado el script, nos dirigimos hacia el directorio en el que se encuentra y ejecutamos el siguiente comando

bash install-opencv.sh

Nos pedirá la contraseña y comenzará la instalación.

 

Si deseamos verificar la versión que tenemos instalada de OpenCV, se puede crear un sencillo script de Python con las siguientes líneas

import cv2
print(cv2.__version__)

 

Así de simple tenemos OpenCV en nuestro sistema.

¿Que cosas se pueden hacer con OpenCV?

  • Reconocimiento de vehículos en tiempo real.

 

  • Reconocimiento de rostros

http://docs.opencv.org/3.2.0/faceDetection.png

  • Manipulación de videos

http://www.pyimagesearch.com/wp-content/uploads/2016/02/writing_to_video_quicktime.jpg

 

Y gran variedad de cosas mas.

 

La manera más sencilla de comenzar a desarrollar programas con OpenCV es visitando el siguiente enlace en el que existen pequeños tutoriales que brindan las bases suficientes para hacer lo que se nos ocurra http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html

 

 

Prototipos de Software con Computadoras Virtuales c9.io

Este es un post realmente corto.

Cuando uno está experimentando o desarrollando con tecnologías de software para cosas como desarrollo web y de aplicaciones móviles, sistemas como NodeJS o Python, visión computarizada, etc… usualmente requerimos instalar en nuestros computadores una cantidad importante de bibliotecas y paquetes para realizar pruebas con dichas tecnologías.

C9.io es un servicio comercial de máquinas virtuales en la web.

La verdad me ha parecido muy sencillo y completo.

https://c9.io

Todo es cuestión de crear una cuenta de usuario, ojalá enlazada con nuestra cuenta de usuario de github.com (si la tuvieramos) y vualá, podemos crear nuevas máquinas virtuales, clonar las existentes, y operarlas para instalar y desinstalar cosas a nuestro antojo casi ilimitado.

Una cuenta gratuita nos permitirá generar nuevas máquinas virtuales con ciertas limitaciones de capacidad de procesador, memoria RAM (512MB) y almacenamiento (2GB) que por lo general son suficientes para realizar pruebas de concepto o experimentación.

En próximas entregas estaré discutiendo un poco cómo realizar pruebas en C9.io para desarrollo de apps en ionic, nodejs, python-opencv entre otros.