Archivo de la categoría: IoT

Arduino y LoRaWAN

Arduino MKR WAN 1300

MKR WAN 1300 es una placa potente que combina la funcionalidad de la conectividad MKR Zero y LoRa. Es la solución ideal para los fabricantes que desean diseñar proyectos de IoT con una mínima experiencia previa en redes que tengan un dispositivo de baja potencia.

La placa MKR WAN 1300 tiene comunicación inalámbrica unido a un diseño de la placa MKR Zero Board, es decir, que tendremos soporte para aplicaciones de 32 bits. La placa cuenta con 256KB de Memoria flash y 32KB SRAM. Puede funcionar con la energía de dos pilas de 1,5V y todo en un tamaño de 67,64 x 25mm. Al tener comunicación inalámbrica, el dispositivo al que se conecte tendrá opción de comunicarse a Internet.

El MKR WAN 1300 usar el módulo Murata CMWX1ZZABZ Lo-Ra module que lleva el transceiver Semtech SX1276:

Más información: https://store.arduino.cc/mkr-wan-1300

Buen artículo para sobre el MKR 1300: http://tinkerman.cat/arduino-mkr-wan-1300/

Moteino

Moteino es una plataforma de desarrollo compatible con Arduino inalámbrica de baja potencia basada en el popular chip ATmega328p utilizado en el Arduino-UNO, lo que lo hace 100% compatible con el IDE de Arduino (entorno de programación).

Para la programación, necesitará un adaptador FTDI externo para cargar los sketchs, con las ventajas de un menor costo y un tamaño más pequeño. La variante MoteinoUSB incluye el convertidor de serie USB.

Los Moteinos son compatibles y se pueden comunicar con cualquier otra plataforma Arduino o de desarrollo que utilice los populares transceptores HopeRF RFM69 o LoRa. Moteino también viene con un chip de memoria flash SPI opcional para programación inalámbrica o registro de datos.

Web Moteino: https://lowpowerlab.com/guide/moteino/

Moteino fue diseñado para ser una plataforma de desarrollo compacta, altamente personalizable y asequible, adecuada para IoT, domótica y proyectos inalámbricos de largo alcance. Estas son algunas de las características que distinguen a Moteino:

  • diseño modular pequeño y ligero que se adapta a recintos minúsculos
  • las configuraciones flexibles permiten el uso de varios transceptores inalámbricos
  • potencia realmente ultra baja: con tan solo ~ 2uA alcanzables en el modo de suspensión profunda, los Moteinos permiten que los proyectos con batería, como los sensores inalámbricos de movimiento/entorno, funcionen durante años. El modo de suspensión de Watchdog está en ~ 6uA (activación periódica). El nuevo 8Mhz Moteino permite el modo de sueño 100nA más bajo posible
  • Las radios sub-Ghz y LoRa producen un rango mucho más largo que las bandas de 2.4Ghz
  • programable de forma inalámbrica: puede volver a flashearlo sin cables, cuando se implementa en ubicaciones difíciles (solo con radios RFM69)
  • fácil de usar desde el familiar IDE Arduino, muchos ejemplos de código brindados para ayudarlo a comenzar

Pinout:

Los transceiver soportados por Moteino son:

Transceiver Datasheets

Muy buena explicación de los módulos de Adafruit: https://learn.adafruit.com/adafruit-rfm69hcw-and-rfm96-rfm95-rfm98-lora-packet-padio-breakouts/overview

Librería para los módulos RFM69: https://github.com/LowPowerLab/RFM69

IMPORTANTE: Los módulos RFM69 no son LoRa y no son compatibles con los módulos RFM95/RFM96. Además los módulos RFM95/RFM96 necesitan de una librería de terceros.

Más información RFM69:

Uso con Lora: https://lowpowerlab.com/guide/moteino/lora-support/

Librería para los módulos LoRa RFM95 (868-915mhz) and RFM96 (433mhz).: http://www.airspayce.com/mikem/arduino/RadioHead/index.html

Getting started para instalar el soporte y las librerías: https://lowpowerlab.com/guide/moteino/programming-libraries/

Github: https://github.com/LowPowerLab y Librería: https://github.com/LowPowerLab/Moteino

Comprar Moteino:https://lowpowerlab.com/shop/

Moteino weather shield: https://lowpowerlab.com/2016/09/09/weathershield-r2-released/ with a BME280 which includes all Temperature/Humidity/Pressure readings all in 1 sensor.

Moteino PowerShield: https://lowpowerlab.com/guide/powershield/

Gateway LoRa con Moteino + Raspberry Pi:

Dragino

En Dragino http://www.dragino.com/ podemos encontrar Hardware para LoRa: http://www.dragino.com/products/products-list.html

Wiki: http://wiki.dragino.com/index.php?title=Main_Page

La librería recomendada es: https://github.com/matthijskooijman/arduino-lmic, pero puede usarse la librería Radiohead: http://www.airspayce.com/mikem/arduino/RadioHead/

LoRa Shield:

Otro HW LoRa compatible con Arduino

Existen más HW de desarrollo compatible con Arduino con módulos LoRa diferentes:

Gateways LoRa

En las redes LoRaWan un gateway es un dispositivo dentro de la arquitectura de red que recibe los datos transmitidos por un dispositivo de nodo final y que reenvían los paquetes de datos a un servidor de red centralizado. Los datos de un nodo final LoRa pueden ser recibidos por múltiples puertas de enlace (gateway),

Los gateways o puertas de enlace son un puente transparente entre los dispositivos finales y el servidor de red central. Uno o más dispositivos finales se conectan a una o más puertas de enlace, mediante una conexión inalámbrica de un solo salto, usando tecnología RF LoRa™ o FSK, formando así una red en estrella.

Una o más puertas de enlace se conectan al servidor de red central por medio de conexiones IP estándar, formando así una red en estrella. Las comunicaciones entre los dispositivos y el servidor de red, son generalmente unidireccionales o bidireccionales, pero el estándar también soporta multidifusión, permitiendo la actualización de software en forma inalámbrica, u otras formas de distribución de mensajes en masa.

Los gateways son enrutadores equipados con un concentrador LoRa, lo que les permite recibir paquetes LoRa. Por lo general, puede encontrar dos tipos de puertas de enlace:

  • Las pasarelas se ejecutan con un firmware mínimo, por lo que son de bajo costo y fáciles de usar (por ejemplo, The Things Gateway) y solo ejecutan el software de reenvío de paquetes.
  • Gateways que ejecutan un sistema operativo, para el cual el software de reenvío de paquetes se ejecuta como un programa de fondo (por ejemplo, Kerlink IoT Station, Multitech Conduit). Esto le da más libertad al administrador del gateway para administrar su puerta de enlace e instalar su propio software.

Una forma de montar un gateway LoRa barato es con una Raspberry Pi y un hat de Moteino con un módulo LoRa:

Un gateway simple con LoPy: https://www.hackster.io/bucknalla/lopy-lorawan-nano-gateway-using-micropython-and-ttn-a9fb19

Construir un gateway LoRa barato: http://cpham.perso.univ-pau.fr/LORA/RPIgateway.html

Módulos LoRa para conectar un ordenador y haga de gateway: https://www.cooking-hacks.com/waspmote-gateway-sx1272-lora-sma-4-5-dbi-868-mhz y tutorial LoRa gateway Libelium: http://www.libelium.com/development/waspmote/documentation/lora-gateway-tutorial/

Lista de gateways de loriot: https://www.loriot.io/lora-gateways.html

The things gateway: https://www.thethingsnetwork.org/docs/gateways/gateway/

The Things Gateway permite que dispositivos como sensores y computadoras integradas se conecten a internet. Con un proceso fácil de conectar, está creando el aspecto más sustancial de su red de datos IoT. Active la puerta de enlace en solo 5 minutos y cree su propia red local. Con la capacidad de servir a miles de nodos, la puerta de enlace es el componente principal de su red conectada. Esta versión funciona a 868MHz para uso en la UE y 915Mhz para uso en los EE.UU.

Lista de gateways de thethingsnetwork:

Gateway draguino (open wrt): http://www.dragino.com/products/lora/item/119-lg01-s.html

Ejemplo con Dragino para usarlo como gateway (Lora Shield + Arduino Yun Shield):

Más información:

Librería RadioHead LoRa

Una de las librerías más usadas para módulos LoRa con Arduino es RadioHead: http://www.airspayce.com/mikem/arduino/RadioHead/index.html

Proporciona una biblioteca completa orientada a objetos para enviar y recibir mensajes paquetizados a través de una variedad de radios de datos comunes y otros transportes para microprocesadores integrados.

RadioHead consta de 2 grupos principales de clases: driversy managers.

  • Los drivers proporcionan acceso de bajo nivel a un rango de diferentes radios y otros transportes de mensajes paquetizados.
  • Los managers brindan servicios de envío y recepción de mensajes de alto nivel para una variedad de requisitos diferentes.

Cada programa de RadioHead tendrá una instancia de un driver para proporcionar acceso a la radio o transporte de datos, y generalmente un manager que usa ese driver para enviar y recibir mensajes para la aplicación. El programador debe instanciar un driver y un manager e inicializar el manager. A partir de entonces, las funciones del manager se pueden usar para enviar y recibir mensajes.

También es posible usar un driver por sí mismo, sin un manager, aunque esto solo permite un transporte no confiable y sin dirección a través de las funciones del driver.

Se admite una amplia gama de plataformas de microprocesadores.

Unos ejemplos de drivers:

  • RH_RF69 Works with Hope-RF RF69B based radio modules, such as the RFM69 module
  • RH_NRF24 Works with Nordic nRF24 based 2.4GHz radio modules, such as nRF24L01 and others.
  • RH_RF95 Works with Semtech SX1276/77/78/79, Modtronix inAir4 and inAir9, and HopeRF RFM95/96/97/98 and other similar LoRa capable radios. Supports Long Range (LoRa) with spread spectrum frequency hopping, large payloads etc.
  • RH_Serial Works with RS232, RS422, RS485, RS488 and other point-to-point and multidropped serial connections, or with TTL serial UARTs such as those on Arduino and many other processors, or with data radios with a serial port interface. RH_Serial provides packetization and error detection over any hardware or virtual serial connection. Also builds and runs on Linux and OSX.
  • RHEncryptedDriver Adds encryption and decryption to any RadioHead transport driver, using any encrpytion cipher supported by ArduinoLibs Cryptogrphic Library http://rweather.github.io/arduinolibs/crypto.html

Managers, cualquier manager puede usarse con cualquier driver:

  • RHDatagram Addressed, unreliable variable length messages, with optional broadcast facilities.
  • RHReliableDatagram Addressed, reliable, retransmitted, acknowledged variable length messages.
  • RHRouter Multi-hop delivery of RHReliableDatagrams from source node to destination node via 0 or more intermediate nodes, with manual routing.
  • RHMesh Multi-hop delivery of RHReliableDatagrams with automatic route discovery and rediscovery.

Esta librería es compatible entre otros con:

Para los módulos con moteino que se ha usado en la demo, son necesarios los drivers: http://www.airspayce.com/mikem/arduino/RadioHead/classRH__RF95.html

Si se quiere añadir una capa de seguridad debe usarse la clase: http://www.airspayce.com/mikem/arduino/RadioHead/classRHEncryptedDriver.html

Si se quiere usar direccionamiento debe usarse la clase: http://www.airspayce.com/mikem/arduino/RadioHead/classRHDatagram.html

IMPORTANTE PARA MODULOS LORA, la librería está configurada por defecto a 434: Check if you have set the right frequency:After putting the library in the right place, you have to also modify the frequency to the frequency you want to use, the position of this issetFrequency() in the file: arduino-xxx\libraries\RadioHead\RH_RF95.cpp;

Para los módulos RFM95 de moteino debe ponerse: setFrequency(868.0);

He hecho un fork de la librería con la modificación para módulos LoRa: https://github.com/jecrespo/RadioHead

Proyecto LoRa con Moteino

A la hora de afrontar un proyecto con LoRa para monitorizar un entorno donde no tenemos acceso a una red ethernet/wifi ni toma eléctrica, podemos planteamos usar Moteino como una solución basada en Arduino de bajo consumo y con módulos LoRa integrados.

La primera duda es que módulo de radio o transceiver usar el RFM69 o RFM95:

  • RFM69 no es LoRa usa modulación FSK en lugar de la modulación LoRa
  • RFM95 es LoRa estándar.

RFM69 y RFM95 son módulos de radio para comunicación a larga distancia, donde la velocidad de transmisión no es crítica (no se hace streaming de vídeo). Al usar modulación diferente no son compatibles entre ellos.

Estos módulos de radio vienen en cuatro variantes (dos tipos de modulación y dos frecuencias). Los RFM69 son los más fáciles de usar, y son bien conocidos y entendidos. Las radios LoRa son más potentes, pero también más caros.

Comparativa y explicación de los módulos: https://learn.adafruit.com/adafruit-rfm69hcw-and-rfm96-rfm95-rfm98-lora-packet-padio-breakouts

Transceiver Moteino: https://lowpowerlab.com/guide/moteino/transceivers/

RFM69

Módulo basado en SX1231 con interfaz SPI

  • +13 a +20 dBm hasta 100 mW Capacidad de salida de potencia (salida de potencia seleccionable en software)
  • Drenaje de corriente de 50 mA (+13 dBm) a 150 mA (+20 dBm) para transmisiones, ~ 30 mA durante la escucha de radio activa.
  • Las radios RFM69 tienen un alcance de aprox. Línea de visión de 500 metros con antenas unidireccionales sintonizadas. Dependiendo de las obstrucciones, la frecuencia, la antena y la potencia de salida, obtendrá rangos más bajos, especialmente si no tiene línea de visión.
  • Crear redes multipunto con direcciones de nodo individuales
  • Motor de paquete cifrado con AES-128

Guía completa del módulo de radio RFM69: https://learn.sparkfun.com/tutorials/rfm69hcw-hookup-guide

Librería Arduino RFM69: https://github.com/LowPowerLab/RFM69

Completa información RFM69: http://www.hoperf.com/upload/rf/RFM69W-V1.3.pdf

Explicación de librería RFM69 https://lowpowerlab.com/2013/06/20/rfm69-library/

RFM95

Módulo basado en LoRa® SX1276 con interfaz SPI

  • Capacidad de salida de potencia de +5 a +20 dBm hasta 100 mW (salida de potencia seleccionable en software)
  • ~ 100mA de pico durante la transmisión de + 20dBm, ~ 30mA durante la escucha activa de la radio.
  • Las radios RFM9x tienen un rango de aprox. Línea de visión de 2 km con antenas unidireccionales sintonizadas. Dependiendo de las obstrucciones, la frecuencia, la antena y la potencia de salida, obtendrá rangos más bajos, especialmente si no tiene línea de visión.

Estos son radios de paquete LoRa de +20 dBm que tienen una modulación de radio especial que no es compatible con los RFM69 pero que puede ir mucho más lejos. Pueden ir fácilmente a la línea de vista de 2 km utilizando antenas de cable simples, o hasta 20 km con antenas direccionales y ajustes.

Completa información RFM95: http://www.hoperf.com/upload/rf/RFM95_96_97_98W.pdf

Librería: http://www.airspayce.com/mikem/arduino/RadioHead/

SX127x Datasheet – The RFM9X LoRa radio chip itself

Librería: http://www.airspayce.com/mikem/arduino/RadioHead/

Módulos Moteino Usados

Optamos LoRa porque da entre un 50% y 100% más de alcance.

LoRa support for Moteino: https://lowpowerlab.com/guide/moteino/lora-support/

Todo sobre moteino y como programarlo: https://lowpowerlab.com/guide/moteino/

Los moteino a usar con LoRa son los moteinoLR y mejor moteinoUSB-LoRa que ya tiene el interfaz USB:

Para wireless programming necesitas las flash extra: https://lowpowerlab.com/guide/moteino/wireless-programming/

Gateway

Si queremos conectar a Internet los sensores, necesitamos un gateway.

Gateway con Raspberry Pi:

Otra opción de gateway es usar un shield LoRa de dragino:

Productos de dragino: http://www.dragino.com/products/products-list.html

Cloud

Ya tenemos el nodo y el gateway, nos falta el cloud que podemos hacerlo con muchas plataformas IoT.

Thingspeak: https://thingspeak.com/

Anuncios

Demo MKRFOX1200

Medición de temperatura y humedad con un Arduino MKRFOX1200 y sistema simple de alarma basado en un umbral superior. Integración en un servidor propio https://www.aprendiendoarduino.com/ y en thingspeak https://thingspeak.com/

Hardware utilizado:

En esta demo demuestra la potencia de la red Sigfox para IoT, usando un sistema simple se va a medir la temperatura y humedad ambiente de forma inalámbrica y con total movilidad. Se usa un sensor de temperatura y humedad DHT22 conectado al MKRFOX1200 que manda mensajes con los datos cada 30 segundos para esta demostración. Para no llegar al límite diario de mensajes de Sigfox habría que hacerlo cada 10 minutos.

En el mensaje se mandan 3 datos:

  • Temperatura (5 bytes en ASCII). De -9.00 a 99.99
  • Humedad (5 bytes en ASCII). De 00.00 a 99.99
  • Evento de alarma (1 byte ASCII). 0 = normal (no event), 1 = alarm triggered, 2 = restore alarm.

Lo mando todo como texto para simplificar todo, pero si puede mandar los float y ahorrar un byte. Un buen ejemplo de base para mandar un float y convertir diferentes tipos de datos para mandar por sigfox: https://github.com/nicolsc/sigfox-weather-station

El propio Arduino detecta la alarma de alta temperatura y manda en el byte de alarma el evento, cuando la alarma se recupera manda un nuevo evento de recuperación.

Puesto que desde el backend de Sigfox no es capaz de distinguir cuando es una alarma o no, ya que solo puede reenviar los datos del mensaje mandado por el dispositivo sigfox, estos datos se reenvían mediante dos callbacks a:

En ambas plataformas la misión es almacenar los datos, representarlos gráficamente y analizar el mensaje y mandar el evento de alarma cuando corresponda. Incluso desde cualquiera de las dos plataformas, se podría hacer la comprobación de alarma al superar el umbral en lugar de mandarlo por mensaje Sigfox. Estas son las tareas que el backend de Sigfox no puede hacer.

La ventaja de usar un servidor/plataforma propia es que los datos los guardamos en nuestra infraestructura y son accesibles para siempre. Para el caso de la plataforma propia aprovechamos para guardar datos adicionales y aprender más de Sigfox:

Y desde la BBDD podríamos ver los valores máximos y mínimos de RSSI y SNR.

El código a cargar en Arduino es https://github.com/jecrespo/AprendiendoArduino-Sigfox

Dispositivos Sigfox y Lora recogiendo datos en campo:

Una vez cargado el código en Arduino y el dispositivo registrado en el backend de Sigfox ya podemos ver los los mensajes en el backend, dentro de device apartado messages.

Los datos del mensaje en el backend se ven en HEX, para comprobar que lo enviado es correcto se puede usar este conversor a ASCII: https://www.rapidtables.com/convert/number/hex-to-ascii.html

Desde el backend las funciones que se pueden hacer con los datos son muy limitadas, así que con el uso de las callbacks podemos reenviar estos datos a plataformas externas.

Estas callbacks transfieren los datos recibidos de los dispositivos asociados al device type a su infraestructura. Para obtener más información, consulte la documentación de callback: https://backend.sigfox.com/apidocs/callback

Las callbacks están asociadas a los device type, he creado dos callbacks una para mandar los datos a la plataforma propia https://www.aprendiendoarduino.com/ y otra para reenviar los datos a thingspeak https://thingspeak.com/

Para  https://www.aprendiendoarduino.com/ el callback es:

Y el código que guarda los datos en la BBDD y manda los mensajes de alarma está hecho en PHP y el código está en: https://github.com/jecrespo/aprendiendoarduino-servicios/tree/master/sigfox y además de guardar los datos en una BBDD, las temperaturas los guarda en otra BBDD para representar gráficamente y se encarga también del envío de alarmas.

Y veo los datos en tiempo real:

Para la plataforma thingspeak: https://thingspeak.com/, hago una llamada a la API de sigfox para actualizar: https://api.thingspeak.com/update.json?api_key=writeapikey&field2={customData#humidity}&field1={customData#temperature}

El callback es:

Este es un esquema de lo que estamos haciendo:

Lo que hago es desde el backend de sigfox es reenviar los datos a la plataforma IoT:

Desde thingspeak hay que configurar un canal con los campos temperatura y humedad y podemos dar una vista pública que puede verse en https://thingspeak.com/channels/440162

Arduino Day Logroño 2017

Si quieres estar al día de los eventos que se realizan en Logroño sobre temas relacionados con Arduino, comunidad Maker, HW libre, Impresoras 3D, etc… manda un correo a aprendiendoarduino@gmail.com o apuntate a la lista de correo noticias@aprendiendoarduino.com


El pasado 1 de abril de 2017 celebramos en tres localizaciones diferentes y con diversos eventos el ArduinoDay en Logroño.

El Arduino Day de Logroño comenzó a las 9.00 en el Think TIC con dos charlas relacionadas con el Internet de las Cosas (IoT).

La presentación de la jornada de Arduino Day en Logroño fue a cargo de Ernesto Rodríguez, responsable de vigilancia tecnológica del ThinkTIC del Gobierno de La Rioja.

La primera charla fue “IoT. Conectando cosas con Arduino” donde Enrique Crespo habló de los elementos necesarios para abordar un proyecto de IoT basado en Arduino. El vídeo de la charla puede verse en: http://www.innovarioja.tv/index.php/video/ver/1661

La presentación y documentación de la charla “IoT. Conectando cosas con Arduino” está publicada en http://www.aprendiendoarduino.com/iot-conectando-dispositivos-con-arduino/ y los apartados tratados fueron:

Acto seguido Diego Soto presentó la charla “Seguridad en IoT” donde trató uno de los aspectos más importantes del IoT, la seguridad y trato de concienciar de ello a los asistentes. El vídeo de la charla puede verse en: http://www.innovarioja.tv/index.php/video/ver/1662

Una vez acabadas las charlas paramos a tomar un café para coger fuerzas y empezar con los talleres. En el ThinkTIC se realizaron 3 talleres simultáneos.

Taller “Iniciación a la impresión 3D, mi impresora y yo!!!” por Vicente Roca donde explicó cómo montar una impresora 3D y habló de su experiencia.

Taller “Experiencia desde Cero con Arduino” por Julio Clavijo donde hizo una explicación para iniciar a los asistentes en el uso de Arduino.

Taller: “IoT. Conectando Cosas con Arduino” por Enrique Crespo que fue una continuación de la charla impartida a primera hora y se pusieron en práctica varios proyectos IoT basados en Arduino. La documentación de este taller está en http://www.aprendiendoarduino.com/taller-iot-conectando-dispositivos-con-arduino/ y el código usado en el taller está en https://github.com/jecrespo/aprendiendoarduino-iot

El siguiente evento fue en la Universidad de La Rioja, en el makerspace de la Universidad Área UR-maker. Donde Alpha Pernía presentó el makerspace y habló de la experiencia montando un makerspace.

El último evento se realizó en la Sociedad Gastronómica La Trastienda donde se hizo una merienda maker. Vicente Roca trajo su impresora 3D, Abel Yécora presento unas impresoras y un software para hacer figuras en 3D y José Domínguez presentó su proyecto maker de una máquina de boxeo con Arduino. Juan Nieto ha publicado más información de este evento y del Arduino Day en https://makerslarioja.wordpress.com/2017/04/03/arduino-day-2017-una-gran-fiesta/

Me gustaría destacar el proyecto que presentó José Domínguez y que podéis ver en este vídeo:

Agradecimientos

Por mi parte quiero agradecer al ThinkTIC y a Ernesto el apoyo que nos han dado para poder celebrar este evento. También agradecer a todo aquellos que han hecho posible el Arduino Day en el ThinkTIC: Diego Soto, Julio Clavijo, Vicente Roca,  Mario Ezquerro, Miguel Susunaga, Arturo Martínez y a todos los asistentes.

Por último gracias a los organizadores y colaboradores de los otros dos eventos en el Área UR-maker y La Trastienda: Alpha Pernía, Juan Nieto, Abel Yécora, José Domínguez, Carmen Méndez, etc…

Fotos

A las 9 de la mañana a punto de empezar el Arduino Day en Logroño.

Charla “IoT. Conectando cosas con Arduino” de Enrique Crespo

Charla “Seguridad en IoT” de Diego Soto:

Tomando un café antes de seguir con los talleres.

Taller “IoT. Conectando cosas con Arduino” de Enrique Crespo

Arduino Intel Edison + Intel IoT Analytics

Este artículo está motivado por mi asistencia al hackathon celebrado entre el 25 y 27 de marzo de 2017 en el World Hosting Days en Europa Park, Rust, Alemania. Más información: http://worldhostingdays.com/global/

Datos del hackathon: http://worldhostingdays.com/global/side-event/cloud-community-hackathon

En mi caso fui a participar en el proyecto conjunto de 1and1 e Intel donde el objetivo era comprobar las características del microprocesador Intel Edison manejando sensores y actuadores en combinación con el motor de analíticas de Intel para IoT hospedado en el cloud de 1and1. Los detalles del proyecto pueden verse en: http://worldhostingdays.com/global/project/1and1

El kit de herramientas que dispusimos fue:

  • Cloud infrastructure
    • Open IoT Connector hosted by 1&1 which connects devices to the cloud. http://streammyiot.com/
    • 1&1 Analytic Cloud Environment with MQTT broker and Node.js.

También dispusimos de la API para interactuar con el cloud de 1&1:

Arduino Edison

Intel Edison es un módulo de computación de Intel que es posible usarlo con el formato de Arduino. Está centrado en el IoT y wearables. Tiene un sistema linux yocto embebido pero es capaz de ejecutar los Sketch de Arduino que al ser compilados se guardan en un directorio del sistema de ficheros y es ejecutado. También dispone de conectividad Wi-Fi y Bluetooth.

El Intel Edison es un pequeño módulo desarrollado por Intel y orientado a la electrónica embebida incluso en proyectos comerciales. Es una pequeña placa llena de posibilidades y no es para menos ya que en su diminuto tamaño encontramos un Intel® Atom™ SoC dual-core con WiFi, Bluetooth LE integrado. Una funcionalidad importante es que dispone de un conector genérico de 70 pines para poder conectar todo tipo de periféricos y placas desarrolladas para esta plataforma.

Está pensado para aplicaciones de bajo consumo pero gracias al amplio soporte de software proporcionado por Intel, puede ser utilizado en poco minutos incluso por principiantes en electrónica.

Web Intel Edison:

Wikipedia: https://en.wikipedia.org/wiki/Intel_Edison

El kit de Arduino Edison incluye los pines hembra de Arduino, que permite conectar la mayoría de placas shields de Arduino al módulo de forma nativa. Todos los pines del 0 al 13 (junto con AREF y GND), pines analógicos 0 a 5, alimentación, ICSP y el UART están en el mismo sitio que el Arduino UNO R3 para guardar la máxima compatibilidad.  Además la placa del Intel Edison incluye un zócalo para tarjetas de memoria Micro SD, un conector Micro USB conectado al UART2 y un conector estándar USB 2.0. En la documentación se dispone de librerías para gestionar los pines de Arduino disponibles.

Arduino Edison HW guide: http://www.intel.com/content/dam/support/us/en/documents/edison/sb/edison-arduino-hardware-guide.pdf

Arquitectura Intel Edison (microprocesador):

  • Dual-core Intel® Atom™ processor at 500 MHz
  • 1 GB DDR3 RAM, 4 GB eMMC flash
  • 40 multiplexed GPIO interfaces
  • Bluetooth* 4.0, Wi-Fi*
  • Yocto Project*, Brillo*
  • Arduino* compatible
  • Open-source software development environment
  • C/C++, Python*, Node.js*, HTML5, JavaScript*

Características: http://download.intel.com/support/edison/sb/edison_pb_331179002.pdf

Arduino Edison: https://www.arduino.cc/en/ArduinoCertified/IntelEdison

Características de la placa:

  • 20 digital input/output pins, including 6 pins as PWM outputs.
  • 6 analog inputs.
  • 1 UART (Rx/Tx).
  • 1 I2C.
  • 1 ICSP (In-system programming ) 6-pin header (SPI).
  • Micro USB device connector OR (via mechanical switch) dedicated standard size USB host Type-A connector.
  • Micro USB device (connected to UART).
  • SD card connector.
  • DC power jack (7 to 15VDC input).

Documentación: https://software.intel.com/es-es/iot/hardware/edison/documentation

Intel ha desarrollado sus propias herramientas para programar el microprocesador Intel Edison, que ofrece más potencia a la hora de programarlo que con el lenguaje de Arduino y su IDE, pero tiene la desventaja de tener que aprender su SDK. El SDK puede encontrarse en descargas: https://software.intel.com/es-es/iot/hardware/edison/downloads

Al igual que el Arduino UNO el kit de Intel® Edison para Arduino hace posible tener 20 pines digitales de entrada/salida, 6 de los cuales pueden usarse como entradas analógicas. El Intel® Edison tiene 4 salidas PWM que pueden configurarse mediante jumpers para usarse en cualquiera de los 6 pines que soportan PWM en el Arduino UNO (pins 3, 5, 6, 9, 10, or 11).

Los pines de entrada/salida (I/O) y los analógicos pueden ser configurados para funcionar a 5V o 3.3V. Los pines en modo salida soportan hasta 24mA a 3.3V y 32mA a 5V

Arquitectura:

Para usar el microprocesador Intel Edison, hay también disponible una breakout board:

Breakout board: http://download.intel.com/support/edison/sb/edisonbreakout_hg_331190006.pdf

Esta breakout board ha sido diseñada para exponer los pines nativos a 1.8V del Intel® Edison y poder trabajar con ella. La placa se compone de una fuente de alimentación, una cargador de batería, USB OTG power switch, UART to USB bridge, USB OTG port y I/O header.

Pinout: http://www.intel.com/content/www/us/en/support/boards-and-kits/000006090.html

Hardware Guide: http://download.intel.com/support/edison/sb/edisonmodule_hg_331189004.pdf

Compra:

Comparativa de Intel Edison:

Edison no es una raspberry Pi, principalmente porque no hay una salida de video en Edison. Aquí hay una buena comparativa: https://www.sparkfun.com/news/1603

Más información de Intel Edison en: https://www.arduino.cc/en/ArduinoCertified/IntelEdison

Arduino Edison tiene una distribución de Yocto Linux corriendo en su interior. Más información sobre el proyecto Yocto en: https://en.wikipedia.org/wiki/Yocto_Project

Programación Arduino Edison

Arduino Edison es posible programarlo con el IDE de Arduino y es posible desde el sketch de Arduino hacer peticiones al kernel de Linux con llamadas al sistema.

Enlaces imprescindibles para empezar con Arduino Edison:

Para poder usar Arduino Intel Edison con el IDE de Arduino, es necesario instalar el paquete para las Intel i686 Boards.

Los entornos de desarrollo para Intel Edison son:

IDEs para hardware Intel: https://software.intel.com/es-es/iot/tools-ide/ide

Development environment:

Supported sensors:

Sensor kits:

Intel XDK IoT Edition (programar con node.js):

Procedure to Autostart the Arduino Sketch on Intel® Edison: https://software.intel.com/en-us/blogs/2015/08/01/procedure-to-autostart-the-arduino-sketch-on-edison

Modo AP en Intel Edison: https://software.intel.com/en-us/getting-started-with-ap-mode-for-intel-edison-board

Ejemplos de uso de Arduino Edison:

Arduino Galileo

Existen otros Arduinos con microprocesadores Intel, uno de ellos es el más reciente Arduino 101 que es el mismo concepto que Arduino UNO, pero con concepto de SoC del Arduino Edison también existe el Arduino Galileo. Este es un Arduino anterior y con menos capacidades que el Edison.

Para usar el Arduino Galileo con el IDE de Arduino es necesario instalarse el el paquete para las Intel i586 Boards.

Arduino Galileo (retirado): https://www.arduino.cc/en/ArduinoCertified/IntelGalileo

Arduino Galileo Gen2: https://www.arduino.cc/en/ArduinoCertified/IntelGalileoGen2

Web Intel: https://software.intel.com/es-es/iot/hardware/galileo

Wikipedia: https://en.wikipedia.org/wiki/Intel_Galileo

Arduino Galileo también usa Yocto Linux.

Edison vs Galileo:

Plataforma Cloud IoT de Intel

Una vez aclarado qué es Arduino Edison y que ya sabemos que podemos programarlo como cualquier otro Arduino, veamos cómo combinar nuestra experiencia con Arduino con la plataforma cloud IoT de Intel para hacer proyectos de IoT.

Intel al igual que otras muchas empresa ha desarrollado sus recursos para IoT. La Web de recursos para IoT de Intel: https://software.intel.com/es-es/iot/home

Visión de Intel en el IoT: http://www.intel.la/content/www/xl/es/internet-of-things/overview.html

La plataforma cloud IoT de Intel está disponible en http://streammyiot.com/ y es posible registrarse y usarla de forma gratuita.

Intel® IoT Analytics Platform:

  • Provides seamless Device-to-Device and Device-to-Cloud communication.
  • Ability to run rules on your data stream that trigger alerts based on advanced analytics.
  • Foundational tools for collecting, storing, and processing data in the cloud.
  • Free for limited and noncommercial use.

Con los datos recogidos con esta plataforma luego es posible extraerlos, transformarnos, cargarlos y utilizarlos. Cuando son enormes cantidades es cuando se usa el big data: https://software.intel.com/en-us/bigdata

Esta plataforma IoT está alojado el los servidores cloud de 1&1: https://www.1and1.com/dynamic-cloud-server

Para empezar a usar esta plataforma tenemos toda la documentación en:

Tutorial excelente para uso de Arduino edison con Intel IoT Analytics: http://www.instructables.com/id/Intel-IoT-Analytics-Dashboard/

Otro tutorial: https://medium.com/@shonsh/visualizing-sensor-data-using-intel-iot-analytics-d2d1de9ae118#.5ktwz5lyl

Otras plataformas de cloud analytics con las que conectar el Arduino Edison: https://software.intel.com/en-us/iot/cloud-analytics:

Uso de la Plataforma Intel IoT Analytics

Una vez aprendidos los conceptos vamos a ponerlos en práctica conectando el Arduino Edison a la plataforma Intel IoT Analytics, para ellos comencemos a recoger datos.

La programación del HW IoT tiene dos partes: recoger datos de los sensores y la de enviar los datos. Para empezar primero debemos configurar una cuenta de IoT analytics y luego seguir con la conectividad.

Pasos a dar para poner a subir datos a la plataforma:

IMPORTANTE

Para entender la estructura en que los datos se guardan en la plataforma leer: https://github.com/enableiot/iotkit-api/wiki/Api-Home#data-structure

Una vez instalado todo vemos el dashboard:

Para mandar datos desde Arduino Edison a la plataform Intel IoT Analytics podemos hacerlo vía HTTP o MQTT. En este caso vamos a usar HTTP.

Disponemos de un repositorio en github con muchos ejemplo para el IoT Kit Intel: https://github.com/enableiot/iotkit-samples

Y un muy buen ejemplo de uso de la API client for python lo tenemos en: https://github.com/enableiot/iotkit-samples/blob/master/api/python/iotkit_client.py

Estas mismas llamadas para guardar datos en la plataforma usando la API se pueden aplicar a Arduino para que guarde los datos.

Para obtener el token de usuario: https://github.com/enableiot/iotkit-api/wiki/Authorization

POST /v1/api/auth/token HTTP/1.1
Host: 109.228.56.48
Content-Type: application/json

{
    "username": "aprendiendoarduino@gmail.com",
    "password": “password"
}

 

Dar de Alta un dispositivo: https://github.com/enableiot/iotkit-api/wiki/Device-Management

PUT /v1/api/accounts/4d6398a7-49aa-45f0-8b53-54896778a736/devices/90-A2-DA-10-B3-BD/activation HTTP/1.1
Host: 109.228.56.48
Authorization: Bearer APIKEY
Content-Type: application/json

{ 
     "activationCode": "activationcode"
}

Añadir un componente a un dispositivo: https://github.com/enableiot/iotkit-api/wiki/Device-Management#add-a-component-to-a-device

POST /v1/api/accounts/4d6398a7-49aa-45f0-8b53-54896778a736/devices/90-A2-DA-10-00-00/components HTTP/1.1
Host: 109.228.56.48
Authorization: Bearer APIKEY
Content-Type: application/json
Cache-Control: no-cache

{ 
	"cid": "436e7e74-6771-4898-9057-26932f5eb7e1",
	"name": "temperatura",
	"type": "temperature.v1.0"
}

Código Arduino para poner en un actuador y que reaccione: https://github.com/enableiot/iotkit-samples/blob/master/arduino/IoTkit/examples/IoTKitActuationExample/IotKitActuationExample.ino

Data API para envío y recepción de datos: https://github.com/enableiot/iotkit-api/wiki/Data-API

Rule Management: https://github.com/enableiot/iotkit-api/wiki/Rule-Management

Alert Management: https://github.com/enableiot/iotkit-api/wiki/Alert-Management

Error Handling: https://github.com/enableiot/iotkit-api/wiki/Error-Handling

Hackathon WHD

Ahora que ya sabemos como manejar la plataforma y como mandar los datos desde el Arduino Edison, en el Hackathon del WHD planteamos un proyecto de una planta solar inteligente que en función de la demanda energética, es capaz de activar o desactivar paneles monitorizados en tiempo real y detectar cualquier incidencia o avería, dentro del proyecto de Intel y 1&1: http://worldhostingdays.com/global/project/1and1

El material usado en el hackathon fue:

Repositorio con documentación y ejemplo para el hackathon del WHD: https://github.com/srware/WHD.global-2017

Repositorio de todo el trabajo hecho en el hackathon: https://github.com/jecrespo/aprendiendoarduino-iot/tree/master/04-Intel%20IoT%20Analytics

El grupo de Españoles trabajando con Arduino:

En el hackathon:

Para conectar a red Arduino Edison:

Cómo cargar un programa en el Edison: https://www.arduino.cc/en/Guide/IntelEdison

Comandos interesantes en yocto linux

  • configure_edison –help
  • iotkit-admin
  • systemctl stop iotkit-agent
  • systemctl start iotkit-agent
  • systemctl status iotkit-agent -l
  • iotkit-admin catalog
  • iotkit-admin register
  • iotkit-admin observation

Dentro del Arduino Edison debe estar instalada la versión de yocto con el iotkit, que es un agente al que puede llamar para hacer determinadas tareas en la plataforma IoT de Intel. Explicación: “The agent is a program that runs as a daemon on the device, listening for simple messages from other processes and handling the necessary message formatting and security to send observations to the cloud. The agent comes with another program, iotkit-admin, which provides many utility functions, such as testing the network, activating a device, registering time series, and sending test observations. The agent is controlled by systemctl, the systemd service manager.”

Cuando cargamos un sketch de Arduino en el Edison, este se pierde después de reiniciar la placa. Para que funcione en el reinicio poner este fichero en el systemctl: /etc/systemd/system/arduino-sketch.service

Contenido del fichero:

systemctl daemon-reload
systemctl status arduino-sketch.service
systemctl enable arduino-sketch.service

Para resolver los problemas con el timezone debo realizar estos pasos

  • timedatectl status
  • ls -l /etc/localtime
  • cd /usr/share/zoneinfo (ver dónde está configurado)
  • timedatectl set-timezone Europe/Paris (y pongo esta)

Para ver el catálogo: iotkit-admin catalog

Para registrar componentes:

  • iotkit-admin register panel_temperature temperature.v1.1
  • iotkit-admin register solar_radiation radiation.v1.0
  • iotkit-admin register onoffButton button.v1.1
  • iotkit-admin register alarm powerswitch.v1.0
  • iotkit-admin register status powerswitch.v1.0

Para cambiar protocolo:

  • iotkit-admin protocol ‘mqtt’
  • iotkit-admin protocol ‘rest+ws’

Con estos detalles que aprendimos de la gente de Intel que estuvo en el hackathon pudimos hacer nuestro proyecto de una planta solar conectada y el resultado se puede ver en https://github.com/jecrespo/aprendiendoarduino-iot/tree/master/04-Intel%20IoT%20Analytics

Vídeo del resultado:

Y nuestra presentación: https://www.slideshare.net/jecrespo/whd-global-2017-smart-power-plant

Nuestro proyecto: https://www.1and1.com/cloud-community/develop/hackathon-projects/11-and-intel/smart-solar-power-plant/

Y finalmente nuestro proyecto fue presentado en el WHD:

Más fotos y publicaciones de

Durante el hackathon se presentó la cloud community de 1&1: www.1and1.com/cloud-community

Servicios IoT

Esta conferencia sobre IoT con Arduino fue expuesta el 1 de abril de 2017 con motivo del Arduino Day. Puedes ver el video de la conferencia completa en http://www.innovarioja.tv/index.php/video/ver/1661


Las plataformas mismas nos pueden ofrecer diferentes clases de servicios para los datos como visualización de datos, descargas, API para obtener los datos, alertas, etc…

Algunos servicios que podemos encontrar:

  • Almacenamiento de datos
  • Gestión de dispositivos
  • Visualización de datos (Visual Analytics)
  • Descarga de datos
  • API REST para interactuar con la plataforma
  • Notificaciones
  • Alertas/Alarmas
  • Reglas
  • SDK
  • Interacción con otras plataformas
  • Análisis de datos (Machine Learning)
  • Open data

Una plataforma nos puede permitir:

  • Automatizar informes de trabajo, cuadros de mando, etc… Los datos recogidos y guardados genera informes automáticamente de forma periódica o en tiempo real (por ejemplo de la producción) y son enviados.
  • Monitorización en Tiempo real de flotas o del estado de una planta
  • Avisos precoces para mantenimientos predictivos.
  • Control remoto de instalaciones.
  • Eficiencia energética.
  • Automatización de procesos.
  • Análisis de datos (data mining, etc…) para aprendizaje automático.
  • Business intelligence (detectar problemas comunes, medir cuellos de botella, etc…) y ayudar en el mantenimiento predictivo.
  • Integrar con el software corporativo. ERP, CRM, GMAO (Gestión del Mantenimiento Asistido por Ordenador), CMMS.