Está en la página 1de 34

MÁSTER EN

INTERNET DE LAS COSAS


MÓDULO C
SYSTEM ON A CHIP – Dispositivos IoT con ESP8266

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción

SoC ESP-8266

SoC ESP-32

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción – Características técnicas
CARACTERÍSTICA ESP8266 ESP32 ARDUINO
Espressif mejora al Atmega (Arduino) en: Procesador Tensilica LX106 Tensilica Xtensa X36 ATmega
Nº bits 32 bits 8 bits
 Mayor velocidad del reloj
Nº núcleos Single core Dual core Single core
 Procesador de 32 bits Velocidad 80Mhz (hasta 160 Mhz) 160 MHz (hasta 240 MHz) 16 MHz
 Mayor memoria para programa y RAM SRAM 160 kB 512 kB 2 kB
SPI FLASH Hasta 16MiB 32 kB
 Conectividad WiFi o Bluetooth Alimentación 3.0 a 3.6V 2.2 a 3.6V 5V
 Orientado al IoT Consumo de corriente 80 mA (promedio), 225 mA (máximo) 8 mA (prom.), 40 mA (máx.)
Consumo en deep-sleep 20 uA 12.5 uA 6 mA
 Soft Sleep y Deep Sleep
Consumo en low-power No Inferior a 150 uA No
Wifi 802.11 b/g/n (hasta +20 dBm) WEP, WPA No
Bluetooth No v4.2 BR/EDR + BLE No
GPIO (utilizables) 17 36 14
Hardware / Software PWM No / 8 1 / 16 No / 7
ADC 1 (10 bits) 18 (12 bits) 6
ADC con preamplificador No Sí (bajo ruido 60 dB) No
DAC No 2 (8 bits) No

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción – Ejemplos comerciales
SoC ESP-8266

SoC ESP-32

Los + usados y fáciles de encontrar son:


ESP-12E y ESP-WROOM-32 iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción – Familia de módulos
Espressif fabrica dos familias:
• ESP-8266
• ESP-32

En cada familia hay multitud de modelos, pero:


• El SoC siempre es el mismo
• Principalmente cambia el layout
• Número de pines del SoC accesibles
• Puede tener mayor o menos FLASH
• Forma de la antena

*En 2019 Espressif lanzó al mercado una variación del ESP32 llamada ESP32-S2, con mejoras en la
seguridad, un solo núcleo (pero más rápido y eficiente), un núcleo ULP mejorado y características
mejoradas orientadas al IoT como Time of Fligh y la posibilidad de tener activo el WIFI en Low-power
Mode. FUENTE
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción – Placas de desarrollo
Los módulos anteriores no pueden ser usados fácilmente para
desarrollar una aplicación rápida, ya que no disponen de:
• Regulador de tensión (ej. AMS1117)
• Chip USB-UART (ej. CP2102 o CH340)
• Botones físicos
• Electrónica pasiva (filtros)
• Indicadores LED
• Pines conectables a protoboard

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Introducción – Placas de desarrollo

La llamada v0.9 usa un módulo de menores


características y es más ancha debido al CH430,
pero es muy común en las tiendas online.
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Preparación del IDE
Para disponer de las placas en el entorno de ARDUINO IDE ir a:
Archivo -> Preferencias -> Gestor de URLs adicional, e introducir las URL para instalar ESP-8266 y ESP32
https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

Herramientas -> Placa -> Gestor de tarjetas. Buscar e instalar “esp8266” y “esp32”

Finalmente basta con seleccionar la placa que interese. En nuestro caso ESP8266 – NodeMCU 1.0

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 1 – Blinking a LED
Este ejemplo sirve para comprobar rápidamente que nuestro módulo funciona.
define que el pin, al que está conectado el LED interno, va a ser de salida
cambia el estado de la salida.

El LED es de lógica inversa:


pin LOW = encendido
pin HIGH = apagado

Otra manera de encender y apagar un led, en una sola línea es la siguiente:


Significa “cambia ESTE LED, al ESTADO contrario que tenga el LED”. Niega el estado con ‘ ! ‘

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 2 – Conectividad WiFi
Este ejemplo sirve de base para los siguientes:
Existen dos métodos para realizar una conexión WIFI:
• Simple: conecta a un único punto de acceso (AP).

• Mejorado: permite conectar a uno o más AP, es un método con algunas líneas más de código pero más rápido y moderno.

Usaremos el wifiMulti para el siguiente ejemplo:

Empezamos el programa incluyendo la librería que nos sirve las funciones.

Creando el objeto “wifiMulti” para ejecutar las órdenes al wifi.

Y definiendo la lista de WIFIs a los que nos queremos conectar.


* Dejaremos las comillas vacías si no queremos incluir alguna.

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 2 – Conectividad WiFi
A continuación el SETUP()
1 - Comunica por puerto serie los mensajes.
1

2 - Añade los nombres y contraseñas de WIFIs


conocidos. 2

3 - Intenta la conexión y atrapa al código en un


bucle hasta que la conexión sea OK.
Si pasan 15s. y no se ha conectado, reinicia. 3

4 - Finalmente nos comunica por el puerto serie


la IP que le ha sido asignada por el router. 4

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 2 – Conectividad WiFi
A continuación el LOOP()
Comprobamos de manera repetitiva si seguimos conectados:
1 - Si NO estamos conectados, intenta reconectar.

1
2 - Si estamos conectados, no hace nada.

2
3 - Finalmente espera 2s. Con un
3

De esta manera, seremos capaces de conectarnos a multiples AP, mover nuestro


prototipo y permitirle conectarse a diferentes AP según vaya desplazándose.

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
PRINCIPIO BÁSICO:
• Es un programa que está pendiente de las peticiones que llegan a través del puerto 80, que suelen
ser las que produce un cliente a través del navegador.
Admite WebSockets
• Analiza esa petición, si corresponde con una URL conocida, ejecuta una subrutina, que hará unas para actualizar
información sin
acciones y entregará una cadena de texto que será con el código fuente HTML de la página web.
refrescar la web
• El navegador del cliente interpreta el código fuente HTML recibido y muestra la página web

El pequeño servidor web alojado en un ESP-8266 / ESP-32


hace lo siguiente:
SETUP: Configura las URL a las que va a responder e
inicia el programa.

LOOP: Continuamente revisa si existen peticiones,


si las hay, ejecutará las respuestas.
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
En este ejemplo haremos lo siguiente:
• Conectarnos al WIFI con el método wifiMulti.
• Crear un servidor web.
• Mostrar una página con el uptime del ESP-8266.
• Alternan un LED cada vez que se solicite la web.
Iniciamos el programa con las cabeceras necesarias:

Usaremos la librería del WifiMulti y la del WebServer

Crearemos el objeto “wifiMulti” para ejecutar las órdenes al wifi.


Y el objeto para gestionar las peticiones web a través del puerto 80.

Y definiendo la lista de WIFIs a los que nos queremos conectar


* Dejaremos las comillas vacías si no queremos incluir alguna .

Finalmente se define con el nombre “led” al pin LED_BUILTIN, que es el de la placa.

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
A continuación el SETUP() 1
1 - Comunica por puerto serie los mensajes. 2
2 - Define el uso de un pin como salida y le da el estado.
3
3 - Llama a dos subrutinas:
4
prepara el WIFI de la manera que se vio
en el ejemplo anterior. Se podría haber metido todo el código directamente.
Hacerlo llamando a subrutinas ayuda a mantener el código
prepara las peticiones del Servidor Web limpio y ordenador y poder depurar de un vistazo.

4 - Finalmente nos comunica por el puerto serie que ha terminado con el SETUP.

A continuación el LOOP() (Este ejemplo demuestra que el loop() no tiene porque tener todo)
1 - Se encarga de mantener conectado el WIFI.
1
2 - Se encarga de gestionar las peticiones Web de
2
los clientes.
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
A continuación el setupWebServer()
1
1 - Comunica por puerto serie los mensajes.
2
2 - Define las respuestas del servidor para:
“/” -> ejecuta la subrutina 3

“/prueba” -> responde directamente 4


3 - Define las respuestas del servidor cuando se solicite
una URL desconocida. El típico “Error 404 Not Found”
4 - Finalmente activa el servidor web con esa configuración.
Solicitud: “/” “prueba” URL desconocida

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
A continuación el handleRoot() 1
Esta subrutina solo se ejecutará cuando alguien solicite al 2
servidor web la URL “/”
1 - Alterna el estado de un pin.
2 - Toma el y lo convierte a horas, minutos y segundos.
3 - La instrucción es una instrucción de C++.
Permite intercalar los valores de las variables fácilmente. 3
4 - Finalmente envía al cliente aquello que se haya preparado.

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 3 – Web Server
Una vez compilado y subido veremos por el puerto serie lo siguiente:
• A qué Wifi se conecta
• Qué IP le ha sido asignada
• Cómo prepara el Servidor Web
• Y cuándo ha finalizado el inicio.

En ese momento podremos solicitar a la IP las URL y veremos que al hacerlo, alterna el LED incorporado en la placa:

“/” “/prueba” URL desconocida LED

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
1
Ejemplo 4 – Sensor DHT11 + Web
En este ejemplo haremos lo siguiente:
• Conectarnos al WIFI con el método wifiMulti.
• Crear un servidor web.
• Mostrar una página web con la temperatura y
1
humedad que capte un sensor DHT11.

2
Iniciamos el programa con las cabeceras necesarias:
1 - Librerías necesarias.
2 - Objetos que gestionan el Wifi y el WebServer Para este ejemplo es necesario instalar
una librería externa y su dependencia.
3 - Definiciones 3 Programa -> Incluir Librería ->
4 - El objeto que gestiona las funciones del DHT11 Administrar biblioteca

y las dos variables globales que nos ayudan


a disponer de los datos.
4
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 4 – Sensor DHT11 + Web
A continuación el SETUP()
1 - Comunica por puerto serie los mensajes. 1
Define el uso de un pin como salida y le da el estado.
Llama a dos subrutinas para preparar el WIFI y el WebServer.
2
2 - Inicia la comunicación con el sensor.
Los parámetros del sensor se definieron en la cabecera del programa.

A continuación el setupWebServer()
1 - Solo responderemos a la página web raíz. Y cuando lo hagamos, 1
procesaremos la función que leerá el DHT11.
No lo hacemos en el loop() porque si nadie nos lo solicita, no perdemos recursos.

A continuación el LOOP() (Este ejemplo demuestra que el loop() no tiene porque tener todo)
1 - Se encarga de mantener conectado el WIFI.
2 - Se encarga de gestionar las peticiones Web de
1
2
los clientes. iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 4 – Sensor DHT11 + Web 1

A continuación el SETUP()
1 - Toma la temperatura y humedad y las guarda en las variables. 2

2 - Esto es un filtro por si no consigue leer el sensor


La función devuelve “NaN” en caso de error, así que filtramos
ese caso para detectar errores y tomar acciones.

3
3 - Construimos la página web, concatenando las partes de la
página web y añadiendo las variables en el momento que
nos interesa.

4 - Finalmente mandamos toda la página al cliente.


Quita los decimales: Float -> Integer -> String
4

Float -> String iot.usal.es


DISPOSITIVOS IOT CON ESP8266
Ejemplo 4 – Sensor DHT11 + Web
Una vez compilado y subido veremos por el puerto serie lo siguiente:
• A qué Wifi se conecta
• Qué IP le ha sido asignada
• Cómo prepara el Servidor Web
• Y cuándo ha finalizado el inicio.

En ese momento podremos solicitar a la IP la URL “/”


y veremos que al hacerlo, alterna el LED incorporado en la placa
y se nos muestra la página web con la información sobre el DHT11:

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

ESQUEMA GENERAL

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web 1

En este ejemplo haremos lo siguiente:


• Conectarnos al WIFI con el método wifiMulti.
• Enviar a ThingsBoard un dato integer y otro float. 2

Iniciamos el programa con las cabeceras necesarias:


1 - Librerías necesarias:
PubSubClient: permite crear un cliente MQTT.
ArduinoJson: permite tratar datos JSON fácilmente. (opcional en ej.). 3
2 - Objetos que gestionan el Wifi y el cliente MQTT:
El objeto mqtt no puede comunicar a través de internet por si solo.
Utiliza la comunicación que se crea con el wifiClient.
3 - Definiciones sobre los puntos de acceso y un led. 4
4 - Variables que usaremos para controlar cada cuánto tiempo se
ejecutan ciertas tareas. 5
5 - Definiciones necesarias para conectar con ThingsBoard. URL y token del usuario.
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web
1
A continuación el SETUP():
1 - Abrir comunicaciones serie y definir un pin del led interno de la placa NodeMCU. 2
2 - Subrutinas, en la primera conectaremos al WIFI y en la segunda al bróker MQTT.

A continuación el LOOP():
1
1 - En cada ciclo comprobamos si seguimos conectados al WIFI y
ejecutaremos el bucle del MQTT, para sus tareas internas. Oblig. 2
2 - Este IF es el encargado de que solo se ejecute el código encerrado
en él una vez por segundo. La variable t_ciclo se actualiza cada
3
vez que se ejecuta y sirve para comprobar que haya pasado el
tiempo deseado.
3 - Si el MQTT está conectado, mandamos los datos por MQTT. 4
4 - Si no está conectado el MQTT, llama a su subrutina para reconectar.

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web
Y finalmente las funciones propias del MQTT: 1
2
A continuación el setup_MQTT(): 3
1 - Se asigna el servidor en el que se encuentra el bróker MQTT.
2 - Se define qué subrutina se ejecutará cuando se reciba un mensaje del bróker MQTT.
3 - Y finalmente realiza la conexión con el bróker MQTT.

A continuación el MQTT_Reconect(): 1
Solo será llamada desde el setup() o si el MQTT se ha desconectado.
1 - Este IF comprueba que se ejecute el código encerrado en él 2
solo una vez cada 5seg. Si no, lo salta, no bloqueante.
3
2 - Preparamos una ID única con la que nos identificaremos al bróker.
3 - Intenta la conexión al bróker que se definió en setup_MQTT():
4
mqtt
Y si ha conseguido conectar, se suscribe a ese topic.
4 - Si no conecta, nos muestra el código de error. iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web
Y finalmente las funciones propias del MQTT:
Y finalmente callback_MQTT():
Esta función se ejecutará cuando se reciba un mensaje desde el bróker.
Los argumentos que nos ofrece son:
1
• El topic desde el que se ha recibido
• El mensaje
2
• La longitud del mensaje
La manera de tratar el dato es la siguiente
3
1 - Un bucle For recorre el mensaje, desde cero hasta la longitud
del mensaje, que tiene forma de array de bytes y lo convierte
caracter a caracter de la siguiente manera: Byte -> Char -> String
2 - Una vez con forma de String, es fácilmente tratable, en este caso
se imprime por el puerto serie. Pero podría tratarse de un JSON.
3 - Si el primer carácter es un “1”, se alterna el estado de un led.
iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web

iot.usal.es
DISPOSITIVOS IOT CON ESP8266
Ejemplo 5 – Sensor DHT11 + Web
Lo que veríamos por el puerto serie es lo siguiente:
Se enviará un mensaje una vez por segundo el loop().

En la web, veremos lo siguiente.

iot.usal.es
iot.usal.es

También podría gustarte