Visualización de datos del sensor Arduino en tiempo real con Johnny-Five y PubNub EON.js

En mi artículo anterior, te mostré cómo hacer un prototipo de un sistema de Internet de las cosas usando Johnny-Five y PubNub. En ese tutorial, aprendió cómo crear un LED controlado por web, a la Philips HUE.

Esta vez, me gustaría mostrarle cómo leer datos de sensores conectados a un Arduino y trazar un gráfico en la web!

En este ejercicio, vas a:

  1. construir un circuito con un sensor de temperatura y leer los valores del sensor
  2. lee los datos y los grafica

Prerrequisitos

Necesita un tablero Arduino (Genuino) Uno y conocimientos básicos sobre cómo configurar el Arduino para Johnny-Five. Es una buena idea revisar la Configurando Arduino sección en el tutorial paso a paso, pero no es necesario instalar StandardFirmata Porque vas a instalar algo más esta vez.

Además, asegúrese de que Node.js se esté ejecutando en su computadora.

Visualización de datos fácil y simple con EON

Project EON es un marco de JavaScript de código abierto para gráficos y mapas, creado por PubNub.

Dado que el componente de gráficos y gráficos de EON se basa en C3.js, que es un envoltorio para D3.js, EON le permite crear gráficos en tiempo real fácilmente sin saber cómo usar la biblioteca D3, que es mucho más complicada..

Los pasos básicos para visualizar los datos del sensor son tan simples como los siguientes:

Publicar datos desde una fuente:

PUBNUB.publish (channel: 'my-graph', mensaje: 'eon': 'My data 1': 39, 'My data 2': 23); 2. Incruste un gráfico en la web: eon.chart (channel: 'my-graph', genere: bindto: '#myGraph');

Repasaré los detalles de cómo usar EON, ya que trabajamos en un ejercicio de hardware y software aquí. Vamos a empezar!

Cableado del circuito con un sensor de temperatura

¡Construyamos primero un circuito para el sensor de temperatura! El sensor genérico y las partes deberían ser bastante económicos..

Hardware que necesita:

  • 1 Arduino Uno
  • 1 sensor de temperatura digital DS18B20 de 1 cable
  • 1 resistencia (4.7kΩ)
  • 3 cables de puente macho / macho
  • 1 tablero de pan

Acerca del sensor de temperatura digital DS18B20

Un sensor de temperatura digital DS18B20 típico mide de -55 ° C a 125 ° C (centígrados) con una precisión de ± 0.5 ° C en gran parte del rango. Un convertidor analógico a digital (ADC) incorporado convierte esta medida de temperatura analógica en un valor digital con hasta 12 bits de precisión.

Cargando Arduino Con ConfigurableFirmata

El sensor DS18B20 se comunica a través de un bus propietario de 1 cable. Cuando está utilizando dispositivos con el protocolo especial, Johnny-Five requiere el módulo específico de 1-Wire, que utiliza el ConfigurableFirmata bosquejo.

Así que vamos a cargar tu Arduino con ConfigurableFirmata Antes de cablear el sensor:

  1. Conecta tu Arduino a tu computadora con un cable USB.
  2. En Arduino IDE, vaya a Sketch> Incluir biblioteca> Gestionar bibliotecas.
  3. Buscar "ConfigurableFirmata".
  4. Haga clic en el resultado, seleccione la última versión y haga clic en Instalar.
  5. Ir Archivo> Ejemplos> ConfigurableFirmata.
  6. Sube el código al tablero..

Montaje de un circuito

Ahora, vamos a conectarlos. El circuito es bastante simple, solo asegúrate de usar una resistencia de 4.7 kΩ cuando enciendas el sensor con la fuente de 5 V del Arduino.

Leyendo la temperatura del sensor

Vayamos al lado del software. Leer los valores digitales del sensor es muy fácil cuando usa Johnny-Five.

Asegúrese de que Node.js esté instalado en su computadora. En un directorio dev apropiado, instale Johnny-Five usando el npm gerente de empaquetación.

$ npm instala johnny-five

Cree un archivo, temperature.js y use el código siguiente para imprimir los valores:

var five = require ('johnny-five'); five.Board (). on ('ready', function () var temperature = new five.Thermometer (controller: 'DS18B20', pin: 2); temperature.on ('data', function () console .log (this.celsius + '° C', this.fahrenheit + '° F');););

Ejecuta el código desde una consola con nodo temperature.js. Una vez que la placa de hardware esté lista, debería ver los valores de temperatura impresos en la consola de esta manera:

Ahora, publiquemos los datos del sensor de temperatura y representemos los valores en un gráfico!

Enviando los datos de temperatura del sensor a PubNub

Primero, necesita instalar el módulo pubnub Node.js usando npm:

$ npm instalar pubnub

PubNub Data Stream Network (DSN) proporciona la infraestructura global y le permite crear y escalar aplicaciones en tiempo real y dispositivos IoT con bastante facilidad. En mi artículo anterior, usó PubNub para recibir datos de un navegador web, pero esta vez, está utilizando PubNub para publicar los datos del sensor para que se lean en el navegador.

Inicializando PubNub

Una vez que instale el módulo pubnub, debe inicializarlo con sus claves API.

var pubnub = require ('pubnub') (publish_key: 'pub-c-156a ...', subscribe_key: 'sub-c-f762f ...'); 

También vamos a crear un nombre de canal.

var canal = 'temperatura-ds18b20';

Cuando traza un gráfico, deberá tomar los datos publicados del mismo nombre de canal.

Publicando datos en PubNub

Una vez que obtenga los datos de temperatura en el evento de datos con Johnny-Five que ha creado en la sección anterior del tutorial, mantenga los datos como una variable, en lugar de solo console.log.

temp temp = 0; temperature.on ('data', function () temp = this.celsius;);

Puede publicar todos los datos en PubNub, pero el sensor puede activar el evento con demasiada frecuencia. Así que enviemos los datos cada tres segundos..

setInterval (publish, 3000);

En la función de publicación, use el PubNub publicar() Método para enviar los datos en objeto (o JSON).

función publish () var data = 'temperature': temp,; pubnub.publish (channel: channel, message: data,); 

El código completo para el Arduino está disponible en este repositorio de GitHub..

Trazando un gráfico de barras a partir de los datos del sensor

Ahora olvídate de Arduino. Ahora creará una página web separada para dibujar un gráfico..

Primero, incluye eon.css en su archivo HTML:

Luego incluye pubnub.js:

Luego crea un elemento vacío con alguna ID:

Aquí es donde se generará el gráfico en tu página. Ahora, necesita inicializar PubNub, tal como lo hizo en el node.js archivo anterior para Arduino:

var pubnub = PUBNUB.init (publish_key: 'pub-c-156a ...', subscribe_key: 'sub-c-f762f ...');

Luego, genere un gráfico de barras simple utilizando EON gráfico(), Tan pronto como reciba los datos de PubNub. Puede recibir los datos enviados desde el sensor de temperatura usando el mismo nombre de canal, temperatura-ds18b20:

eon.chart (pubnub: pubnub, channel: 'temperature-ds18b20', genera: bindto: '#chart', transform: function (m) return eon: temperature: m.temperature ); 

los transformar() La función adapta los datos sin procesar enviados desde el sensor para que se ajusten al esquema que EON puede entender..

Ejecute el código HTML y el código Node.js para Arduino.

Voilà, tienes una visualización de datos en tiempo real en tu navegador.!

Puede personalizar el gráfico más con los parámetros opcionales de C3.js, como los colores de línea y el ancho.!

Por ejemplo, para cambiar el color de la barra a púrpura como en la animación de gif de arriba, puede agregar el color de la barra. datos parámetro:

… Genere: bindto: '#chart, data: type:' line ', colors: temperature:' # 663399 ',

Puedes usar el eje parámetro para etiquetar y formatear el eje xy el eje y, también.

Si desea un tipo de gráfico diferente, intente cambiar el 'línea', que es un valor predeterminado para el tipo, para 'ranura', y mira lo que pasa.

Para ver el código completo, consulte el repositorio de GitHub. Hay algunos ejemplos más si desea probar diferentes sensores, como un sensor de luz ambiental y diferentes tipos de gráficos..

Espero que hayan disfrutado el tutorial!

Referencias

  • Cómo crear un dispositivo inteligente con Arduino y Node.js usando PubNub
  • Johnny-Five: el marco de programación original de JavaScript Robotics
  • PubNub: la red global de flujo de datos en tiempo real para IoT, aplicaciones móviles y web
  • Proyecto EON: gráfico de fuente abierta y marco de mapas para datos en tiempo real de PubNub