Contenido


Cree un juego de acelerómetro de IoT divertido y sencillo

Descubra cómo capturar y enviar datos de sensores hacia la nube utilizando Watson IoT Platform y después analice esos datos utilizando Data Science Experience

Comments

Es posible crear un pequeño y divertido juego para que juegue con sus amigos y compañeros. Puede jugar a un juego que he llamado "Harlem Shake" con cualquiera que tenga un teléfono inteligente. (Véanos agitarlo en una reciente reunión de DeepLearning.)

Jugar es fácil: proporcione a alguien un URL al que pueda acceder desde su teléfono inteligente, y después haga que agite su teléfono inteligente tan fuerte como puedan. ¡La persona que utilice más energía gana!

Lo que ocurre en el trasfondo es bastante básico: los datos del acelerómetro del teléfono inteligente se trasmiten a la nube, se capturan en una base de datos y, después, un script calcula quién es el ganador. Parece sencillo y divertido. Pero primero tiene que construirlo. Y mientras tanto aprenderá mucho acerca de MQTT, NodeRED, ApacheCouchDB y ApacheSpark.

Este juego de IoT, como todas las aplicaciones de IoT, requiere de un sistema completo para trabajar. En este tutorial, utilizaremos IBM Cloud (IBM Bluemix) y los siguientes servicios de IBM Watson IoT Platform:

  • Node-RED, que utilizaremos para crear la aplicación IoT y que utilizamos para trasmitir los datos desde el sensor hasta la base de datos
  • IBM Watson IoT Platform, que utilizamos como el intermediario de mensajería MQTT para mantenerlo todo junto
  • Cloudant, un sistema de bases de datos NoSQL que utilizamos para almacenar los datos
  • Un script de ApacheSpark SQL, que ejecutamos en IBM Data Science Experience y que dice quién gana

Obviamente, todos los teléfonos inteligentes funcionarán como sensores, trasmitiendo los datos a nuestra aplicación de IoT.

Es posible construir el juego en seis pasos:

  • Implemente la aplicación del juego con la implementación de un clic.
  • Reemplace el servicio Internet of Things Platform.
  • Asegúrese de que el intermediario de mensajería MQTT pueda recibir los datos.
  • Cree una base de datos NoSQL para almacenar los datos.
  • Transmita los datos a Cloudant con Node-RED.
  • Analice los datos en un cuaderno de ciencias de datos.

Qué necesitará para construir su aplicación

  • Una cuenta de Bluemix. (Es posible solicitar una cuenta gratuita aquí). Por el momento no se puede utilizar una cuenta freemium para esta aplicación.
  • Un teléfono inteligente. O uno o más amigos con teléfonos inteligentes para jugar al juego con usted.
  • Una cuenta de Data Science Experience.
    1. Abra http://datascience.ibm.com/
    2. Haga clic en Registrarse.
    3. Haga clic en Inicie sesión con su IBM ID.
    4. Haga clic en Registrarse para DSX.
    5. En la página de Crear Organización y Espacio, haga clic en Continuar.
    6. Espere la inicialización del entorno y cuando esté disponible haga clic en Empezar.
1

Implemente la aplicación del juego con la implementación con un clic

Después de tener disponible una cuenta de Bluemix, puede implementar la aplicación con tan solo un clic. Tendrá que configurar la implementación de forma manual. He creado la aplicación de muestra de un juego de IoT para usted y la he puesto en Github para que la descargue.

Nota: Con una cuenta freemium estándar no se puede utilizar la opción de autoimplementación porque no puede acceder a los servicios para construir el canal.

  1. Inicie sesión en cuenta de Bluemix .
  2. Vaya a mi repositorio discover-iot-sample de GitHub, y en las instrucciones de README, haga clic en Desplegar a Bluemix .screen capture of the github readme deploy to bluemix button
    screen capture of the github readme deploy to bluemix button
  3. En Bluemix, haga clic en Desplegar.
    screen capture of the Bluemix Deploy                         button
    screen capture of the Bluemix Deploy button

    Mientras se está creando la aplicación se muestra una ventana de Estado. Una vez la aplicación esté creada, se habilitará el botón Ver aplicación.screen capture of the status window

    screen capture of the status window

    Nota: Si el botón Ver aplicación está desactivado, puede hacer clic en Delivery Pipeline para ver el progreso de la implementación, lo que puede tardar varios minutos.

    screen capture of the delivery pipeline progress
    screen capture of the delivery pipeline progress
  4. Si abrió Delivery Pipeline haga clic en la cadena de herramientas discover-iot-sample. Después, haga clic en el botón Ver aplicación .

    Se muestra el enlace que necesita para jugar al juego en un teléfono inteligente. Copie el URL (y cree un URL corto o un código QR para el URL), y envíeselo a usted mismo. Después verá el enlace para jugar al juego.

    screen capture of the link
    screen capture of the link

Ahora puede enviar datos del acelerómetro hacia la nube, pero no se almacenarán. Después, tenemos que configurar el almacenamiento de datos.

2

Reemplace el servicio Internet of Things Platform

Después de que implemente la aplicación del juego necesitará una manera de poner los datos de acelerómetro en la nube. Para poner los datos en la nube, utilizará Node-RED, que es un editor de flujos gráficos de código abierto. Usted utiliza Node-RED para suscribirse a los datos de MQTT que vienen del teléfono inteligente y que se están almacenando en la base de datos en la nube. Sin embargo, antes de empezar cono Node-RED, necesitamos reemplazar el servicio de la plataforma predeterminada con el servicio que he incluido como parte de la aplicación que acabamos de implementar.

2a

Borre el servicio IoT Platform predeterminado

El boilerplate de Internet of Things Platform Starter contiene un motor de Node-RED que usted utilizará para procesar los mensajes de IoT. Primero, tiene que remover del arranque el servicio Watson IoT predeterminado.

  1. Ya debería haber iniciado sesión en su cuenta de Bluemix. Si no es así, inicie sesión.
  2. Vaya a Internet of Things Platform Starter en el catálogo de Bluemix. (de forma alternativa, es posible navegar a este Starter seleccionando Catálogo > Boilerplates > Internet of Things Platform Starter.)
  3. En el campo nombre de aplicación , ingrese un hombre único para su aplicación, como myharlemshake, y después haga clic en Crear.
  4. Espere hasta que el estado cambie de Iniciando a Ejecutándose. screen capture of the starting status
    screen capture of the starting status
    screen capture of the running status
    screen capture of the running status
  5. En el menú de la izquierda, haga clic en Conexiones. screen capture of the Connections menu
    screen capture of the Connections menu
  6. Para el servicio de Internet of Things Platform predeterminado, haga clic en el menú de la parte superior derecha, y después haga clic en Desvincular servicio .
  7. En el mensaje emergente que se muestra, seleccione Borrar esta instancia del servicio, y después haga clic en OK.
  8. Cuando se le pida restablecer su aplicación, haga clic en Cancelar.
2b

Conéctese al servicio IoT de la aplicación del juego implementado

Ahora que ha borrado el servicio iotf-service-free predeterminado, necesita crear una conexión hacia el servicio IoT de la aplicación del juego implementado y establecer el nivel de seguridad correcto.

  1. Haga clic en el botón Conectar existente .
  2. Seleccione discover-iot-try-service, y después haga clic en Conectar.
  3. Cuando se le pida restablecer su aplicación, haga clic en Restablecer.
  4. Espere hasta que el estado cambie a Ejecutándose.
  5. Haga clic en discover-iot-try-service, y después haga clic en Iniciar. Esto inicia IBM Watson IoT Platform en IBM Cloud.
  6. Pase el ratón por encima de la columna de los iconos de la izquierda. En el menú de la izquierda, seleccione Seguridad.
  7. Editar Seguridad de la Conexión.
  8. En la sección de Regla Predeterminada, bajo Nivel de Seguridad, seleccione TLS Opcional, y después haga clic en Refrescar conformidad.
  9. En la parte superior izquierda de la ventana, haga clic en Guardar .
3

Asegúrese de que el intermediario de mensajería MQTT pueda recibir los datos

Ahora que hemos conectado con éxito con el servicio IoT que he brindado en la aplicación del juego, necesitamos utilizar Node-RED para almacenar en la nube los datos del sensor (acelerómetro).

3a

Proteja el editor de flujos de Node-RED

Antes de poder abrir Node-RED usted debe configurar un nombre de usuario y una contraseña para acceder a los flujos de Node-RED en su aplicación.

  1. Tiene que volver a la página de Cloud Foundry Apps para la aplicación de su juego. En su navegador, ubique la pestaña Detalles del Servicio. Desde la lista desplegable de menú de hamburguesa, seleccione Aplicaciones de Cloud Foundry.screen capture of the hamburger menu highlighted
    screen capture of the hamburger menu highlighted
  2. Desde la tabla, seleccione el nombre de la aplicación de su juego.
  3. En el menú de la izquierda, seleccione Conexiones. screen capture of the left menu
    screen capture of the left menu
  4. En la parte derecha de estado haga clic en Visitar URL de Aplicación. El URL debería ser el nombre de su aplicación seguido por mybluemix.net (por ejemplo, https://myharlemshake.mybluemix.net).

    Nota: Escriba este URL porque puede utilizarlo para abrir su instancia Node-RED.

  5. Para proteger su instancia de Node-RED, haga clic en Siguiente.
  6. Elija un nombre de usuario y una contraseña. Anótelos. Haga clic en Siguiente.
  7. Haga clic en Finalizar.
  8. Haga clic en Vaya a su editor de flujos de Node-RED.screen capture of the go to your Node-RED flow editor
    screen capture of the go to your Node-RED flow editor
  9. Ingrese su nombre de usuario y su contraseña para iniciar sesión en Node-RED.

Ahora tiene todo preparado para capturar y almacenar los datos. Ha implementado la aplicación de su juego y ha creado una conexión entre la aplicación de su juego y su intermediario de mensajería. El canal de comunicaciones está funcionando, pero necesita un lugar para almacenar los datos que va a enviar.

3b

Suscríbase al flujo de datos

Ahora que tenemos acceso a Node-RED, vamos a comprobar si los datos que salen de su teléfono inteligente llegan a la nube (el intermediario de mensajería MQTT es un servicio que forma parte de IBM Watson IoT Platform).

Tenemos que utilizar Node-RED para suscribirnos al flujo de datos. Las depuraciones del servicio se realizarán con el panel de depuración de Node-RED.

  1. Ya debería tener abierta su instancia de Node-RED desde la última sección. Si no es así, abra la instancia de Node-RED utilizando el URL para Visitar la Aplicación que escribió cuando inició el motor de Node-RED en la Sección 3ª. Inicie sesión en la instancia de Node-RED de la aplicación de su juego con el nombre de usuario y la contraseña que se asignó usted mismo. screen capture of the log in for Node-RED
    screen capture of the log in for Node-RED
  2. Para borrar todos los nodos existentes en el flujo predeterminado, selecciónelos todos y después pulse las teclas Retroceso o Borrar . (Nota: El acceso directo CTRL-A del teclado no selecciona todos los nodos.) Después, se muestra un lienzo vacío.
  3. En la paleta de izquierda, seleccione y arrastre el nodo de entrada IBM IoT (no utilice el nodo de salida) y el nodo de salida depuración del panel de la derecha. Conéctelos seleccionando un círculo de conexión de un nodo y arrastrándolo a otro círculo de conexión de otro modo.screen capture showing the connection between nodes
    screen capture showing the connection between nodes
  4. Haga doble clic en el nodo IBM IoT .
  5. Para Autenticación, seleccione Servicio de Bluemix, y haga clic en Hecho. Esto le dice al nodo que obtenga las credenciales para conectarse al intermediario MQTT con la inyección de credenciales de Cloud Foundry, lo que es una función muy útil porque en Bluemix la aplicación que ha implementado está conectada con el intermediario MQTT (que es, el servicio Watson IoT Platform).
  6. Haga clic en el botón de Desplegar .
  7. En la parte derecha del padre, bajo el botón Desplegar, seleccione la pestaña depuración.
  8. En su teléfono inteligente, abra la aplicación del juego con elnombre de aplicación que creó en la Sección 1. En mi caso es discover-iot-sample-romeokienzler-1412.mybluemix.net/iot-phone
  9. Proporcione un nombre alfanumérico de 8 caracteres; por ejemplo, qwer1234.
  10. Proporcione una contraseña de 8 caracteres que sólo contenga caracteres alfabéticos entre la a y la z.screen capture showing the connected smartphone device

    En Node-RED, en la pestaña de depuración , debería ver el resultado de la depuración.screen capture of the debug tab

3c

Revise los datos del sensor en el panel de instrumentos de IBM Watson IoT Platform

Otra forma de ver los datos del acelerómetro es mirar a la lista de todos los jugadores del juego.

  1. Abra IBM Watson IoT Platform. Desde la vista Aplicaciones de Cloud Foundry, haga clic en discover-iot-try-service, y después haga clic en Lanzar.screen capture of the Cloud Foundry Apps view
    screen capture of the Cloud Foundry Apps view
  2. En el menú de la izquierda, seleccione Dispositivos.screen capture of the devices view
    screen capture of the devices view
  3. Haga clic en un dispositivo, y luego haga doble clic en un evento de sensorData para ver más detalles. screen capture showing example sensor data
    screen capture showing example sensor data

Felicidades, ya casi hemos acabado. Ha verificado que los datos se pueden transmitir desde un teléfono inteligente a nuestra aplicación de Node-RED com el intermediario de mensajería MQTT de Watson IoT Platform El siguiente paso es trasmitir estos datos a una base de datos y analizarlos.

4

Cree una base de datos NoSQL para almacenar los datos

Cuando jugamos a Harlem Shake estamos enviando datos de un sensor IoT a través de un intermediario de mensajería MQTT de la nube. Tenemos que enviarlos a una base de datos NoSQL. Vamos añadir la función de la base de datos.

  1. Ya debería tener abierta su instancia de Node-RED desde la última sección. Si no es así, abra la instancia de Node-RED utilizando el URL para Visitar la Aplicación que escribió cuando inició el motor de Node-RED en el paso 3a. Inicie sesión en la instancia de Node-RED de la aplicación de su juego con el nombre de usuario y la contraseña que se asignó usted mismo.
  2. En el panel de la izquierda, arrastre el nodo función entre los otros dos nodos, que se conectarán automáticamente a esos nodos. screen capture showing function between IBM IoT and msg.payload nodes
    screen capture showing function between IBM IoT and msg.payload nodes
  3. Primero tenemos que nivelar los mensajes jerárquicos de JSON hacia un esquema relacional. Haga doble clic en el nodo función , y pegue el siguiente código de JavaScript.
    msg.payload =
    {
    X : msg.payload.d.ax,
    Y : msg.payload.d.ax,
    Z : msg.payload.d.ax,
    SENSORID : msg.payload.d.id
    }
    return msg;

    El resultado final debería ser como este.screen capture showing insertion of function code
    screen capture showing insertion of function code
  4. Haga clic en Hecho.
  5. Haga clic en Desplegar. En la pestaña depuración , el resultado debería ser similar a este.screen capture showing example debug results
    screen capture showing example debug results

Ahora que hemos añadido la función de NoSQL, estamos preparados para almacenar los datos en Cloudant.

5

Transmita los datos a Cloudant con Node-RED

Utilizaremos ApacheCouchDB basado en IBM Cloudant para trasmitir los datos a la función de la base de datos NoSQL que acabamos de crear. Cloudant está basado en ApacheCouchDB de código abierto, y lo utilizaremos para almacenar los datos intermedios de nuestro sensor.

  1. En el panel de la izquierda, elija el conector de almacenamiento salida de cloudant (el icono de la nube está a la derecha), y conéctelo a la salida del nodo de función.screen capture showing Cloudant node added to the function
    screen capture showing Cloudant node added to the function
  2. Haga doble clic en el nodo salida de cloudant , y seleccione su base de datos Servicio.

    Nota: Sólo debería haber un servicio de base de datos a no ser que usted haya conectado más de una base de datos de Cloudant a esta aplicación en la consola de Bluemix. (De nuevo, IBM Cloud aquí está haciendo uso de la inyección de credenciales de Cloud Foundry, y básicamente está haciendo el trabajo de configurar el punto final de la base de datos por usted.)

  3. Llame a la base de datos harlemshake.
  4. Seleccione Sólo almacene el objeto msg.payload. screen capture showing the edit of the cloudant out node
    screen capture showing the edit of the cloudant out node
  5. Haga clic en Hecho.
  6. Haga clic en Desplegar.

Ahora es el momento de verificar si los datos llegan a la tabla. Asegúrese de que la aplicación del juego de su teléfono inteligente todavía está enviando datos mirando al panel de depuración de Node-RED.

6

Analice los datos en un cuaderno de ciencias de datos

Todo debería parecer correcto. El teléfono inteligente se agita, los datos se trasmiten hacia la nube y la base de datos está reteniendo los datos. Pero, ¿quién está manteniendo la puntuación? Algo tiene que analizar los datos y, después, anunciar el ganador. Utilizaremos Data Science Experience.

  1. Inicie sesión en datascience.ibm.com.
  2. En la parte superior derecha, haga clic en Crear nuevo > Cuaderno. screen capture showing the data science experience dashboard
    screen capture showing the data science experience dashboard
  3. Haga clic en Desde URL, en el campo Nombre añada un hombre, y en el campo URL del cuaderno , pegue el siguiente URL:
    https://raw.githubusercontent.com/romeokienzler/developerWorks/master/boomboomshakeshakesparkv2.ipynb
  4. Haga clic en Crear Cuaderno.
  5. Para crear una nueva conexión de datos de origen, haga clic en el ícono Encontrar y Añadir Datos> Conexiones > página del proyecto. screen capture showing where the links are located
    screen capture showing where the links are located
  6. Haga clic en Conexiones > Crear Conexión.
  7. En el campo Nombre , especifique un nombre, y después, bajo Instancia de Servicio, seleccione la base de datos. Haga clic en Crear.

    Nota: Sólo se debería enumerar una base de datos de Cloudant de su boilerplate de Node-RED instalado previamente.

  8. Vuelva a su cuaderno y recárguelo. Ahora podrá ver la conexión. Seleccione la primera celda vacía de su cuaderno y haga clic en Insertar código. Las credenciales han sido creadas y ya puede empezar a ejecutar el cuaderno.screen capture showing the credentials have been created
    screen capture showing the credentials have been created
  9. Haga clic en Celda > Ejecutar Todas.

Después de que usted y sus amigos hayan jugado al juego podrá verificar quién ha ganado. En su cuaderno, busque la declaración de spark.sql . Parece que "Seb" es el ganador con la mayor cantidad de energía introducida.

screen capture showing the results of the game

screen capture showing the results of the game

Cómo entender la ciencia de los datos que está detrás de los resultados

Lo que la declaración spark.sql hace es estimar la energía que nuestros jugadores generaron durante la duración del juego mediante el cálculo de la energía general a través de las tres dimensiones de los datos del acelerómetro.

En un único eje, la serie de tiempo de los datos de la vibración se parece al siguiente gráfico:

graph of a single axis of vibration data

graph of a single axis of vibration data

Si desea saber la energía que representa esta serie tiempo, puede estimar este valor realizando la integral de la función.

graph showing when you approximate by taking the integral of the function

graph showing when you approximate by taking the integral of the function

Recuerde que nos hemos desecho de los valores negativos y los hemos convertido en positivos. Para estimar la integral sumamos todos los valores positivos individuales.

graph showing results of getting rid of the negative values

graph showing results of getting rid of the negative values

Ahora que ha aprendido cómo estimar la integral de una serie temporal, vamos a calcular la energía general de las tres dimensiones (recuerde, tenemos tres señales individuales para cada dimensión de la vibración) utilizando la siguiente fórmula:

formula of the sum of each measurement and taking the square root

formula of the sum of each measurement and taking the square root

Sumamos el cuadrado de cada medida y calculamos la raíz cuadrada.

Nota: Para obtener la energía real también necesitaríamos incorporar la masa del dispositivo.

Utilizar SQL, este cálculo se presenta por la siguiente declaración:

select
	id, // seleccionar el ID del dispositivo porque necesitamos saber quién es el ganador
	sqrt(sum(ax*ax+ay*ay+az*az)) // calcular la energía como energía  // de un nombre a esta función nueva
	from unconfshake // especifique la tabla de la consulta temporal de ApachSparkSQL
	group by id // calcule dispositivo por dispositivo
	order by energy desc // para que los mejores aparezcan arriba

Conclusión

Ha hecho su parte y ha construido el juego. Ahora es el momento de jugar.

  1. Encuentre un amigo o un compañero que tenga un teléfono inteligente. Proporcione a su amigo el URL de la aplicación del juego.
  2. Tiene que ingresar su propio y único ID alfanumérico de 8 dígitos y una contraseña alfabética (a-z) de 8 caracteres.
  3. Pida a su amigo que agite el teléfono inteligente en todas las direcciones. Esto envía los datos a la nube. Puede verificarlo en Node-RED y en Data Science Experience con la consulta SQL que se brinda en el cuaderno que usted ha importado. Simplemente vuelva a ejecutar de vez en cuando la celda que contiene la declaración SQL, y observará que la lista de ganadores cambia a medida que pasa el tiempo.
  4. Puede verificar quién es el ganador haciendo clic en Celda > Ejecutar Todas el cuaderno de la ciencia de datos.

Para jugar de nuevo tiene que completar los siguientes pasos:

  1. Cambie el nombre de la base de datos de destino (harlemshake) en Node-RED, y después actualice el nombre del cuaderno.
  2. Abra de nuevo IBM Watson IoT Platform, seleccione todos los dispositivos y después seleccione Borrar dispositivos. screen capture showing where to select all devices and delete them
    screen capture showing where to select all devices and delete them

Nota: Puede borrar los resultados de la base de datos para jugar de nuevo, pero es más fácil cambiar el nombre de la base de datos y restablecer la conexión.

Este juego se puede dejar funcionando para probarlo durante los descansos para comer y, así, ¡permanecer despierto después de una comida copiosa!


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, Cognitive computing
ArticleID=1052412
ArticleTitle=Cree un juego de acelerómetro de IoT divertido y sencillo
publish-date=10042017