Abrir el ejemplo Thingspeak — ESP8266 — program board directly — WriteMultipleFiledsSecure de la librería thingspeak
Completar los datos del fichero secrets.h (segunda pestaña):
SSID – SSID de la Wifi que usemos
SECRET_PASS — Password de la Wifi
SECRET_CH_ID — ID del canal creado
SECRET_WRITE_APIKEY — API key de Thingspeak
Ejecutar el ejemplo y comprobar en el monitor serie que manda datos. Comprobar que se conecta y sale el mensaje “Channel update successful.” cada 2’ segundos
Crear una vista privada y visualizar los datos de los 4 campos creados.
Conectar el shield DS18B20 y oled al Wemos D1 mini.
En un acercamiento a esta disciplina, se busca conocer las tecnologías necesarias para el desarrollo de soluciones IoT/Industria Conectada y valiéndonos para ello de herramientas, tecnologías, protocolos y software libre/open source que hay a nuestra disposición, de forma que cualquier empresa por pequeña que sea pueda hacer un proyecto sencillo de IoT/Industria 4.0 con una inversión mínima, sea cual sea el sector al que pertenezca.
No solo las grandes empresas pueden dar el salto a IoT, la tecnologías libres permiten que sea factible la digitalización de las pymes con una inversión económica mínima y que surja la innovación desde las propias empresas con una formación adecuada a sus trabajadores.
Ver Anexo I con el material necesario para impartir los cursos de este itinerario.
Fundamentos IoT (Nivel 1)
Objetivo
Describir los fundamentos de Internet de las Cosas e identificar los distintos mercados a los que el alumno puede orientar su actividad profesional.
Dado que las comunicaciones, la conexión a Internet y los dispositivos conectados es un aspecto importante actualmente y los conceptos de computación y comunicaciones van unidos de la mano cuando hablamos de las TIC (Tecnologías de la Información y de la Comunicación), vamos a tratar también en este curso las comunicaciones y la programación de los dispositivos conectados.
Identificar la solución Hardware y Firmware más correcta para un proyecto IoT
Utilizar plataformas de prototipado IoT
Requisitos Alumnos
Haber cursado el módulo de Fundamentos IoT o tener experiencia en HW y Firmware IoT.
Contenido del Curso
Dispositivos IoT
HW IoT Industrial
Firmware: SW de los dispositivos
Plataforma de Prototipado
Prácticas Firmware
HW IoT Comercial
Infraestructuras de Comunicaciones IoT (Nivel 3)
Objetivo
Visión detallada de las infraestructuras y conectividad en IoT con ejemplos prácticos en algunas tecnologías. El alumno será capaz de analizar las necesidades de una solución IoT, ofrecer la mejor solución e implementarla.
Utilizar las Infraestructuras de comunicación que se usan hoy en día para IoT
Conocer las diferentes infraestructuras de comunicaciones IoT disponibles en el mercado
Comparar las tecnologías inalámbricas y saber elegir la más adecuada dependiendo del proyecto.
Ofrecer e implantar soluciones IoT a nivel de conectividad e infraestructuras IoT a partir del análisis de necesidades del proyecto
Utilizar algunas de las comunicaciones con placas de prototipado como Arduino y ESP8266
Requisitos Alumnos
Haber cursado el módulo de Fundamentos IoT o tener experiencia en infraestructuras y conectividad IoT.
Contenido del Curso
Conectividad IoT
Redes Inalámbricas IoT
Infraestructura de Comunicación IoT
Prácticas de Comunicaciones IoT
Conectividad IoT (Nivel 3)
Objetivo
Visión detallada de las infraestructuras y conectividad en IoT con ejemplos prácticos en algunas tecnologías. El alumno será capaz de analizar las necesidades de una solución IoT, ofrecer la mejor solución e implementarla.
Analizar los protocolos más populares para dotar de conectividad a los dispositivos IoT y configurar el software
Conocer los protocolos más populares usados en IoT
Profundizar en el protocolo HTTP y el uso de API REST
Profundizar en el protocolo MQTT y su uso en aplicaciones IoT
Instalar, configurar y usar un broker MQTT
Ofrecer e implantar soluciones IoT a nivel de conectividad e infraestructuras IoT a partir del análisis de necesidades del proyecto
Requisitos Alumnos
Haber cursado el módulo de Fundamentos IoT o tener experiencia en infraestructuras y conectividad IoT.
Contenido del Curso
Protocolos IoT
Protocolo HTTP
Uso de API REST
Protocolo MQTT
Práctica MQTT
Plataformas IoT (Nivel 4)
Objetivo
Visión general de las plataformas IoT y trabajo detallado en algunas de ellas. Proponer, instalar y configurar la plataforma más adecuada para el desarrollo de soluciones IoT.
Analizar las las plataformas existentes en IoT e instalar y configurar alguna de las más utilizadas.
Conocer las plataformas IoT Generalistas y especializadas más usadas
Conocer plataformas open source, instalar y configurar en un servidor
Encontrar la plataforma adecuada para una solución IoT, instalación y configuración
Programar servicios usando Node-Red
Uso de Bases de Datos para almacenamiento de datos
Configuración y uso de Dashboards
Analizar datos de forma visual
Requisitos Alumnos
Haber cursado el módulo de Fundamentos IoT o tener experiencia en plataformas IoT.
Contenido del Curso
Plataformas Cloud Generalistas
Plataformas Cloud Especializadas
Práctica de Plataformas Cloud
Plataformas Privadas/Libres
Práctica Plataformas Privadas/Libres
Servicios IoT
Node-Red
Bases de Datos
Dashboards
Ejemplos prácticos IoT
Desarrollo Soluciones IoT con Herramientas Libres (Nivel 5)
Objetivo
Este curso pretende unificar todos los conocimiento adquiridos en los anteriores cursos del itinerario IoT para hacer un proyecto “full stack” de IoT.
Unificar los conocimientos adquiridos en los otros cursos, identificar necesidades reales con respuestas desde el IoT y desarrollar una solución específica para una necesidad.
El objetivo de este taller el conocer las posibilidades de Arduino con Wifi y conectarlo a Internet para comunicar entre dispositivos o con plataformas locales o en la nube. También es muy útil para domotizar la casa.
Veremos las diferentes opciones de conectar Arduino a Wifi o crear una red Wifi así como el uso de las librerías Wifi. Nos centraremos en el uso de los dispositivos basados en el chip ESP8266 de https://www.espressif.com/.
Además este taller sirve como introducción a otros talleres que se realizarán el 30 de marzo dentro del “Arduino Day Extension 2019 La Rioja”:
Taller “Ok Google… enciende la luz! Creando electrónica para el Asistente de Google” – @kikeelectronico
Taller “Ok Google… enciende la luz! Creando electrónica para el Asistente de Google” – @kikeelectronico
El autor del taller es Enrique Crespo. Llevo trabajando con Arduino desde el año 2011 y en el año 2014 empecé mi andadura como profesor de Arduino y otros temas relacionados. Desde entonces he impartido muchos cursos presenciales de Arduino, talleres y conferencias en diversos lugares.
Todos los cursos, talleres y conferencias que he impartido puedes verlos en https://www.aprendiendoarduino.com/, donde publico toda la documentación y código.
El wifi es un mecanismo de conexión de dispositivos electrónicos de forma inalámbrica. Los dispositivos habilitados con wifi como Arduino, pueden conectarse a internet a través de un punto de acceso de red inalámbrica.
Wi-Fi es una marca de la Alianza Wi-Fi, la organización comercial que adopta, prueba y certifica que los equipos cumplen con los estándares 802.11 relacionados a redes inalámbricas de área local.
Los estándares IEEE 802.11b, IEEE 802.11g e IEEE 802.11n disfrutan de una aceptación internacional debido a que la banda de 2,4 GHz está disponible casi universalmente, con una velocidad de hasta 11 Mbit/s, 54 Mbit/s y 300 Mbit/s, respectivamente.
En la actualidad ya se maneja también el estándar IEEE 802.11ac, conocido como WIFI 5, que opera en la banda de 5 GHz y que disfruta de una operatividad con canales relativamente limpios. La banda de 5 GHz ha sido recientemente habilitada y, además, no existen otras tecnologías (Bluetooth, microondas, ZigBee) que la estén utilizando, por lo tanto existen muy pocas interferencias. Su alcance es algo menor que el de los estándares que trabajan a 2,4 GHz (aproximadamente un 10 %), debido a que la frecuencia es mayor (a mayor frecuencia, menor alcance).
Existen otras tecnologías inalámbricas como Bluetooth que también funcionan a una frecuencia de 2,4 GHz, por lo que puede presentar interferencias con la tecnología wifi. Debido a esto, en la versión 1.2 del estándar Bluetooth actualizó su especificación para que no existieran interferencias con la utilización simultánea de ambas tecnologías, además se necesita tener 40 000 kbit/s.
Existen varias alternativas para garantizar la seguridad de estas redes. Las más comunes son la utilización de protocolos de cifrado de datos para los estándares wifi como el WEP, el WPA, o el WPA2 que se encargan de codificar la información transmitida para proteger su confidencialidad, proporcionados por los propios dispositivos inalámbricos. La mayoría de las formas son las siguientes:
WEP, cifra los datos en su red de forma que sólo el destinatario deseado pueda acceder a ellos. Los cifrados de 64 y 128 bits son dos niveles de seguridad WEP. WEP codifica los datos mediante una “clave” de cifrado antes de enviarlo al aire. Este tipo de cifrado no está recomendado debido a las grandes vulnerabilidades que presenta ya que cualquier cracker puede conseguir sacar la clave, incluso aunque esté bien configurado y la clave utilizada sea compleja.
WPA: presenta mejoras como generación dinámica de la clave de acceso. Las claves se insertan como dígitos alfanuméricos.
WPA2 (estándar 802.11i): que es una mejora relativa a WPA. En principio es el protocolo de seguridad más seguro para Wi-Fi en este momento. Sin embargo requieren hardware y software compatibles, ya que los antiguos no lo son. Utiliza el algoritmo de cifrado AES (Advanced Encryption Standard).
IPSEC (túneles IP) en el caso de las VPN y el conjunto de estándares IEEE 802.1X, que permite la autenticación y autorización de usuarios.
Filtrado de MAC, de manera que solo se permite acceso a la red a aquellos dispositivos autorizados. Es lo más recomendable si solo se va a usar con los mismos equipos, y si son pocos.
Ocultación del punto de acceso: se puede ocultar el punto de acceso (router) de manera que sea invisible a otros usuarios.
Dispositivos de distribución o de red en wifi son:
Los puntos de acceso son dispositivos que generan un set de servicio, que podría definirse como una red wifi a la que se pueden conectar otros dispositivos. Los puntos de acceso permiten, en resumen, conectar dispositivos de forma inalámbrica a una red existente. Pueden agregarse más puntos de acceso a una red para generar redes de cobertura más amplia, o conectar antenas más grandes que amplifiquen la señal.
Los repetidores inalámbricos son equipos que se utilizan para extender la cobertura de una red inalámbrica, éstos se conectan a una red existente que tiene señal más débil y crean una señal limpia a la que se pueden conectar los equipos dentro de su alcance. Algunos de ellos funcionan también como punto de acceso.
Los enrutadores inalámbricos son dispositivos compuestos, especialmente diseñados para redes pequeñas (hogar o pequeña oficina). Estos dispositivos incluyen, un enrutador (encargado de interconectar redes, por ejemplo, nuestra red del hogar con Internet), un punto de acceso (explicado más arriba) y generalmente un conmutador que permite conectar algunos equipos vía cable (Ethernet y USB). Su tarea es tomar la conexión a Internet, y brindar a través de ella acceso a todos los equipos que conectemos, sea por cable o en forma inalámbrica.
Los estándares 802.11b y 802.11g utilizan la banda de 2,4 GHz. En esta banda se definieron 11 canales utilizables por equipos wifi, que pueden configurarse de acuerdo a necesidades particulares. Sin embargo, los 11 canales no son completamente independientes (un canal se superpone y produce interferencias hasta un canal a 4 canales de distancia). El ancho de banda de la señal (22 MHz) es superior a la separación entre canales consecutivos (5 MHz), por eso se hace necesaria una separación de al menos 5 canales con el fin de evitar interferencias entre celdas adyacentes, ya que al utilizar canales con una separación de 5 canales entre ellos (y a la vez cada uno de estos con una separación de 5 MHz de su canal vecino) entonces se logra una separación final de 25 MHz, lo cual es mayor al ancho de banda que utiliza cada canal del estándar 802.11, el cual es de 22 MHz. Tradicionalmente se utilizan los canales 1, 6 y 11, aunque se ha documentado que el uso de los canales 1, 5, 9 y 13 (en dominios europeos) no es perjudicial para el rendimiento de la red.
Esta asignación de canales usualmente se hace sólo en el Punto de acceso, pues los “clientes” automáticamente detectan el canal, salvo en los casos en que se forma una red “Ad-Hoc” o punto a punto cuando no existe punto de acceso.
Canales en 802.11 (wifi) frente a 802.15.4 (zigbee):
Wifi 5G
La tecnología Wi-Fi utiliza dos bandas de frecuencias según el estándar al que nos refiramos:
2,4 GHz: 802.11b, 802.11g y 802.11n
5 GHz: 802.11a, 802.11n y 802.11ac
Banda 2.4 GHz: En España se pueden utilizar los canales 1-13; el canal 14 es el único prohibido, solamente se puede utilizar en Japón. La potencia máxima es siempre 20 dBm.
Banda 5 GHz: En España se permite el uso de los canales 36-64 y 100-140, al igual que en el resto de Europa. La potencia máxima depende del escenario, pero generalmente sería 23 dBm y 30 dBm respectivamente para equipos nuevos con marcado CE a partir de 2015 (ETSI EN 301 893 V1.8.1).
Vamos a usar ESP8266 y mandar datos de luminosidad de la sala usando un LDR a una Raspberry Pi que tiene un servidor LAMP instalado.
Una fotorresistencia o LDR (por sus siglas en inglés “light-dependent resistor”) es un componente electrónico cuya resistencia varía en función de la luz.
Se trata de un sensor que actúa como una resistencia variable en función de la luz que capta. A mayor intensidad de luz, menor resistencia: el sensor ofrece una resistencia de 1M ohm en la oscuridad, alrededor de 10k ohm en exposición de luz ambiente, hasta menos de 1k ohm expuesto a la luz del sol. Aunque estos valores pueden depender del modelo de LDR.
El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:
Dónde Vout es el voltaje leído por el PIN analógico del ESP8266 y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.
Crear una base de datos llamada “DatosArduino” con una tabla llamada “luminosidad” que tenga 4 campos: “id” auto incremental y sea el campo clave, “fecha” de tipo timestamp y que se actualice al actualizar, un campo “arduino” de tipo entero y un campo “IntensidadLuminosa” que sea de tipo entero.
O con la query:
CREATE TABLE `luminosidad` (
`id` int(11) NOT NULL,
`fecha` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`arduino` int(11) NOT NULL,
`IntensidadLuminosa` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `luminosidad`
ADD PRIMARY KEY (`id`);
ALTER TABLE `luminosidad`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
Subir por FTP seguro los ficheros Graba_GET.php y Graba_POST.php a Raspberry Pi al directorio /var/www/html
Ver en la web de phpmyadmin los datos que se están subiendo y descargar en formato csv los datos guardados en unos minutos.
NOTA: Para ver los errores de PHP activar en /etc/php/7.0/apache2/php.ini la línea:
Development Value: E_ALL
MQTT y ESP8266
Para trabajar con MQTT es interesante instalar primero en el ordenador un cliente como MQTT.fx para hacer debug: https://mqttfx.jensd.de/
Para conseguir una comunicación MQTT con ESP8266 o Arduino, emplearemos una librería. Existen muchas disponibles gracias a la comunidad que existe alrededor de Arduino. Concretamente, nosotros emplearemos una de las más conocidas y la más estable y flexible, lo que facilita su uso en proyectos que queramos realizar donde intervengan Arduino y MQTT.
Dicha librería es Arduino Client for MQTT y nos provee de un sencillo cliente que nos permite tanto subscribirnos como publicar contenido usando MQTT. Internamente, usa la API de Arduino Ethernet Client lo que lo hace compatible con un gran número de ‘shields’ y placas como:
Instalar la librería mediante el gestor de librerías:
PubSubClient es una librería compatible con Arduino y ESP8266. Básicamente hace que nuestra placa se comporte como un cliente MQTT es decir, que podamos publicar mensajes y suscribirnos a un topic o varios para recibir mensajes. Da lo mismo si utilizas un Arduino o un ESP8266, el código es prácticamente el mismo. La diferencia reside en cómo nos conectamos a la red WiFi o Ethernet, cada placa utiliza su propia librería.
Este sketch publica un mensaje «hello world #x” consecutivo cada 2 segundos en el topic “outTopic” y se suscribe al topic “inTopic”. Además cuando se recibe un mensaje se dispara la función callback que si es un 1 enciendo el led integrado y en caso contrario se desactiva.
Probando la aplicación MQTT con ESP8266 y Raspberry Pi
Por último nos queda probar todo el sistema. No te olvides de cargar el código en la placa con las modificaciones necesarias en cada sketch con SSID, password, IP servidor mosquitto, usuario mosquitto y contraseña mosquitto.
Desde mqtt.fx suscribirse a los topic “inTopic” y “outTopic” para recibir los cambios que se producen.