ESP8266 y NodeMCU: la nueva generación de sistemas embebidos

1
2621
GARD Pro Not Registered

La tendencia actual a la programación de microcontroladores se esta moviendo hacia el área del Internet of Things (IoT). Esto quiere decir que nuestros dispositivos deben de ser capaces de conectarse para poder utilizar las últimas librerías y ambientes de trabajo. En este post nos centraremos en una línea específica de dispositivos capaces de hacer esto: NodeMCU.

Los dispositivos utilizados comúnmente de la línea de Arduino no tienen conectividad a Internet. Sus últimos modelos han sido introducidos con este enfoque en mente, pero es difícil de vencer a un chip de tan bajo costo y mejores velocidades de procesamiento (en muchos casos) como es el ESP8266. Anteriormente se ha publicado sobre este dispositivo, específicamente sobre el ESP01.

En esta entrada conoceremos algunos de los nuevos dispositivos que han salido al mercado y que nos permiten conectarnos a Internet de forma nativa a través de WiFi. Se trata de placas de desarrollo similares a Arduino, programables en lenguaje Arduino y con WiFi embebido. Nos centraremos en la programación de estos microcontroladores por medio de la interfaz de Arduino IDE.

Una nueva generación de sistemas embebidos

En meses recientes el mercado se ha visto plagado por una infinidad de nuevos modelos y marcas de placas de desarrollo similares al Arduino. No me refiero a los Arduinos clonados, que son una simple copia de los modelos originales. Me refiero a placas basadas en los mismos microcontroladores que el Arduino, pero con capacidades nativas integradas tales como conectividad Bluetooth y/o WiFi.

Existe una línea open-source de placas de desarrolladores llamada NodeMCU. En el mercado podemos encontrar diferentes modelos de estas nuevas placas basadas en el ESP8266. Estos varían en su memoria interna y en la cantidad de pines de entrada/salida disponibles. En el caso del NodeMCU, esta placa fue diseñada principalmente para trabajar con Lua, aunque es posible utilizarla con Micropython o con Arduino.

esp8266
Izquierda a derecha: ESP01, ESP12F, NodeMCU 1.0 (Amica), NodeMCU 1.0 Lolin

En la imagen anterior tenemos dos versiones de estas placas NodeMCU: Amica y Lolin. La versión de Lolin no es una versión oficial de NodeMCU, pero fue diseñada como una mejora a la placa desarrollada por Amica. Esto es subjetivo, debido a que la única mejora es la presencia de un pin extra de 5V (antes de entrar al regulador de voltaje). Sin embargo posee la desventaja de que su tamaño es mucho mayor. No es posible utilizar esta versión en un breadboard sencillo (debido a que no tiene columnas sobrantes a los lados para hacer conexiones).

GARD Pro Not Registered
Especificaciones técnicas de NodeMCU 1.0 (Amica/Lolin)

Están basados en el ESP12E, el cual es una variante del ESP8266.

  • Voltaje de entrada (USB): 5V
  • Voltaje de salida en los pines: 3.3V
  • Voltaje de referencia en el ADC: 3.3V
  • Corriente nominal por pin: 12mA
  • Frecuencia de procesador: 80MHz (160MHz max.)
  • 4MB Flash
  • Consumo de corriente en stand-by @80MHz: 80mA
  • Consumo de corriente al recibir una peticion (librería WebServer en modo de punto de acceso) @ 80MHz: 90mA
  • Consumo de corriente al utilizar HTTPClient.get() @ 80 MHz: 100-110mA
  • Consumo de corriente en stand-by @160MHz: 90mA
  • Consumo de corriente al recibir una peticion (librería WebServer en modo de punto de acceso) @ 160MHz: 90-100mA
  • Consumo de corriente al utilizar HTTPClient.get() @ 160 MHz: 100-110mA
    NodeMCU
    Pinaje de NodeMCU 1.0 Amica

    NodeMCU
    Pinaje de NodeMCU 1.0 Lolin
Lenguajes de programación

Para los ejemplos de este post, utilizaremos el lenguaje Arduino y el Arduino IDE. Como sabemos, el lenguaje Arduino es una plataforma con la que puedes compartir código entre diferentes placas y posee una gran cantidad de de librerías existentes. Las otras plataformas (Micropython y Lua) tienen sus ventajas y desventajas. Una de sus grandes deficiencias que podemos mencionar es que no son estables (especialmente Lua) y que son lenguajes interpretados. Esto quiere decir que procesan el código un poco más lento que las contrapartes en Arduino.

Integración con el lenguaje Arduino

Agregar la placas al Arduino IDE

El Arduino IDE es un entorno de desarrollo que ha ido evolucionando a través del tiempo hasta convertirse en una excelente opción para escribir código. Hoy día es posible contar con herramientas de gestión de repositorios, similares a Maven, Composer, etc. Para programar las placas de las que hemos estado escribiendo necesitaremos agregar un repositorio a nuestro Arduino IDE.

Abrimos la interfaz de Arduino y seleccionamos Archivo>Preferencias. En la lista de URLs de placas adicionales, agregamos la siguiente:

Repositorio
Agregar nuevo repositorio

GARD Pro Not Registered

Con esta configuración tendremos acceso a diferentes recursos de código que han sido desarrollados por otras personas y nos facilitarán el cumplimiento de los objetivos propuestos.

Instalación de paquetes

Vamos a Herramientas>Placas>Administrador de Placas y buscar el paquete “esp8266”. Lo instalamos.

Seleccionar Board Manager

Instalar paquete que contiene al controlador de NodeMCU
Instalar paquete “esp8266”

Con este paso estamos listos para empezar a programar la placa.

Subiendo códigos de prueba

Luego de instalar el paquete, reiniciamos el ambiente de desarrollo de Arduino y seleccionamos el puerto correcto de nuestro ESP en Herramientas > Puerto. Ahora hay que seleccionar el modelo de nuestro dispositivo en Herramientas > Placa.

En mi caso estoy utilizando un NodeMCU 1.0. Solo necesito seleccionar la placa y las opciones para la carga del código se ajustan automáticamente. Si tienes algún otro módulo deberás buscar cuales son las opciones óptimas (dependiendo del tamaño máximo de almacenamiento del dispositivo).

Luego solo debemos subir este código y comprobar mediante el monitor serie que se esta imprimiendo la frase “Estoy vivo”.

Código de prueba de punto de acceso
Circuito #1
Circuito #1

Armamos el pequeño circuito, y subimos el siguiente código:

El código anterior nos permite iniciar un punto de acceso,  y además de eso escuchar peticiones a través de la red. Cuando nos conectamos a este punto de acceso, debemos acceder al siguiente URL desde cualquier navegador:

Ahora el LED se encenderá. Cada vez que refresquemos la página el LED cambiará de estado.

Notas sobre placas basadas en la línea NodeMCU
  • Los números de pines de están mal ordenados en la placa impresa. Esto fue corregido por medio de software, y los pines deben de tener el prefijo “D” (si es digital). Ejemplo: Si deseamos encender el pin digital 2:
  • Estas placas cuentan con un divisor de voltaje interno en el convertidor de señales análogas a digitales , por lo cual el voltaje máximo (para tener una lectura de 1023) es de 3.3V.
Notas generales
  • Los pines de salida tienen protecciones hasta 5V. Luego de aquí es posible que la placa sufra daños.
  • El convertidor de señales analógicas a digitales tiene un voltaje de referencia de 1V.

Esperamos que la información compartida sea de utilidad para ustedes. Saludos.

GARD Pro Not Registered

 

  • Kiev Mendoza

    Muy Util, Gracias!