Internet de las cosas, los servicios en la nube y el ESP8266 - Tomás Domínguez Mínguez - E-Book

Internet de las cosas, los servicios en la nube y el ESP8266 E-Book

Tomás Domínguez Mínguez

0,0
21,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Descubra cómo simplificar sus obligaciones y proteger su entorno con la automatización de tareas controladas a través de Internet. Aunque el término IoT admite múltiples definiciones, en todas ellas se hace referencia a la conexión e intercambio de datos entre todo tipo de objetos a través de Internet. Dicha capacidad de comunicación es el principal motivo de la expansión de esta tecnología, ya que facilita su acceso desde cualquier lugar y dispositivo. Incluso, permite la colaboración entre ellos y, en consecuencia, la ejecución de tareas automáticas que amplían significativamente su utilidad. Desde el punto de vista técnico, la implantación de IoT es posible gracias al auge de protocolos y arquitecturas de comunicación estándar que propician su empleo en microcontroladores pequeños y baratos, como los basados en el SoC ESP8266. Por ese motivo, y a partir de un nivel básico, la lectura de este libro le aportará los conocimientos suficientes para manejar con soltura los protocolos HTTP y MQTT, así como las arquitecturas cliente-servidor, publicación-suscripción y REST, comunes en este tipo de sistemas. Todos los conceptos que se presentan en este libro se acompañan con material web y numerosos ejercicios prácticos basados en conocidos servicios en la nube, como Ubidots, Pushbullet o IFTTT. En todos ellos se comenta, paso a paso, el código de cada sketch y el proceso de configuración de cada servicio. El resultado será un conjunto de útiles aplicaciones basadas en dispositivos ESP8266 a las que podrá acceder desde un ordenador, una tablet o un teléfono móvil: •Desarrollará aplicaciones que enviarán notificaciones de alarma cuando, por ejemplo, se produzca una fuga de agua, cuando se detecte movimiento o se abra una puerta de forma imprevista mientras no esté en casa. •Podrá velar por la seguridad de sus mayores, a los que podrá proporcionar un botón de ayuda o, en caso de que tengan problemas de desorientación, colocarles un dispositivo que permita saber si han salido de casa. •Aprenderá a crear botones en el escritorio de su teléfono móvil, cuya pulsación desencadene la acción deseada (por ejemplo, abrir la puerta del garaje), e incluso descubrirá cómo hacer esto con un asistente de voz, como Alexa.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 251

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Internet de las cosas,

los servicios en la nube y el ESP8266

Tomás Domínguez Mínguez

Internet de las cosas,

los servicios en la nube y el ESP8266

Tomás Domínguez Mínguez

 

 

Internet de las cosas, los servicios en la nube y el ESP8266

Segunda edición, 2023

© 2023 Tomás Domínguez Mínguez

© 2023 MARCOMBO, S. L.  www.marcombo.com

Ilustración de cubierta: Jotaká

Maquetación: quimdiaz.net

Correctora: Anna Alberola

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 del libro en papel: 978-84-267-3714-4

ISBN del libro electrónico: 978-84-267-3723-6

Producción del ePub: booqlab

 

 

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 un sistema IoT

2. COMUNICACIONES WEB

2.1  La familia de protocolos Internet

2.2  El ESP-01

2.2.1  La librería ESP8266WiFi

2.2.2  Prácticas

2.2.2.1  Conexión a la red wifi

2.2.2.2  Cliente web

2.2.2.3  Servidor web

2.3  El protocolo HTTP

2.3.1  Peticiones HTTP

2.3.1.1  Peticiones de tipo GET y POST

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 de un ESP-01 desde un navegador

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

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

2.5  La herramienta Postman

2.5.1  Instalación

2.5.2  Creación y envío de peticiones HTTP

2.5.2.1  Peticiones de tipo GET

2.5.2.2  Peticiones de tipo POST

2.5.3  Obtención de respuestas HTTP

3. COMUNICACIONES MQTT

3.1  El protocolo MQTT

3.1.1  Conexión con el bróker

3.1.2  Publicación y suscripción de mensajes

3.2  El WEMOS D1 R1

3.2.1  La librería PubSubClient

3.3  La herramienta MQTT Explorer

3.4  Prácticas

3.4.1  Enchufe domótico

3.4.2  Sensor de temperatura

3.4.2.1  Publicación de mensajes con retención activada

3.4.2.2  Detección de la desconexión del 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 – 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  La librería HTTP aRest

5.2  Prácticas

5.2.1  Asignación de valores a los pines digitales de un dispositivo ESP8266

5.2.2  Control remoto

5.2.3  Control remoto inteligente

5.2.4  Medición de la humedad del suelo

6. EL 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  Cuadro de mando

6.2.4  Eventos

6.3  Integración de dispositivos ESP8266 con el servicio Ubidots

6.3.1  El API HTTP

6.3.2  El API MQTT

6.3.3  La librería UbidotsESPMQTT

6.4  Prácticas

6.4.1  Estación meteorológica

6.4.1.1  Desarrollo del sketch con HTTP RESTful

6.4.1.2  Creación del cuadro de mando

6.4.1.3  Desarrollo del sketch con MQTT

6.4.2  Sistema de control de riego

6.4.2.1  Desarrollo del sketch con UbidotsESPMQTT

6.4.2.2  Creación del cuadro de mando

7. EL SERVICIO PUSHBULLET

7.1  Acceso al servicio Pushbullet

7.2  El API HTTP

7.3  Prácticas

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

7.3.2  Botón de emergencia para personas con necesidades especiales

8. EL SERVICIO IFTTT

8.1  Acceso al servicio IFTTT

8.2  Componentes básicos de la plataforma

8.2.1  Servicios

8.2.2  Applets

8.2.3  Widgets

8.3  Prácticas

8.3.1  Notificación de fuga de agua

8.3.1.1  Creación del applet IFTTT

8.3.1.2  Desarrollo del sketch

8.3.2  Sistema de control de presencia

8.3.2.1  Creación del applet IFTTT

8.3.2.2  Desarrollo del sketch

8.3.2.3  Creación del evento Ubidots

8.3.3  Apertura de la puerta del garaje con Alexa

8.3.3.1  Creación del applet IFTTT

8.3.3.2  Instalación de Alexa en el móvil

8.3.3.3  Desarrollo del sketch

8.3.4  Mando a distancia en el móvil

8.3.4.1  Creación del applet IFTTT

8.3.4.2  Instalación 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 e intercambio de datos entre todo tipo de objetos a través de Internet. El éxito de esta tecnología se debe a que amplía enormemente su utilidad, ya que permite controlar los objetos a distancia (p. ej., encender o apagar una luz), que sean capaces de enviar los datos recogidos por sus sensores (p. ej., la humedad o la temperatura) o, incluso, de notificar alertas (p. ej., alarmas, fallos de funcionamiento). Por todo ello, Internet de las cosas está presente cada vez en más sectores, como el de la medicina, la industria, el transporte, la energía, la agricultura, las ciudades inteligentes y, muy especialmente, el del hogar, eje central de esta obra.

Desde el punto de vista técnico, la popularización de IoT ha sido posible gracias al auge de protocolos de comunicación específicos, como MQTT, cuya principal ventaja es los escasos recursos que requiere para su funcionamiento, tanto de comunicaciones como computacionales. Eso ha favorecido el empleo de microcontroladores sencillos, como los basados en el SoC ESP8266, que, además de ser más pequeños y baratos, consumen menos energía, algo importante cuando deben alimentarse con baterías.

Junto con MQTT, HTTP es otro de los protocolos de comunicación más comunes en aplicaciones IoT, ya que es el utilizado para la invocación de servicios web, es decir, aquellos que se ejecutan en la nube. Su creciente oferta facilita la automatización de toda clase de procesos y el desarrollo de dispositivos cada vez más inteligentes, seguros y accesibles.

Los animo a adentrarse en este maravilloso mundo, donde podrán realizar proyectos IoT que hasta ahora pensaban que solo estaban al alcance de profesionales del sector.

1.1 COMPONENTES DE UN SISTEMA IOT

Un dispositivo IoT no es un elemento aislado, sino que forma parte de un ecosistema formado por cuatro grandes componentes:

•    Sensores/actuadores.

•    Red de comunicaciones.

•    Servicios web.

•    Dispositivos cliente.

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, 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.

Aunque hay sensores y actuadores de distinta naturaleza, es imprescindible que sean capaces de conectarse a una red de comunicaciones, bien de forma directa o bien mediante algún tipo de componentes que realicen esa función (los que usarán serán los basados en el SoC ESP8266). Ya sea a través de cable, wifi, Bluetooth, redes móviles o satélites, su existencia no tendría sentido si no pudieran enviar los datos recogidos o recibir las órdenes que deban llevar a cabo.

Los servicios web son los responsables del procesamiento de datos, que puede ser algo tan simple como la aplicación de una regla con la que se decida, por ejemplo, el envío de una notificación a un teléfono móvil cuando la temperatura suba por encima de un nivel establecido; o algo tan complejo como el análisis de las imágenes captadas por una cámara mediante complicados algoritmos que identifiquen determinadas situaciones, objetos o personas.

Los dispositivos cliente son los ordenadores o los teléfonos móviles donde se ejecutan las interfaces de usuario desde las que se controla el comportamiento del sistema IoT y/o se muestra información relevante de su funcionamiento. Su naturaleza es muy diversa, ya que van desde las que se basan en el envío de alertas (correos electrónicos, notificaciones a móviles, etc.) hasta las novedosas interfaces de voz (que se apoyan en asistentes como Alexa), pasando por las tradicionales, diseñadas a partir de un conjunto de componentes gráficos (widgets). 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, unas veces para referirse a algo tan general como Internet y otras para referirse a algo tan específico como una página HTML. Entonces, ¿qué es, en realidad, la web y qué diferencia hay con Internet? Aunque muchas veces ambos términos se usan de forma indistinta, representan conceptos muy diferentes; Internet es una red de comunicaciones y la web es un sistema de distribución de documentos hipertexto (contienen texto con enlaces a otros documentos) e hipermedia (también incluyen imágenes, sonido, vídeo, etc.).

Web es la abreviatura de World Wide Web (WWW).

Las comunicaciones web tienen tres elementos clave:

•    Un cliente que solicita y recibe documentos.

•    Un canal de comunicación.

•    Un servidor que almacena y sirve los documentos a los clientes que se lo requieran.

El software cliente es el navegador, el canal de comunicación es Internet y el servidor es el sitio web donde se almacenan los documentos, que son páginas web escritas en HTML (HyperText Markup Language - lenguaje hipertexto de marcas). Este lenguaje es hipertexto porque desde un documento se puede acceder a otro pulsando sobre el enlace correspondiente; y es de marcas porque se basa en el uso de etiquetas (marcas) con las que se estructura el contenido de la página. Más adelante conocerán su sintaxis.

Para que un navegador web pueda visualizar una página, debe pedírsela a un servidor. Eso requiere solicitársela haciendo referencia a su dirección o URL (Uniform Resource Locator, localizador uniforme de recursos), que identifica de forma exclusiva un recurso en Internet (p. ej., una página web). A modo de ejemplo, una de las más conocidas es http://www.google.com/.

Aunque no es objeto de esta sección describir los componentes de una URL, sí debe saber que el primero de ellos identifica el protocolo empleado en la comunicación entre el navegador y el servidor web. En el caso de la URL anterior, es HTTP (HyperText Transfer Protocol, protocolo de transferencia de hipertextos), que es el más frecuente en Internet.

Si bien el protocolo HTTP se utiliza generalmente en la consulta de páginas web, se creó con el fin de permitir la comunicación entre cualquier tipo de clientes y servidores a nivel de aplicación. En este sentido, un cliente no tiene por qué ser un navegador ni un servidor tiene que suministrar únicamente páginas HTML. Tanto es así que, en el ámbito IoT, los dispositivos suelen adoptar el papel de clientes desde los que se invocan servicios en la nube y los servidores no devuelven páginas web sino el resultado de la ejecución de dichos servicios.

2.1 LA FAMILIA DE PROTOCOLOS INTERNET

Aunque en el apartado anterior solo se haya nombrado 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 en capas para las comunicaciones web es que en el intercambio de datos entre un cliente y un servidor intervienen múltiples y complejos procedimientos. Como viene siendo habitual en informática, la forma de afrontar este tipo de problemas es dividirlos en partes (en este caso, en capas). Cada una de ellas se encargaría de la ejecución de algunos procedimientos, que proporcionaría como servicios a la capa superior. De este modo, cada capa se relacionaría solo con el nivel inmediatamente inferior, al que solicitaría dichos servicios, así como el superior, al que prestaría los servicios realizados por ella misma. En consecuencia, el desarrollador de aplicaciones únicamente haría uso de los servicios ofrecidos por la última capa, sabiendo que las de abajo aseguran el envío y la recepción de los datos, independientemente del tipo de red, el hardware, el sistema operativo o la ubicación física de su interlocutor.

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

La primera representa el nivel de 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 (tipos de 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 fueron los primeros en definirse, por lo que se consideran el núcleo de lo que hoy conocemos como Internet. Fueron desarrollados 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 utilizó por primera vez en la red ARPANET con el fin de conectar 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 estos protocolos? IP es un protocolo de red que se encarga del direccionamiento y enrutamiento de los datos desde una máquina origen a otra destino, para lo cual debe diferenciar unívocamente cada una de ellas mediante una dirección IP. Como ya sabrán, las direcciones IPV4 se expresan mediante un número binario de 32 bits formado por cuatro octetos, que se representan en formato decimal separados por puntos. Por ejemplo, dentro de una red wifi doméstica, la dirección IP de su ordenador podría ser 192.168.1.32.

Un octeto son 8 bits y contiene 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 proporcionar un mecanismo que permita distinguir distintas aplicaciones o servicios dentro de una misma máquina mediante el uso 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 tuvieran un servidor web que escuchara peticiones HTTP por el puerto 80. Si ese 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 ninguno, el navegador intentaría conectarse a través de él.

El nivel de aplicación permite, como su propio nombre indica, el intercambio de datos entre aplicaciones. En ese nivel se encuentran protocolos como el de correo electrónico (SMTP), el de transferencia de archivos (FTP) o, en el caso que nos ocupa, el de los servicios web (HTTP).

La siguiente figura muestra los protocolos utilizados en las comunicaciones web con este modelo de capas.

2.2 EL ESP-01

Actualmente, la forma más común de acceder a Internet es por wifi. Pero Arduino no tiene capacidad para realizar este tipo de comunicaciones, por lo que debe conectarse a un componente que realice dicha labor. El más habitual es el ESP-01, cuyo aspecto puede ver en la siguiente imagen.

El ESP-01, fabricado por Espressif, es un módulo formado por un microcontrolador ESP8266 que trabaja a 80 MHz, un chip de memoria de 512 Kb o 1 Mb (según el modelo) y otro wifi 802.11 b/g/n. Aunque conectado a Arduino su función sea únicamente la de proporcionar acceso wifi, con semejante potencia podría utilizarse de forma independiente en proyectos para los que se necesite un número pequeño de pines digitales. Por ese motivo, los ejercicios realizados en esta obra incluirán únicamente dicho componente.

El término SoC (System on a Chip) se emplea para referirse a un chip que integra diversos componentes comunes en ordenadores o sistemas informáticos (por ejemplo, CPU, memoria, wifi, etc.).

A diferencia de Arduino, el ESP-01 no dispone de fuente de alimentación, por lo que los 3.3 V que requiere deberán ser proporcionados por una fuente externa. En la siguiente imagen puede ver la utilizada habitualmente en este tipo de proyectos.

Como puede observar, tiene dos salidas independientes que se pueden configurar a 5 o 3.3 V, según la posición de sus jumpers. La corriente suministrada llega a los 700 mA, suficiente para alimentar el ESP-01. La entrada de energía puede venir de un puerto USB, de un adaptador de red o de una batería con una tensión entre 6.5 y 12 V. Además, dispone de un interruptor para encenderla y apagarla.

El ESP-01 dispone de 8 pines.

Vea la función de cada uno de ellos:

•    GND, VCC. Son los pines de alimentación. No olviden que este componente funciona a 3.3 V.

•    GPIO0, GPIO2. Pines digitales de E/S. También trabajan a 3.3 V.

•    RX, TX. Son los pines de recepción y transmisión serie del microcontrolador. Sirven tanto para su programación como para la comunicación con otros microcontroladores. También pueden funcionar como los pines GPIO3 (RX) y GPIO1(TX). De nuevo, recuerden que dichos pines trabajan a 3.3 V.

•    CH_PD. Cuando su voltaje es de 0V (nivel bajo) el ESP-01 se apaga y con 3.3 V (nivel alto) se enciende.

•    RESET. Reinicia el ESP-01 cuando se conecta a GND.

El uso del ESP-01 no requiere aprender ningún nuevo lenguaje de programación ni utilizar un IDE específico, ya que se programa igual que Arduino en su mismo IDE. Sin embargo, antes tendrán que instalar un plugin especial. A tal efecto, seleccionen la opción “Preferencias” del menú “Archivo”. Aparecerá una ventana, donde deberán escribir la siguiente URL en el campo “URLs adicionales de gestor de placas”:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Pulsen el botón “ACEPTAR” para hacer efectivos los cambios.

A continuación, incorporen la nueva placa al IDE con la opción Herramientas Placa: “***” Gestor de placas (los asteriscos representan el nombre de la última placa con la que haya trabajado, seguramente “Arduino Uno”). Escriban “esp8266” en el campo de búsquedas del “GESTOR DE PLACAS”, seleccionen la versión 2.7.4 de la única que aparece y pulsen el botón “INSTALAR”.

El motivo de no instalar la última versión es porque algunas de las librerías utilizadas aún no están adaptadas a las versiones “3*”.

A partir de ahora, cuando quieran programar esta placa deberán seleccionarla en Herramientas Placa: “***” ESP8266 Boards Generic ESP8266 Module, tal como se muestra a continuación:

Una vez finalizada la configuración del IDE Arduino, solo queda montar el circuito que permita cargar los sketches en el ESP-01, lo que implica disponer de un adaptador FTDI que habilite la comunicación serie entre el ordenador y ESP-01 mediante un cable USB. Esto es así porque, a diferencia de Arduino, este pequeño componente no viene con el adaptador incorporado, por lo que deberán conectarlo externamente. En la siguiente imagen se aprecia el aspecto de uno de ellos:

En uno de sus extremos se encuentra el conector USB. En el otro están los pines de alimentación (GND y VCC), además de los de recepción y transmisión datos (Rx y Tx).

La conexión del módulo ESP-01 con el adaptador en modo grabación se muestra a continuación:

Como pueden observar, los pines Rx/Tx de ambos elementos se conectan de forma cruzada, para que lo que se envíe por el pin Tx de uno de ellos se reciba por el pin Rx del otro.

El FTDI se alimenta a través del cable USB, mientras que el ESP-01 hace uso de una fuente de alimentación de 3.3 V (asegúrense de que el jumper esté en la posición adecuada). Para que esta fuente tenga la misma referencia de tensión que el ordenador, deberán conectar el pin GND del FTDI al de la fuente de alimentación. Finalmente, la tensión del pin CH_PD será de 3.3 V con objeto de mantenerlo encendido.

A diferencia de Arduino —al que no hay que indicarle de forma explícita si lo que se quiere es cargar un programa o ejecutarlo—, en el caso del ESP-01 sí deben hacerlo. Por ese motivo, siempre que programen el módulo, tendrán que poner el pin GPIO0 a nivel bajo (0V).

El circuito anterior parte de la premisa de que el FTDI trabaja a 3.3 V. Si lo hiciera a 5V, se aconseja conectar un divisor de tensión entre el pin Tx del FTDI y el Rx del ESP-01, tal como se aprecia en este otro circuito:

Algunos FTDI tienen un switch que permite seleccionar la tensión de trabajo. En cualquier caso, consulten la documentación del que hayan adquirido.

La siguiente imagen muestra en detalle dicho divisor de tensión:

Un voltaje de 3.3 V. en el pin Tx del ESP-01 es interpretado por el FTDI como nivel alto en su pin Rx, por lo que no habría ningún problema de comunicación en ese sentido.

El circuito utilizado en modo ejecución (una vez cargado el sketch en el ESP-01) se puede ver a continuación:

Observen que únicamente es necesario desconectar el pin GPIO0.

Cuando desconectan el pin GPIO0, realmente lo que están haciendo es dejarlo a nivel alto (3.3 V), ya que dicho pin tiene internamente una resistencia de pull up que lo mantiene en ese nivel.

Si no fuera necesario mostrar información en el monitor serie, no haría falta el FTDI, por lo que el circuito quedaría tal como pueden ver en esta otra imagen:

2.2.1 La librería ESP8266WiFi

Tal como se expuso al principio del capítulo, las comunicaciones web requieren el manejo del protocolo HTTP. Esa labor resultaría complicada si no hubiera librerías que ocultaran la complejidad del manejo de los protocolos TCP/IP que hay por debajo. De todas las librerías existentes, la utilizada en esta obra será ESP8266WiFi, ya que se incluye automáticamente en el IDE Arduino junto con la placa ESP8266.

Este comportamiento corresponde al IDE Arduino con versión 2, que es la utilizada en todos los ejercicios de esta obra.

Como saben, la comunicación web requiere la existencia de, al menos, un cliente, un servidor web y una red de comunicaciones. Por ese motivo, esta librería ofrece las siguientes clases:

•    WiFi. Permite realizar la conexión a una red wifi y, a través de esta, a Internet.

•    WiFiClient. Representa un cliente web.

•    WiFiServer. Representa un servidor web.

Toda la documentación sobre esta librería se encuentra en https://www.arduino.cc/reference/en/libraries/wifi/.

Veamos en detalle los métodos que proporciona cada una de estas clases.

Como se acaba de comentar, la clase WiFi conecta el ESP8266 a una red wifi. Para ello, dispone de una serie de métodos, entre los que destacan:

•    begin(SSID, contraseña). Inicia el proceso de conexión a la red wifi cuyo SSID y contraseña se pasan como argumentos.

•    status(). Devuelve un código que indica el estado del proceso. Si este fuera el número 3 (valor de la constante WL_CONNECTED), significaría que la conexión se ha realizado con éxito.

Si recuerdan, las comunicaciones web están basadas en un modelo de petición/respuesta, donde un cliente realiza una petición a un servidor que devuelve una respuesta. Ambos roles quedan reflejados en las dos clases principales de la librería ESP8266WiFi: WiFiClient y WiFiServer.

Los métodos de la clase WiFiClient son los siguientes:

•    connect(servidor, puerto). Conecta el cliente a un servidor por un puerto determinado. El servidor puede ser una dirección IP o una URL. El valor de retorno indica éxito (true) o fracaso (false).

•    connected(). Devuelve el valor true si el cliente está conectado a un servidor y false en caso contrario.

•    available(). Su resultado es el número de bytes pendientes de leer, es decir, la cantidad de datos que el servidor ha devuelto como respuesta al cliente.

•    read(). Lee el siguiente byte recibido del servidor web.

•    readStringUntil(carácter terminador). Retorna la cadena de caracteres pendientes de leer hasta encontrar el que se le pasa como argumento.

•    write(datos). Envía al servidor los datos pasados como argumento, que pueden ser de tipo byte o char.

•    print(datos) o println(datos). Asimismo, envía al servidor los datos pasados como argumento, que en este caso son de tipo char, byte, int, long o string. También pueden ser números (int o long), aunque se transmitirían como una secuencia de caracteres ASCII que representan cada uno de los dígitos que lo componen (por ejemplo, el número 123 se enviaría como tres caracteres: ‘1’, ‘2’, ‘3’). Además, dichos caracteres irían seguidos de un retorno de carro (CR, carácter ASCII ‘\r’) y un salto de línea (LF, carácter ASCII ‘\n’).

•    flush(). Desecha los datos recibidos del servidor que aún no hayan sido leídos.

•    stop(). Desconecta el cliente del servidor.

El término CRLF se refiere a la combinación de los dos códigos de control: CR (retorno de carro) y LF (salto de línea).

Los métodos de la clase WiFiServer son estos otros:

•    WifiServer(puerto). Crea un servidor web que permanece a la escucha de conexiones entrantes por el puerto pasado como argumento.

•    begin(). Le indica al servidor que comience a escuchar conexiones entrantes.

•    available(). El resultado de este método es el de un cliente conectado al servidor con datos pendientes de su lectura. Si no hubiera ninguno, devolvería null.

•    write(datos). Envía datos a todos los clientes conectados, que pueden ser de tipo byte o char.

•    print(datos) o println(datos). Al igual que el método anterior, envía datos a todos los clientes que tenga conectados, pero en esta ocasión pueden ser de tipo char, byte, int, long o string. Además, los números se enviarían como una secuencia de caracteres ASCII seguidos de un retorno de carro y un salto de línea.

Una vez conocida la teoría, en las siguientes secciones llevará a la práctica todos estos conceptos desarrollando un cliente y un servidor web sencillos.

2.2.2 Prácticas

Una vez que tienen configurado el IDE de Arduino para la programación del ESP-01, conocen la operativa para hacerlo y la librería que les permite realizar las comunicaciones HTTP, ya están en condiciones de crear los dos elementos fundamentales de dicha comunicación: un cliente y un servidor web. En ambos casos, antes deberán establecer la conexión a una red wifi (objeto de la siguiente práctica).

2.2.2.1Conexión a la red wifi

Este primer ejercicio es fundamental para proseguir con el resto de los descritos a continuación, ya que enseña la forma de conectar un ESP-01 a una red wifi. Será un paso previo a cualquier tipo de comunicación web, por lo que este código estará presente en casi todos los sketches que ejecuten un cliente o un servidor web.

Su código es el siguiente:

Los tiempos de compilación y carga de programas en el ESP-01 son más altos que los de Arduino.

En primer lugar, se importa la librería utilizada para la gestión de la conexión con la red wifi y las comunicaciones web.

#include <ESP8266WiFi.h>

Luego, se declaran las constantes que contienen el SSID y la contraseña de la red wifi a la que se va a conectar el ESP-01.

No se olviden de actualizar los valores de dichas constantes con el nombre y la contraseña de su red wifi.

En el bloque setup() se inicia el proceso de conexión mediante el método begin(), cuyos argumentos son el nombre y la contraseña de dicha red.

WiFi.begin(ssid, password);

Como este proceso puede tardar algunos segundos, se consulta su estado cada medio segundo dentro de un bucle while. Recuerden que, una vez establecida la conexión, el método status() devuelve el valor de la constante WL_CONNECTED.

Después de cargar el sketch en el ESP-01, no desconecten el FTDI ni el cable USB del ordenador para ver los mensajes del proceso de conexión en el monitor serie. Lo único que tienen que hacer es:

1.   Quitar la alimentación del ESP-01.

2.   Desconectar el GPIO0 de GND.

3.   Abrir el monitor serie.

4.   Alimentar de nuevo el ESP-01.

Obtendrán un resultado similar al que se muestra a continuación:

2.2.2.2Cliente web

En este segundo ejercicio desarrollarán un cliente web que accederá se llama en la condición de una sentencia if con el fin de que la petición solo se realice en ese caso. cada 10 segundos a la página de búsqueda de Google y exhibirá su código HTML en el monitor serie.

Su código es el siguiente:

Lo primero que se hace es importar la librería ESP8266WiFi y declarar las constantes con el nombre de la red wifi y su contraseña.

La siguiente constante contiene la URL del servidor web a la que se van a enviar las peticiones, en concreto, “www.google.com”.

A continuación, se declara la variable que contiene el cliente que realizará dichas peticiones (clienteWeb) como un objeto de la clase WiFiClient.

WiFiClient clienteWeb;

En el bloque setup() se establece la conexión con la red wifi. El código es el mismo de la práctica anterior, por lo que no requiere explicaciones adicionales.

En el bloque loop() se accede al servidor web de Google con el método connect(), cuyos argumentos son su URL y el puerto estándar (80). Puesto que este método devuelve el valor true una vez efectuada la conexión, se llama en la condición de una sentencia if con el fin de que la petición solo se realice en ese caso

Por lo tanto, una vez cumplida la condición, se compone y se envía el mensaje de petición HTTP al servidor con el método print() del objeto clienteWeb.

La comunicación entre el cliente y el servidor se lleva a cabo mediante mensajes HTTP cuya estructura estudiará más adelante.

Una vez realizada la petición, ya solo queda esperar la respuesta, que será una página HTML. Eso se hace mediante un bucle while, en cuya condición se verifica que la conexión siga establecida con el método connected(). De ser así, se llamaría al método available() en la condición de una sentencia if para saber si el servidor ha respondido a la petición.

Si se cumpliera esta última condición, se leería la respuesta carácter a carácter (en realidad, byte a byte) y se mostraría en el monitor serie.

Serial.write(caracter);

La última sentencia repite este proceso cada 10 segundos.

delay(10000);

Antes de cargar el sketch, asegúrense de que el GPIO0 esté conectado a GND. Después de cargarlo, desconecten el ESP-01 de la alimentación y el pin GPIO0 de GND. Luego, vuelvan a encender el ESP-01 y abran el monitor serie, donde verán el siguiente resultado:

Al igual que en la práctica anterior, no desconecten el FTDI ni el cable USB. De lo contrario, no aparecería nada en el monitor serie.

Para comprobar que se trata del código HTML de la página de Google, accedan a ella desde el navegador (por ejemplo, Chrome o Edge), pulsen con el botón derecho en una zona donde no haya texto ni imágenes y seleccionen la opción “Ver código fuente de la página” del menú desplegable.

Se abrirá otra pestaña cuyo contenido debe coincidir con el mostrado en el monitor serie.

2.2.2.3Servidor web

En la sección anterior desarrollaron un cliente web que se conectaba a un servidor. Ahora se situarán en el lado opuesto de la comunicación y crearán un servidor web al que se pueda acceder desde cualquier cliente. Dicho servidor dará servicio dentro de una red wifi en la dirección IP 192.168.1.99, por lo que podrán acceder a él escribiéndola en la barra de direcciones del navegador.

La dirección IP utilizada solo tiene sentido dentro de la red wifi en la que está conectado el ESP-01. Por eso, el navegador deberá ejecutarse en un ordenador o teléfono móvil previamente conectado a la misma red.

Al acceder al servidor, este devolverá una página web cuyo código HTML es el siguiente:

Dicho código será interpretado por el navegador web, que mostrará este resultado: