Contenido


Aumente sus habilidades de desarrollo de IoT desarrollando un sistema de seguimiento de hábitos saludables

Desarrolle un dispositivo y una aplicación de IoT con un kit de IoT para desarrolladores, Python, MQTT, e IBM Watson IoT Platform

Comments

A la hora de estar en forma, de vez en cuando necesito un poco de motivación extra. Decidí construir un dispositivo inteligente (un dispositivo IoT) para ayudarme a realizar un seguimiento de mi programa de ejercicios en el hogar. Mi dispositivo IoT, un sistema de seguimiento de hábitos saludables, se ve como una mascota amistosa (a la que llamo mi mascota de hábitos saludables en este tutorial y en sus videos). Necesito que mi mascota me anime y me recuerde que empiece con el hábito de tomar descansos regulares cuando estoy trabajando en mi escritorio y que complete los ejercicios del programa de ejercicios en el hogar.

La mascota de hábitos saludables utiliza luces LED y un timbre para llamar mi atención y recordarme con delicadeza que realicé mis ejercicios (vea Figura 1). Puedo tocar la mascota para desencadenar el envío de una notificación a un servicio que realizará un seguimiento de cuando he completado un ejercicio, para que los datos se puedan utilizar para coordinar con cuánta frecuencia tengo que ser recordado para establecer el hábito.

Figura 1. Mi mascota de hábitos saludables

Usted puede utilizar su mascota de hábitos saludables para supervisar los hábitos que quiere adoptar regularmente, tanto si es recordar la toma de medicamentos diaria como si es recordar a sus hijos que usen el hilo dental.

En este tutorial, repasaré cómo construí mi sistema de seguimiento de hábitos saludables, lo que incluye cómo construí el dispositivo IoT y cómo desarrollé los programas para la comunicación con una aplicación en la nube con MQTT en IBM Watson IoT Platform.

Lo que usted necesitará para construir esta solución IoT

Para construir esta solución IoT usted deberá estar familiarizado con Python básico y conMQTT. También necesitará estar familiarizado con la utilización del panel de instrumentos de IBM Bluemix .

Yo utilizo MacBook Pro como entorno de desarrollo, sin embargo, es posible utilizar cualquier Linux o Windows PC que tengan un puerto USB estándar, wifi y un software equivalente. Utilicé los siguientes software y hardware para construir el sistema de seguimiento de hábitos saludables.

Hardware

  • AdaFruit Feather Huzzah ESP8266 del Kit básico de AdaFruit Feather Huzzah IoT.
    • Decidí utilizar un ESP8266 para este dispositivo por su bajo costo, pequeño tamaño (para que entre dentro de un recinto pequeño), bajos requisitos de energía (especialmente cuando se usa en modo de suspensión) y por su conectividad wifi incorporada, que es perfecta para utilizar un dispositivo de IoT personal de bajo presupuesto, en un hogar o en una oficina.
    • Elegí Feather Huzzah ESP8266 porque tiene incorporado un cargador de batería LiPo, así que tengo la opción de hacer que el dispositivo sea portátil, simplemente colocando una pequeña batería recargable, que se puede recargar cuando el dispositivo esté conectado a través de un cable de alimentación USB.
    • También quise utilizar esta placa en particular porque es compatible con MicroPython y también se puede programar en otros lenguajes, como C++ (con Arduino IDE), Lua (con el firmware NodeMCU ), o JavaScript (con el cable micro USB de Espruino).
  • (del kit básico)
  • Conectores Berg y cables de conexión para los componentes que se conectan (del kit básico, también necesitará cables conectores hembra-hembra adicionales)
  • Interruptor táctil (es decir, botón) (del kit básico)
  • Piezoalarma (del kit básico)
  • Anillo Neopixel de 12 píxeles
  • Monitor OLEDI2C monocromático 128x64
Figura 2. Componentes de hardware para mi mascota de hábitos saludables

Caja

  • Acceso a una impresora 3D para imprimir las piezas. Si no tiene acceso a una impresora 3D, puede construir una caja a partir de una caja de cartón.
  • Seis protectores (o pies) de muebles de goma transparente de 8 mm, que puede comprar en su ferretería local
  • Cuatro tornillos de 2,5 mm de diámetro, o menores, que también puede comprar en su ferretería local
  • Cuatro muelles pequeños (opcional), que se utilizan para la acción de "presionar botón"

Herramientas

  • Pequeño destornillador tipo Philips
  • Soldador
  • Navaja
  • Pinzas

Software

Mientras desarrollaba, utilicé el siguiente software que tenía instalado en mi portátil:

1

Cómo ensamblar el dispositivo

Para este proyecto yo seleccioné un kit de desarrollo de IoT – el Kit básico AdaFruit Feather Huzzah IoT . El kit básico incluye cables de conexión, conectores Berg y los componentes del botón y del timbre; además, yo añadí un anillo Neopixel extra para añadir algunas luces coloridas para las notificaciones y el monitor OLED para iluminar los ojos.

El microcontrolador que se incluye en este kit de desarrollo es el Feather Huzzah ESP8266. Tiene incorporado wifi, con 4 MB de flash, un procesador de 80 MHz y un cargador LiPo de 100 mA. La placa tiene 9 pines de E/S digital y un pin de E/S análoga. Consulte Figura 3 para conocer la colocación de los pines. Los pines funcionan sobre lógica de 3,3 V, e incluyen el soporte para conectar componentes periféricos con I2C y SPI.

Figura 3. Funciones de pin de Feather Huzzah ESP8266. (Origen: https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/pinouts)
1a

Cómo insertar los componentes en la caja

Para insertar Feather Huzzah ESP8266 y otros componentes en la caja, siga los pasos de este video.

Utilicé Meshmixer para diseñar una caja imprimible en 3D para mí dispositivo, e imprimí las piezas en ABS. Yo he publicado los modelos 3D Thingiverse, así que, si usted tiene acceso a una impresora 3D, por ejemplo, a través de su taller local, podrá imprimir su propia mascota. Usted también puede añadir algunos muelles pequeños con los tornillos para que la acción de presionar el botón resulte más suave. Usted también puede añadir algunos muelles pequeños con los tornillos para que la acción de presionar el botón sea más suave.

Si usted no tiene acceso a una impresora 3D, puede instalar los componentes dentro de un pequeño contenedor plástico o en una caja de cartón con una navaja para recortar los agujeros para los ojos, el botón y el USB, y cinta adhesiva de doble cara o pegamento caliente para montar los componentes dentro de la caja de forma similar a cómo yo creé la caja para mi timbre inteligente , y para recortar un agujero en la tapa del contenedor para usarlo para el sensor PIR. Si usted ya está utilizando una caja de cartón, puede cortar un lado de la caja y reemplazarlo con celofán, papel o con tejido fino para que funcione como un difusor de luz para los Neopixels. Los componentes se pueden instalar dentro de casi todas las carcasas huecas, así que, ¿por qué no es creativo con la caja? Es posible utilizar un juguete de plástico hueco y un taladro o una navaja para recortar los espacios para el botón, la pantalla y el cable USB.

Cuando creé el prototipo, utilicé la placa de pruebas y los cables de conexión del kit básico para facilitar el montaje de circuito y para probar el código. Sin embargo, dentro de la carcasa impresa en 3D no hay espacio suficiente para una planta de pruebas normal. En vez de eso, corté algunos cables de conexión hembra-hembra para crear cables más cortos para soldarlos al timbre, al botón, a la pantalla OLED y al anillo neopixel, para conectarlos a los pines del microcontrolador. También podría haber usado un Cable de conexión con núcleo de trenzado fino (por ejemplo, de calibre el 22 - 30) y soldado los cables directamente a los pines del microcontrolador. También partí cinco conectores Berg y los soldé para unir los cables de tierra de cada componente periférico para que todos se puedan conectar con el único pin de tierra del microcontrolador, y otro conjunto de conectores Berg para 3,3 V para alimentar la pantalla OLED y el anillo de neopixel.

Aunque los pines de energía de mi pantalla OLED y del anillo de neopixel tienen la etiqueta "5 V", pueden funcionar sin problemas con 3,3 V. Dependiendo del fabricante es posible que algunas pantallas y componentes de neopixel tengan la etiqueta VCC. Si no está seguro, verifique la hoja de datos de los componentes que utilizará, y asegúrese de que sólo selecciona componentes que son compatibles con 3,3 V.

1b

Cómo conectar los componentes y cómo montar el dispositivo IoT

Siga esté video para conectar el botón, el timbre, el anillo de neopixel ring, y la pantalla OLED al microcontrolador siguiendo el circuito de Figura 4 y luego monte la mascota en la caja.

Conecté los componentes de Feather Huzzah ESP8266, siguiendo el circuito de Figura 4.

  • Botón conectado a GND y al pin 14
  • Timbre conectado a GND y a pin 12
  • Anillo de neopixel conectado a GND, 3,3 V y al pin 2
  • Pantalla OLED conectada a GND, 3,3 V y a los pines I2C (SCA en el pin 4 y SCL en el pin 5)
Figura 4. Circuito con los componentes conectados directamente a la placa de desarrollo del microcontrolador (Vea Agradecimientos
2

Preparar el microcontrolador

Utilicé MicroPython para desarrollar los programas de mascota de hábitos saludables. MicroPython es un compilador de código abierto de python 3 y un tiempo de ejecución que se ejecuta en microcontroladores, entre ellos, el ESP8266. MicroPython implementa un subconjunto de bibliotecas estándar de Cpython y las principales de Python, además de bibliotecas adicionales como la biblioteca de la máquina para trabajar con GPIO, y la biblioteca mqtt para las comunicaciones MQTT. También implementa el proceso de Leer, Evaluar, Imprimir, Enlazar (REPL), lo que es genial para la creación de prototipos interactivos.

Cargué el firmware de MicroPython en la placa, conecté el microcontrolador y después cargué los programas personalizados de Python para trabajar con el botón, los neopixels, el timbre, y la pantalla que están conectados con el microcontrolador. Utilice la guía siguiente para preparar su dispositivo, lo que incluye la instalación de la imagen para utilizarla con MicroPython, conectar el dispositivo, configurar el wifi y desarrollar programas para utilizarlos con el dispositivo.

2a

Cómo instalar la imagen del dispositivo con MicroPython

Siga este video para ver cómo instalar la imagen de la placa con el firmware de MicroPython.

Si esta es la primera vez que usted utiliza un Feather Huzzah ESP8266, es posible que tenga que instalar el controlador de serie USB de Silicon Labs CP210x para permitir que su computadora se comunique con la placa a través del USB. Una vez que el controlador esté instalado, verá que un dispositivo aparece cuando lo conecte a la placa utilizando un USB. En mi Mac, esto se muestra como /dev/tty. SLAB_USBtoUART, y en una máquina Windows se verá un puerto COM (por ejemplo, COM4).

Para instalar la imagen del firmware de MicroPython en la placa utilicé una herramienta basada en Python llamada esptool. Es posible instalar la herramienta con el gestor de paquetes pip para Python:

	pip install esptool

Es una buena idea borrar completamente la imagen del microcontrolador antes de actualizar el the firmware. Desde la línea de comando, ejecute la utilidad esptool con el comando erase_flash, proporcionándole el puerto como un parámetro. Por ejemplo, en una computadora MacOS, envíe este comando:

	esptool.py --port /dev/tty.SLAB_USBtoUART erase_flash

O en una computadora Windows, envíe este comando:

	esptool.py --port COM4 erase_flash

Tendrá que descargar MicroPython. Los archivos binarios (.bin) de cada versión de MicroPython están disponibles en GitHub: https://github.com/micropython/micropython/releases. Descargue el archivo .bin estable más reciente y utilice esptool para cargar el archivo del firmware en la placa utilizando el comando write_flash. Este comando, toma como parámetros el puerto, la velocidad de transmisión y el tamaño de la memoria flash:

	esptool.py --port /dev/tty.SLAB_USBtoUART --baud 460800 write_flash --flash_size=detect 0 ./esp8266-20170612-v1.9.1.bin
2b

Cómo conectarse al dispositivos

Una vez que MicroPython se esté ejecutando en el dispositivo, usted tendrá que conectarse al dispositivo a través del puerto serie UART y del cable USB para acceder al REPL. La velocidad de trasmisión predeterminada (o, la velocidad a la que se transmite la información hacia el microcontrolador) es de 115200 bits por segundo. Utilice un emulador de terminales para conectarse a la placa. Si usted tiene un Mac, puede utilizar el programa de la pantalla GNU desde la línea de comandos:

	screen /dev/tty.SLAB_USBtoUART 115200

En Linux, es posible utilizar una pantalla o picocom; en Windows, puede utilizar un emulador de terminales como TeraTerm o Putty.

Una vez se haya conectado al microcontrolador, pulse Enter para ver el prompt de REPL. Es posible ingresar directamente los comandos o presionar control-e para entrar en modo de pegado, lo que le permitirá pegar programas enteros (pulse control-d para salir del modo de pegado).

2c

Cómo configurar la wifi

De modo predeterminado, el ESP8266 está configurado para crear una red inalámbrica adhoc cuya contraseña predeterminada es “micropythoN” (con “N” mayúscula). Para conectar su dispositivo a una red inalámbrica existente, puede configurar los ajustes desde el archivo main.py que se ejecuta justo después de que el dispositivo arranque. Utilice su editor de texto o un IDE para crear un archivo llamado main.py que tenga el siguiente contenido (cambie el <essid> y la <contraseña> para que coincidan con la configuración de su red inalámbrica local):

	import network
	# Desactivar el modo de punto de acceso
	ap_if=network.WLAN(network.AP_IF)
	ap_if.active(False)
	# Configurar la conexión para una red inalámbrica
	sta_if = network.WLAN(network.STA_IF)
	if not sta_if.isconnected():
	  sta_if.active(True)
	  sta_if.connect('<essid>', '<password>')
	  while not sta_if.isconnected():
	    pass
2d

Cómo desarrollar programas con MicroPython y cómo cargarlos en el dispositivo

El código de la mascota de hábitos saludables está publicado en el mi repositorio healthy-habits-pet de GitHub en el directorio de micropython. Este repositorio de GitHub incluye el archivo main.py de la sección anterior y los programas para comprobar las luces, los sonidos y la pantalla LED (que requiere bibliotecas adicionales), y para utilizar MQTT para enviar datos a Watson IoT Platform.

Siga los pasos del video siguiente para subir las bibliotecas y programas a su dispositivo.

Es posible utilizar MicroPython REPL para ingresar las declaraciones del programa línea por línea, para subir archivos completos de programas de Python que lean desde sensores o para controlar dispositivos de salida que estén conectados a los pines del microcontrolador.

Para cargar archivos, puede utilizar ampy desde la línea de comandos (https://github.com/adafruit/ampy)

ampy --port /dev/tty.SLAB_USBtoUART put main.py

Los ajustes surtirán efecto la próxima vez que arranque el microcontrolador.

Las siguientes secciones describen algo del código de los programas de Python.

Pantalla OLED

Hay muchas bibliotecas de terceros disponibles para que MicroPython soporte componentes especializados. La pantalla OLED que se utiliza para los ojos de mi mascota se pueden programar utilizando la biblioteca SSD1306: https://github.com/adafruit/micropython-adafruit-ssd1306

Para utilizar la biblioteca, descargue el archivo mpy (que está disponible en la pestaña versiones de la página de GitHub), y cárguela en la placa utilizando ampy desde la línea de comandos.

	ampy --port /dev/tty.SLAB_USBtoUART put ssd1306.mpy

Utilicé la función drawPixel de la biblioteca para dibujar una imagen que se ha almacenado como matrices de bytes (al iterar por las matrices para determinar si dibujar un pixel o no). El programa oled.py de repositorio git healthy-habits-pet incluye algunas imágenes de ejemplo, como los corazones de amor que se utilizan para animar los ojos después de completar correctamente el ejercicio y los ojos de dormido que se muestran cuando la mascota no se ha activado durante un tiempo.

Botón

Para leer desde el botón que está conectado al pin 14, utilice la clase Pin para configurar el pin en modo de entrada y, después, lea el valor del botón dentro de una variable:

	from machine import Pin 
	button = Pin(14, Pin.IN, Pin.PULL_UP)
	pressed = button.value()

Para detectar las pulsaciones es posible consultar el estado del botón, por ejemplo, desde dentro de un bucle. El programa mqttbluemix.py del repositorio git healthy-habits-pet muestra un ejemplo de respuesta a pulsaciones del botón (al publicar eventos de MQTT).

Piezo

La piezoalarma puede producir tonos a diferentes frecuencias mediante la utilización de salida de Pulse Width Modulation (PWM). Para hacer que la piezoalarma suene con una frecuencia de 440 (la nota La por encima de Do medio), cree una instancia de la clase Pin en el modo de salida del pin 12, y utilice el objeto pin para crear una instancia de la clase PWM para controlar la frecuencia y el ciclo de trabajo de PWM. Finalmente, apague el objeto para detener el sonido:

	from machine import Pin, PWM
	import time
	piezo = PWM(Pin(12, Pin.OUT), freq=440, duty=512)
	piezo.freq(440) 
	time.sleep(0.5)
	piezo.deinit()

También es posible escribir directamente en el pin para controlar el piezo. El programa soundfx.py del repositorio git healthy-habits-pet contiene un ejemplo de cómo utilizar funciones matemáticas para controlar el retraso entre escrituras digitales altas y bajas que alternan, para generar sonidos interesantes (creando manualmente una señal como la de PWM).

	def soundFX(amplitude=1000.0, period=1000.0, repeat=100):
	  for i in range(1,repeat):
	    uDelay = math.floor(1.5 + amplitude + amplitude * math.sin(utime.ticks_ms() / period))
	    p.value(1)
	    utime.sleep_us(uDelay)
	    p.value(0)
	    utime.sleep_us(uDelay)

Vea el programa soundfx.py del repositorio git healthy-habits-pet git para encontrar ejemplos sobre el uso de esta función.

Neopixels (LEDs)

La clase neopixel viene incluida dentro de MicroPython. Se puede utilizar para hacer que pixeles individuales del anillo tengan diferentes colores, para utilizar una tupla de valores de color rojo, verde y azul, cada uno de ellos entre 0 y 255. Por ejemplo, para hacer que todos los pixeles del anillo que están conectados al pin 2 se pongan rojos, itere por los pixeles, configurándolos a (255, 0, 0). Finalmente, utilice el método de lectura para actualizar las luces LED.

from machine import Pin
from neopixel import NeoPixel 
np = NeoPixel(Pin(2,  Pin.OUT), 12)
for i in range(np.n):
    np[i] = (255,0,0)
np.write()

Es posible encontrar más ejemplos de trabajo con la clase Neopixel en el programa lights.py del repositorio git healthy-habits-pet.

3

Cómo conectar el dispositivo a IBM Watson IoT Platform

El dispositivo utiliza MQTT para publicar los eventos del hábito (que se registran cuándo el botón es pulsado) en IBM Watson IoT Platform, donde los eventos se almacenan en una base de datos Cloudant NoSQL. Una aplicación en la nube lee los datos y envía eventos de actualización al dispositivo para hacer que la mascota ejecute un recordatorio (con luces y sonido). Utilicé MQTT para la comunicación de dos vías desde el dispositivo hacia la aplicación en la nube, y viceversa, porque es un protocolo muy ligero y porque es compatible con la biblioteca mqtt que está incorporada en MicroPython. (Lea más acerca de los protocolos de red, entre ellos, el MQTT en mi guía de redes.) MQTT requiere de un intermediario, así que utilizaré un intermediario que se ejecuta en IBM Watson IoT Platform. Figura 5 muestra esta arquitectura de mi aplicación de IoT.

Figura 5. Arquitecturas del sistema de seguimiento de hábitos saludables

Para configurarlo para usar MQTT con IBM Watson IoT Platform, complete los siguientes pasos:

  • Cree y configure un servicio IoT y un servicio de Cloudant DB. Registre un tipo de dispositivo nuevo (en nuestro caso, ESP8266)
  • Registre el dispositivo

Continúe con el siguiente video para ver cómo configuro la base de datos de Cloudant y el servicio de la plataforma IoT Platform en IBM Bluemix, y después, registre el dispositivo de forma que pueda enviar y recibir mensajes con MQTT. Cada una de las siguientes secciones brinda información adicional sobre cómo completar estos pasos.

3a

Cree y configure un servicio de IoT Platform

Inicie sesión en IBM Bluemix.

Para configurar un nuevo servicio de IoT Platform, abra el Catálogo desde dentro del panel de instrumentos de Bluemix, seleccione “Internet de las Cosas” en la barra lateral de la derecha de la pantalla y, después, seleccione “Internet of Things Platform”. Ingrese un nombre de servicio, seleccione una región y un plan y, después, pulse el botón “Crear” para crear el servicio.

3b

Cree y configure un servicio de Cloudant NoSQL DB

Cree Cloudant DB desde el Catálogo de Bluemix seleccionando “Datos y Analítica” en la barra lateral y, luego, seleccionando 'Cloudant NoSQL DB'. Ingrese un nombre para el servicio de Cloudant, seleccione una región y un plan y, después, pulse el botón 'Crear'.

Para que los datos del dispositivo persistan, configuré Cloudant DB como un servicio historiador. Lea la documentación de Bluemix en "Conectar y configurar un servicio historiador." Haga doble clic en su servicio Internet of Things Platform que se muestra en el panel de instrumentos de Bluemix y, después, haga clic en el botón Iniciar para ver los detalles del servicio. Desde el panel de instrumentos de IoT Platform, seleccione Extensiones en la barra lateral y pulse el botón Configuración que está debajo del elemento Almacenamiento de Datos Históricos de la pantalla de extensiones. Tendrá que habilitar las ventanas emergentes. Configure el servicio historiador seleccionando un cubo, una zona horaria y el nombre de la base de datos, y, después, haga clic en Hecho para completar la configuración del servicio.

Luego haga clic en Confirmar en la ventana emergente que aparece después de que haya configurado el servicio historiador.

3c

Registre un tipo de dispositivo y registre el dispositivo

Para registrar el tipo de dispositivo (ESP8266) y nuestra mascota de hábitos saludables, siga los pasos de la receta "Cómo Registrar Dispositivos en IBM Watson IoT Platform". También, consulte la documentación de Bluemix en "Dispositivos Conectados."

Si hubiera querido utilizar más de una mascota de hábitos saludables, por ejemplo, para tener un dispositivo en mi escritorio para recordarme que haga una pausa para realizar ejercicios y otro en la cocina para registrar cuando me acuerdo de tomar las vitaminas. Tendría que repetir el paso final para registrar cada uno de los dispositivos. La aplicación en la nube podría distinguir entre los dispositivos basándose en el ID del dispositivo o en sus metadatos, o yo podría crear varios tipos de dispositivos en vez de sólo un tipo ESP8266; por ejemplo, podría tener un tipo mascota_de_seguimiento-_de_vitaminas y un tipo mascota_de_seguimiento-_de_ejercicios.

3d

Configure la conexión en la conexión de MicroPython

Una vez haya registrado un dispositivo, necesitará la siguiente información (que usted copió de la pantalla final cuando registraba un dispositivo) para configurar la conexión en el programa mqttbluemix.py de MicroPython para que se ejecute en el dispositivo:

  • ID de Organización (el identificador de 6 caracteres)
  • Tipo de Dispositivo (en nuestro caso, ESP8266)
  • ID del dispositivo específico (por ejemplo, yo utilicé pet1)
  • Token de Autentificación

Usted debería utilizar TLS para conectarse al intermediario de MQTT de forma segura. Para crear una conexión segura hacia el intermediario de MQTT desde MicroPython, establezca el parámetro ssl en "Verdadero" y el puerto a 8883 cuando inicialice el MQTTClient. Cambie el valor <orgid> siguiente al identificador de 6 caracteres que se creó cuando configuró su servicio de IoT. El <device_type> debería ser el tipo que usted registró (ESP8266) y el <device_id> será el id del dispositivo que usted registró. Cambie el <token> al token de autenticación que usted estableció cuando registró el dispositivo.

server = "<orgid>.messaging.internetofthings.ibmcloud.com"
clientId = "d:<orgid>:<device_type>:<device_id>"
client = MQTTClient(clientId, server, port = 8883, ssl = True,
                user="use-token-auth", password=<token>)

Por convención los temas de MQTT para las aplicaciones tienen esta forma:
iot-2/type/<tipo de dispositivo>/id/<id de dispositivo>/evt/<tipo de evento>/fmt/<tipo de formato>

Para los dispositivos, los temas de MQTT tienen la siguiente forma:
iot-2/evt/<tipo de evento>/fmt/<tipo de formato>

Para los comandos, la convención es:
iot-2/cmd/<tipo de comando>/fmt/<tipo de formato>

Por lo tanto, la mascota pública en el tema iot-2/evt/habit/fmt/json cuando se presiona el botón para registrar la finalización correcta del hábito del que se estaba realizando el seguimiento. Se suscribe al tema iot-2/cmd/update-tracker/fmt/json para recibir comandos de actualización desde la aplicación en la nube, lo que actualiza el estado que se muestra en la mascota (en los ojos de la mascota), y también se utiliza para lanzar recordatorios (usando las luces LED y el timbre).

Para publicar un evento, utilice el método "client.publish":

client.publish(b"iot-2/evt/habit/fmt/json", b"{\"respondió\":\"verdadero\"}")

Vea Figura 6 para ver los detalles, incluidos los eventos recientes, para nuestra mascota de hábitos saludables.

Figura 6. Detalles de un dispositivo macota en el panel de instrumentos de IBM Watson IoT Platform

Los eventos recientes publicados por el dispositivo se muestran a través del panel de instrumentos de IoT, así que usted puede utilizar este panel de instrumentos para verificar que los mensajes se están enviando desde el dispositivo. Usted también puede mirar en el Registro de la Conexión o en el Registro de Diagnóstico para resolver cualquier problema. Los eventos del dispositivo también se almacenan en la base de datos de Cloudant que usted configuró, la cual muestra Figura 7.

Figura 7. Ejemplo de datos de dispositivo que se almacenan en Cloudant DB
3e

Conecte los servicios de Bluemix

Cuando haya finalizado el proceso de implementación, será capaz de ver y administrar la aplicación desde su página de Bluemix Cloud Foundry Apps (asegúrese de que en la parte superior del panel de instrumentos selecciona la región donde implementó la aplicación, en mi caso fue Sur de EE. UU.). Haga doble clic en el nombre de la aplicación para ver los detalles de la aplicación implementada.

Figura 8. Detalles de la aplicación implementada

Para utilizar el servicio de Cloudant DB y MQTT que usted configuró antes, necesitará conectar los servicios a la aplicación. Siga estos pasos para conectar Cloudant DB a la aplicación:

  1. Haga doble clic en la aplicación desde la página Cloud Foundry Apps para ver los detalles de la aplicación, y después haga clic en Conectar existente debajo de Conexiones.
  2. Seleccione el servicio Cloudant NoSQL DB que usted creó antes.
  3. Se le solicitará que reevalúe (y reinicie) la aplicación. Bluemix brindará las credenciales de la base de datos para la aplicación que utiliza la variable ambiental VCAP_SERVICES .

Siga los mismos pasos para conectar la aplicación con el servicio IoT Platform. Después de conectar ambos servicios usted debería verlos cuando seleccione Conexiones en la barra lateral de la izquierda.

Figura 9. Servicios conectados

La variable de entorno VCAP_SERVICES sólo está disponible cuando la aplicación se está ejecutando en Bluemix. Si quiere conectarse a esos servicios cuando está ejecutando la aplicación de forma local, tendrá que actualizar el código local para apuntar a esos servicios almacenando las credenciales en un archivo de propiedades, por ejemplo:

  • En el panel de instrumentos de Bluemix vaya a Conexiones -> Cloudant -> Ver Credenciales.
  • Edite el archivo src/main/resources/cloudant.properties. Copie el campo de la url de las credenciales al campo de cloudant_url del archivo de propiedades.
4

Cómo ejecutar la aplicación en la nube

Aplicación en la nube es una aplicación de Java Cloud Foundry. Para desarrollar la aplicación en la Nube, utilicé Eclipse. El código de origen para la aplicación está publicado en mirepositorio healthy-habits-pet de GitHub del directorio cloud-app.

Siga el video para ver cómo el dispositivo interactúa con la aplicación en la nube y cómo ejecutar la aplicación en la nube localmente con Maven, en Bluemix con la línea de comandos o en Bluemix con Eclipse.

4a

Ejecute la aplicación de forma local con Maven (desde la línea de comandos)

Usted puede ejecutar la aplicación localmente. Después de que haya clonado la aplicación desde GitHub, utilice Maven para descargar las dependencias y para crear el archivo .war:

mvn clean install

Después ejecute la aplicación localmente con el comando liberty:run-server.

mvn install liberty:run-server

Usted puede acceder a la aplicación en el siguiente URL: http://localhost:9080/HealthyHabitsBackend

4b

Ejecute la aplicación en Bluemix (desde la línea de comando)

Para ejecutar la aplicación en Bluemix, utilice las herramientas de Bluemix CLI para seleccionar el URL de la API de Bluemix para la región en la que va a implementar (por ejemplo, Sur de EE. UU. es https://api.ng.bluemix.net):

	bluemix api https://api.ng.bluemix.net

Después, inicie sesión en Bluemix con su id de IBM:

	bluemix login -u <su nombre de usuario> -o <el nombre de su organización en Bluemix>-s dev

Es posible utilizar la opción de inicio de sesión único si se utiliza un ID federado:

	bluemix login -o <su organización> -s dev –sso

El archivo manifest.yml incluye la configuración para la aplicación, lo que incluye el nombre y la ubicación, cuánta memoria hay asignada a cada instancia y cuántas hay que crear. Es posible editar esos valores para personalizar cómo se va a implementar la aplicación. Vea la documentación de Bluemix en "Implementar aplicaciones" para obtener detalles sobre el manifiesto de la aplicación. Utilice Bluemix CLI para enviar la aplicación a Bluemix, lo que crea una nueva aplicación de Cloud Foundry.

	bluemix app push "Backend de Mascota de Hábitos Saludables"
4c

Ejecute la aplicación en Bluemix (con Eclipse)

Si prefiere, puede implementar la aplicación desde Eclipse en vez de desde la línea de comandos. IBM Eclipse Tools for Bluemix brinda funciones de depuración remotas y de actualizaciones incrementales.

Importe la aplicación a Eclipse seleccionando Archivo -> Importar -> Maven desde el menú y después seleccione Proyectos de Maven Existentes.

Tendrá que crear una definición de servidores de Bluemix:

  • Desde la vista Servidores (para ver esta vista vaya a Ventana -> Mostrar Vista -> Otras -> Servidores), añada un servidor nuevo.
  • Seleccione IBM -> IBM Bluemix y siga los pasos del asistente.

Después podrá ejecutar su aplicación en Bluemix:

  • Haga clic derecho en la aplicación y seleccione Ejecutar Como -> Ejecutar en Servidor
  • Busque y seleccione el servidor de IBM Bluemix que usted creó antes y haga clic en Finalizar.
  • El asistente le guiará a través del inicio de sesión en Bluemix y de la implementación de la aplicación.

Resumen y ampliación de la aplicación

He mostrado detalladamente cómo diseñé mi dispositivo de seguimiento de hábitos y cómo lo conecté a IBM Watson IoT Platform para enviar y recibir datos desde una base de datos NoSQL y con una aplicación de nube. He descrito cómo configuré un servicio de Cloudant NoSQL DB y un servicio de IoT Platform en IBM Bluemix, que brinda un intermediario de MQTT para enviar y recibir datos desde el dispositivo IoT de seguimiento de hábitos, y, también, un servicio historiador para que los mensajes de MQTT persistan automáticamente en Cloudant DB. También he mostrado detalladamente cómo implementé y conecté esos servicios a una aplicación en la nube que fue desarrollada en Java.

He esquematizado cómo desarrollé el software del dispositivo IoT de seguimiento de hábitos con MicroPython, y también he descrito cómo construir el dispositivo con el kit de desarrollo Feather Huzzah ESP8266 IoT. Usar el kit de desarrollo ha simplificado el desarrollo del dispositivo y ha brindado los componentes electrónicos necesarios para desarrollar el comportamiento básico del dispositivo con un botón que envía eventos de MQTT y una piezoalarma para notificar. Usar el kit ha ahorrado el tiempo de buscar individualmente los componentes y acabó con el problema de si los componentes serían compatibles con el microcontrolador y de si funcionarían bien con MicroPython. También cómo se podía ampliar las capacidades del kit de desarrollo añadiendo una pantalla OLED y un anillo neopixel, que son compatibles con las bibliotecas de MicroPython.

La funcionalidad del sistema de seguimiento se ha mantenido mínima de una forma deliberada para este tutorial, y tan sólo se enfoca en responder a las acusaciones del botón y a la notificación utilizando los LEDs, la piezoalarma y la pantalla. Sin embargo, aquí tiene algunas maneras de extender esta aplicación:

  • Gestión de energía: Esto permite que la mascota funcione de forma eficiente con baterías, y se puede lograr conectando el pin 16 de GPIO al pin de RST de Feather Huzzah ESP8266 y, después, utilizando el reloj en tiempo real de la biblioteca de la máquina de MicroPython para ampliar el programa del dispositivo para añadir el soporte para sueño profundo, para que la mascota duerma periódicamente en intervalos establecidos para ahorrar energía y luego se conecte cuando se despierta.
  • Analíticas: Para este tutorial la aplicación en la nube no es muy inteligente acerca de cuándo enviar los recordatorios. Utilizar IBM Watson IoT Platform para visualizar y realizar análisis sobre los datos que se recopilan desde el dispositivo sería una mejora para la aplicación para determinar los mejores momentos, para ajustar la frecuencia de los recordatorios basándose en la frecuencia de los hábitos pasados y para utilizar estos conocimientos para planificar recordatorios periódicos con Workload Scheduler .
  • Registro automático de dispositivos: He simplificado las cosas registrando mi dispositivo de seguimiento de hábitos con IBM Watson IoT Platform Dashboard. Para que la aplicación escale, para permitir muchos dispositivos que son propiedad de muchos usuarios, los dispositivos mascota tendrían que registrarse de forma programática. Una forma de lograrlo sería que los usuarios registrasen dispositivos a través de una aplicación web personalizada o en lotes a través de la API de REST. Puede leer más acerca de registrar dispositivos en lotes con REST o utilizando la biblioteca de clientes de Java. Esta receta para utilizar la biblioteca de Java Client también describe cómo simular varios dispositivos para obtener un flujo de eventos constante para utilizarlo durante el desarrollo y las pruebas.
  • Aplicación móvil: Otra mejora sería la actualización a un micro controlador basado en ESP32 (el sucesor del ESP8266) y utilizar el Bluetooth de baja energía (BLE) para conectar los dispositivos de IoT a través de un teléfono que ejecute una aplicación móvil personalizada que se ocuparía del registro y de permitir la coordinación de varios dispositivos. Este enfoque ha sido adoptado por muchos otros dispositivos relacionados con la salud y con el estado físico personal, incluidos los sistemas de seguimiento de estado físico / actividad y las básculas inalámbricas. Para hacer un seguimiento de varios dispositivos para varios usuarios, la aplicación en la nube también se puede ampliar posteriormente para así gestionar las cuentas de usuarios y para asociar los dispositivos a cada usuario.
  • Dispositivos gateway: Otra opción para escalar esta aplicación sería añadiendo dispositivos gateway a la arquitectura. Esta solución es adecuada para aplicaciones de mayor escala o intensivas en datos, por ejemplo, dentro de ciudades conectadas, o para aplicaciones comunitarias que conectan miles de dispositivos, o para aplicaciones sanitarias donde los dispositivos contienen muchos sensores biométricos o relacionados con actividades, donde se aplicarían técnicas de computación vanguardistas para filtrar y preprocesar los grandes volúmenes de datos que los dispositivos estén coleccionando.

Agradecimientos

La autora utilizó los diagramas de circuitos de estos componentes de Fritzing para crear sus propios diagramas de circuitos para este tutorial:


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Internet of Things
ArticleID=1054402
ArticleTitle=Aumente sus habilidades de desarrollo de IoT desarrollando un sistema de seguimiento de hábitos saludables
publish-date=12042017