Desarrollo de aplicaciones IoT en la nube para Arduino y ESP8266

Mesaj mə
0
Rəylər
Fraqment oxumaq
Oxunmuşu qeyd etmək
Desarrollo de aplicaciones IoT en la nube para Arduino y ESP8266
Şrift:Daha az АаDaha çox Аа

DESARROLLO DE APLICACIONES IoT EN LA NUBE PARA ARDUINO Y ESP8266

Tomás Domínguez Mínguez


DESARROLLO DE APLICACIONES IoT EN LA NUBE PARA ARDUINO Y ESP8266

Tomás Domínguez Mínguez

Desarrollo de aplicaciones IoT en la nube para Arduino y ESP8266

Primera edición, 2020

© 2020 Tomás Domínguez Mínguez

© 2020 MARCOMBO, S. L.

www.marcombo.com

Diseño de cubierta: ENEDENÚ DISEÑO GRÁFICO

Maquetación: cuantofalta.es

Asesor técnico: Rubén Beiroa

Correctora: Beatriz García

Directora de producción: M.a Rosa Castillo

«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».

ISBN: 978-8-4267-2975-0

Producción del ebook: booqlab.com

A todos aquellos que, de forma tan generosa, resuelven en foros nuestras dudas sobre el uso de las tecnologías software

TABLA DE CONTENIDO

1. INTERNET DE LAS COSAS

1.1 Componentes de IoT

2. COMUNICACIONES WEB

2.1 La familia de protocolos Internet

2.2 Comunicaciones web con ESP-01

2.2.1 Características del ESP-01

2.2.2 Programación del ESP-01 desde el IDE Arduino

2.2.3 Librería ESP8266WiFi

2.2.4 Integración del ESP-01 con Arduino

2.2.5 Prácticas

2.2.5.1 Cliente web

2.2.5.2 Servidor web

2.3 Protocolo HTTP

2.3.1 Peticiones HTTP

2.3.1.1 Tipos de peticiones HTTP

2.3.2 Respuestas HTTP

2.3.3 Prácticas

2.3.3.1 Servidor web avanzado

2.3.3.2 Asignación de valores a los pines del ESP-01 desde un navegador

2.3.3.3 Obtención del estado de los pines del ESP-01 desde un navegador

2.3.3.4 Asignación de valores a los pines PWM de Arduino desde un navegador

2.4 Utilidades del navegador Chrome para el análisis de mensajes HTTP

2.5 Herramienta Postman

2.5.1 Instalación de Postman

2.5.2 Creación de peticiones HTTP

2.5.2.1 Componentes generales de una petición HTTP

2.5.2.2 Realización de peticiones GET

2.5.2.3 Realización de peticiones POST

2.5.3 Obtención de respuestas

3. COMUNICACIONES MQTT

3.1 Protocolo MQTT

3.1.1 Conexión de un cliente a un bróker

3.1.2 Publicación y suscripción de mensajes

3.2 Comunicaciones MQTT con WEMOS D1 R1

3.2.1 Características del WEMOS D1 R1

3.2.2 Librería PubSubClient

3.3 Herramienta MQTTLens

3.3.1 Instalación de MQTTLens

3.3.2 Uso de MQTTLens

3.4 Prácticas

3.4.1 Enchufe domótico

3.4.2 Sensor de temperatura

3.4.2.1 Publicación sin pérdida de mensajes

3.4.2.2 Detección de la desconexión de un dispositivo

3.4.3 Termómetro digital

3.4.4 Alarma con sensor de movimiento

3.4.4.1 Sistema emisor - PIR

3.4.4.2 Sistema receptor – Timbre eléctrico

3.4.4.3 Sistema receptor – Sirena electrónica

3.4.5 Control de la calefacción desde un móvil con IoT MQTT panel

4. FORMATO DE DATOS JSON

5. COMUNICACIONES REST

5.1 Librería HTTP aRest

5.2 Prácticas

5.2.1 Control de la salida de pines digitales

5.2.2 Mando a distancia

5.2.3 Mando a distancia inteligente

5.2.4 Medición de la humedad del suelo

6. SERVICIO UBIDOTS

6.1 Acceso al servicio Ubidots

6.2 Componentes básicos de la plataforma

6.2.1 Dispositivos

6.2.2 Variables

6.2.3 Procesamiento de variables

6.2.4 Cuadro de mandos

6.2.5 Eventos

6.3 Librería MQTT UbidotsESPMQTT

6.4 API HTTP RESTful

6.5 API MQTT

6.6 Prácticas

6.6.1 Estación meteorológica con UbidotsESPMQTT

6.6.1.1 Desarrollo del programa WEMOS

6.6.1.2 Creación del cuadro de mandos en Ubidots

6.6.2 Estación meteorológica con HTTP RESTful

6.6.3 Estación meteorológica con MQTT

6.6.4 Sistema de control de riego

 

6.6.4.1 Desarrollo del programa WEMOS

6.6.4.2 Creación del cuadro de mandos en Ubidots

7. SERVICIO BEEBOTTE

7.1 Acceso al servicio Beebotte

7.2 Componentes básicos de la plataforma

7.3 API HTTP RESTful

7.4 API MQTT

7.5 Prácticas

7.5.1 Sistema de control de fugas de agua con MQTT

7.5.1.1 Creación del canal, el recurso y el panel de control en Beebotte

7.5.1.2 Desarrollo del programa WEMOS

7.5.1.3 Creación del interruptor en Beebotte

7.5.2 Sistema de control de fugas de agua con HTTP RESTful

8. SERVICIO PUSHBULLET

8.1 Acceso al servicio Pushbullet

8.2 API HTTP

8.3 Prácticas

8.3.1 Alarma por apertura de puertas o ventanas con sensor magnético

8.3.2 Botón de emergencia para personas con necesidades especiales

9. SERVICIO IFTTT

9.1 Acceso al servicio IFTTT

9.2 Componentes básicos de la plataforma

9.2.1 Servicios

9.2.2 Applets

9.2.3 Widgets

9.3 Tecnología webhook

9.4 Prácticas

9.4.1 Notificación de fuga de agua con Webhooks y Pushbullet

9.4.1.1 Creación del applet IFTTT

9.4.1.2 Desarrollo del programa WEMOS

9.4.2 Control de presencia con Beebotte, Webhooks y Pushbullet

9.4.2.1 Creación del applet IFTTT

9.4.2.2 Creación del canal y la regla en Beebotte

9.4.2.3 Desarrollo del programa WEMOS

9.4.3 Sistema buscapersonas con Google Assistant, Webhooks y Beebotte

9.4.3.1 Creación del canal y el recurso en Beebotte

9.4.3.2 Creación del applet IFTTT

9.4.3.3 Desarrollo del programa WEMOS

9.4.4 Control de luces con Google Assistant, Webhooks y Beebotte

9.4.4.1 Creación del canal y los recursos en Beebotte

9.4.4.2 Creación del applet IFTTT

9.4.4.3 Desarrollo del programa WEMOS

9.4.5 Apertura de la puerta del garaje con Alexa, Webhooks y Ubidots

9.4.5.1 Creación del applet IFTT

9.4.5.2 Desarrollo del programa WEMOS

9.4.5.3 Instalación y prueba de Alexa en el móvil

9.4.6 Mando a distancia en el móvil con Button Widget, Webhooks y Ubidots

9.4.6.1 Creación del applet IFTT

9.4.6.2 Instalación y prueba de IFTTT en el móvil

Unidad 1
INTERNET DE LAS COSAS

Internet de las cosas, también conocido por sus siglas en inglés IoT (Internet of Things), es un concepto propuesto por Kevin Ashton en 1999 para referirse a la conexión de objetos cotidianos a través de Internet. Su implantación es cada vez mayor y abarca, entre otros, los sectores de la medicina, la industria, el transporte, la energía, la agricultura, las ciudades inteligentes o los hogares, que es en el que nos centraremos. Hoy en día es más y más frecuente encontrar dispositivos en casa capaces de ser utilizados de forma remota a través de Internet, bien sea para su control o para obtener información de los sensores que lleven incorporados.


El éxito de la tecnología IoT se debe, en gran parte, a su capacidad para introducir objetos de uso diario en el mundo digital, al abrir un amplio abanico de nuevas posibilidades que incrementan enormemente su utilidad, ya que permiten el control de los objetos a distancia (p. ej., encender o apagar una luz), que estos informen de datos recogidos por sus sensores (p. ej., humedad o temperatura) o que envíen alertas (p. ej., alarmas, fallos de funcionamiento). Todo ello desde cualquier dispositivo en cualquier parte del mundo.

Pero la tecnología IoT no solo permite la comunicación entre personas y máquinas, sino que también abre la puerta a la comunicación entre los propios objetos, lo que da lugar a conceptos mucho más amplios como las comunicaciones máquina a máquina (M2M).

Desde el punto de vista técnico, la implantación de IoT es posible gracias a la expansión de las redes inalámbricas (especialmente WiFi) y a los bajos costes de los microcontroladores, los cuales, además, son cada vez más potentes y pequeños. Pero también por el auge de protocolos de comunicación específicos que consumen un menor ancho de banda y requieren menos capacidad de procesamiento y, por lo tanto, consumo de energía. En este sentido, a lo largo de las páginas de este libro se trabajará en el desarrollo de proyectos basados en el SoC ESP8266 y los protocolos de comunicación HTTP y MQTT (este último cada vez más relevante en el mundo IoT). Igualmente se utilizará la arquitectura basada en los principios REST.

Se hará especial énfasis en el mundo de los servicios web, es decir, aquellos que se ejecutan en Internet (en la nube), ya que su creciente oferta posibilita el desarrollo de dispositivos IoT cada vez más inteligentes, más seguros y más accesibles. El control y la recogida de la información ofrecida por dichos dispositivos podrán realizarse desde un ordenador o un móvil, y se mostrarán de forma vistosa, con indicaciones instantáneas o mediante evoluciones históricas. Todo ello utilizando herramientas de desarrollo gráfico que en la mayoría de los casos no implican aprender ningún nuevo lenguaje de programación porque no hay que editar código.

Los animo a adentrarse en este maravilloso mundo en el que podrán realizar proyectos IoT que hubieran pensado que solo estaban al alcance de los profesionales del sector.

1.1 COMPONENTES DE IoT

Un dispositivo IoT no es un elemento aislado, sino que forma parte de un ecosistema en el que se pueden destacar cuatro grandes componentes:

• Sensores/actuadores

• Conectividad

• Procesamiento de datos

• Interfaces de usuario


Los sensores son dispositivos que recogen información del entorno. Los hay de muchos tipos, como los de humedad, temperatura, movimiento, distancia, nivel de líquidos, etc. Los actuadores son elementos que modifican el entorno, como servos, motores, relés que activan cualquier dispositivo eléctrico, etc. Naturalmente, un mismo dispositivo IoT podrá tener uno o más sensores o actuadores. En las diferentes prácticas propuestas en este libro se utilizarán muchos de ellos.

Los sensores o actuadores podrán ser de muy distinta naturaleza o complejidad, pero todos ellos tendrán algo en común: la capacidad de conectividad. Ya sea a través de WiFi, Bluetooth, redes móviles o satélites, su existencia no tendría sentido si no fueran capaces de enviar los datos recogidos o recibir las órdenes que se les quiera dar. El uso de servicios en la nube supondrá su conexión a través de Internet con la infraestructura que, ubicada en la nube, deberán integrarse e interactuar.

El procesamiento de datos se realiza una vez recogida la información obtenida de los sensores. Este podrá ser desde el establecimiento de eventos mediante sencillas reglas, como el envío de notificaciones a móviles en caso de la subida de la temperatura por encima de un nivel establecido, o algo tan complejo como el análisis de las imágenes recogidas por una cámara mediante complicados algoritmos que identifiquen determinadas situaciones, objetos o personas.

Las interfaces de usuario son imprescindibles para mostrar la información transmitida por los dispositivos. Pueden ser de distinta naturaleza, desde controles gráficos que muestren los datos de los sensores, pasando por el envío de correos electrónicos o notificaciones a móviles, hasta interfaces por voz usando asistentes como el de Google o Alexa. A lo largo de las páginas de este libro aprenderán y experimentarán con todas ellas.

Unidad 2
COMUNICACIONES WEB

El término web se emplea en multitud de ocasiones, pero ¿a qué nos estamos refiriendo cuando lo utilizamos? A veces se hace para mencionar algo muy general como Internet, pero otras algo tan concreto como una página alojada en un servidor. Parece, por lo tanto, que se trata de un comodín para referirse a muchas cosas que, aunque están relacionadas entre sí, son ciertamente muy diferentes. Entonces ¿qué es realmente la web? Dicha palabra es una abreviatura de World Wide Web (WWW), que representa un sistema de distribución de documentos hipertexto (texto que contiene enlaces a otros textos) e hipermedia (no solo integra texto, sino también imágenes, vídeo, etc.) a través de Internet. La web fue creada por Tim Berners-Lee en el CERN en 1989 y dada a conocer en 1992. Desde entonces ha ido creciendo su uso hasta formar ya parte inseparable de nuestras vidas.

El CERN tiene sede en Ginebra (Suiza) y su nombre procede de las siglas francesas que significan Consejo Europeo para la Investigación Nuclear.

 

Las comunicaciones web tienen tres elementos clave: un cliente que solicita y recibe documentos, un canal de comunicación, y un servidor que almacena y sirve los documentos a los clientes que se lo soliciten.


El software cliente es el navegador, el canal de comunicación es Internet y el servidor es el sitio web que contiene los documentos visualizados en el navegador. Dichos documentos se conocen como páginas web y están escritas en HTML (HyperText Markup Language), cuyas siglas en español se pueden traducir como ‘lenguaje hipertexto de marcas’. Es hipertexto porque un documento se puede vincular a otro, al que se accedería pulsando en el enlace correspondiente. Y es de marcas porque se basa en el uso de marcas (etiquetas o tags) situadas entre los signos ‘<’ y ‘>’ que funcionan como comandos de formato de textos, imágenes, etc.

Para que un navegador web pueda visualizar una página, debe solicitarla a un servidor, pero antes debe saber dónde está. ¿Cómo localizarlo? Mediante su dirección o URL (Uniform Resource Locator). Las siglas inglesas que componen su nombre significan ‘localizador uniforme de recursos’ y es un conjunto de caracteres que identifica de forma exclusiva un recurso (p. ej., una página web) en Internet. El URL más conocido seguro que es http://www.google.com/. No voy a entrar en el detalle de los componentes de un URL, pero sí voy a referirme al primero de ellos, que es el que hace referencia al protocolo utilizado para la comunicación entre el cliente y el servidor. En el caso del URL anterior, es HTTP (HyperText Transfer Protocol, ‘protocolo de transferencia de hipertextos’), que es el más utilizado en Internet y la base de la comunicación entre clientes y servidores web. Es el lenguaje universal que nos permitirá acceder a cualquier servidor del mundo independientemente de donde nos encontremos.

2.1 LA FAMILIA DE PROTOCOLOS INTERNET

Aunque en el apartado anterior se haya nombrado solo a HTTP, Internet está basado en toda una familia de protocolos que, gracias a su arquitectura en capas, consigue abstraer las particularidades de cada computadora y su sistema operativo (sea cliente o servidor). Dicha arquitectura consta de cuatro niveles que se muestran gráficamente en la siguiente figura.


El motivo de establecer una arquitectura basada en capas para las comunicaciones web es porque el intercambio de datos entre un cliente y un servidor se debe realizar llevando a cabo múltiples procedimientos, cuyo resultado sería un software complejo, difícil de mantener y propenso a fallos. Al dividir esta complejidad en partes, cada capa se encargaría de desarrollar solo alguno de dichos procedimientos y ocultaría la dificultad de su implementación mediante servicios que serían invocados desde la capa superior. En este modelo, cada capa se relaciona solo con su nivel inmediatamente inferior, a quien solicita servicios, y el superior, a quien ofrece los desarrollados por ella misma.

Al ocultarse la complejidad de lo que se hace en cada capa, el desarrollador de aplicaciones no tendrá que preocuparse por cómo se realizan las comunicaciones, ya que únicamente hará uso de los servicios de aplicación (los de la última capa), sabiendo que las de abajo le asegurarán el envío y la recepción de los datos, independientemente del tipo de red y el hardware o sistema operativo de su interlocutor.

Veamos en detalle las funciones de cada una de estas capas.

La primera representa el nivel interfaz de red o acceso a la red. Es la que permite la conexión física de los elementos HW que intervienen en las comunicaciones (interfaces, cables, conectores, etc.).

A continuación vienen los niveles de Internet y de transporte. En dichos niveles se localizan los protocolos TCP/IP, cuyos acrónimos corresponden a Transmision Control Protocol/ Internet Protocol (Protocolo de Control de Transmisión/ Protocolo de Internet). Dichos protocolos son realmente los más importantes y fueron los primeros en definirse, por lo que se consideran el núcleo de lo que hoy conocemos como Internet. Se desarrollaron inicialmente en el año 1973 por Vincton Cerf como parte de un proyecto dirigido por Robert Khan, patrocinado por la agencia de programas avanzados de investigación (ARPA - Advanced Research Projects Agency) del departamento estadounidense de defensa (DoD – Department of Defense). Se ejecutó por primera vez en la red ARPANET, la cual conectaba varias universidades y laboratorios de investigación en Estados Unidos. La idea subyacente era crear una red descentralizada que, en caso de un hipotético ataque nuclear ruso, pudiera seguir en funcionamiento.

Pero ¿cuál es la función de cada uno de dichos protocolos? En el caso de IP, se trata de un protocolo de red que se encarga del direccionamiento y enrutamiento de los datos desde su origen al destino, para lo que debe diferenciar unívocamente todo lo que se conecte a Internet mediante una dirección IP. Como ya sabrán, las direcciones IPV4 se expresan mediante un número binario de 32 bits que se representa como cuatro octetos en formato decimal separados por puntos. Por ejemplo, dentro de la red WiFi de casa, la dirección IP de su ordenador podría ser 192.168.1.32.

Un octeto son 8 bits y representan un número entre 0 y 255.

Las direcciones IPV6 están compuestas por 128 bits y se expresan en una notación hexadecimal de 32 dígitos.

El protocolo TCP, situado en un nivel superior (el de transporte), se encarga de garantizar la entrega de datos y proporciona además un mecanismo para distinguir distintas aplicaciones o servicios dentro de una misma máquina mediante la utilización de puertos. El puerto es el punto de acceso a un servicio. Se coloca a continuación de la dirección IP separado por el carácter ‘:’. Por ejemplo, imaginen que en su red WiFi tienen un servidor web que escucha peticiones HTTP por el puerto 80. Si dicho servidor web se ejecutara en un ordenador con la dirección IP 192.168.1.99, para acceder a él deberían escribir 192.168.1.99:80 en la barra de direcciones del navegador.

El puerto estándar de escucha de peticiones HTTP de un servidor web es el 80, por lo que, en caso de no especificar nada, el navegador intentaría conectarse por ese puerto y devolvería error en caso de que estuviera escuchando por otro diferente.

El nivel de aplicación permite, como su propio nombre indica, el intercambio de datos entre aplicaciones. En dicho nivel se encuentran protocolos como el de correo electrónico (SMTP), la transferencia de archivos (FTP) o el caso que nos ocupa, el del servicio Web (HTTP).

Resumiendo todo lo dicho hasta ahora, la siguiente figura muestra los protocolos utilizados en las comunicaciones web usando este modelo de capas.