esp8266-nodemcu

NodeMCU, la popular placa de desarrollo con ESP8266

Continuamos avanzando con los tutoriales del SOC ESP8266. En esta entrada vamos a ver nuestra primera placa de desarrollos basada en el ESP8266, de las múltiples disponibles. Como no podía ser de otra forma, vamos a empezar por la archiconocida NodeMCU.

NodeMCU es una placa de desarrollo en el ESP12E el cuál, como vimos en esta entrada, es probablemente el módulo más popular que integra el SoC ESP8266. Sin embargo, pese a la popularidad de las placas NodeMCU, también existe mucha confusión respecto a la terminología (Lua, Lolin, versiones) y, en ocasiones, se mezclan o incluso se usan como sinónimos.

Tened en cuenta que, a diferencia de Arduino donde hay una compañía que pone un cierto orden en los diseños y modelos disponibles, las placas de desarrollo basadas en ESP8266 han evolucionado un poco a saltos y de la mano de distintos fabricantes.

La cosa se complica más aún si leemos las descripciones de algunos vendedores, que mezclan conceptos y contribuyen a generar aún más confusión.

Así que vamos a intentar profundizar y poner un poco de orden alrededor del NodeMCU, una de las placas de desarrollo basadas en ESP8266 más populares y uno de los pilares fundamentales en los que se ha basado el ecosistema del ESP8266 durante su evolución.

¿Qué es NodeMCU?

NodeMCU es un nombre que recoge tanto un firmware Open Source y como a una placa de desarrollo basados en el ESP8266.

En principio el nombre NodeMCU se refería principalmente al firmware. Actualmente esto se ha invertido y cuando hablamos de NodeMCU normalmente nos referimos a la placa de desarrollo.

nodemcu

El firmware NodeMCU fue creado poco después de aparecer el ESP8266, el 30 de diciembre de 2013. Unos meses después, en octubre de 2014 se publicó la primera versión del firmware NodeMCU en Github. Dos meses más tarde se publicaba la primera placa de desarrollo NodeMCU, denominada devkit v0.9, siendo también Open Hardware.

Recordemos que en esos primeros momentos del ESP8266 apenas había información y la poca que había era confusa. La mayoría del interés de la comunidad se limitaba al ESP01, que se consideraba más un módulo Wifi barato para procesadores como Arduino que una placa de desarrollo independiente.

El firmware NodeMCU podía grabarse en un ESP8266, tras lo cual podíamos programarlo con el lenguaje script Lua. La programación el Lua permitía la conexión y programación del ESP8266 de una forma mucho más sencilla que las herramientas oficiales proporcionadas por Espressif.

esp8266-lua

Lua es un lenguaje de programación imperativo y estructurado, creado en 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo y Waldemar Celes. Está basado en C y Perl, y está diseñado para ser muy ligero. Ha sido implementado en una gran variedad de dispositivos embebidos, desde videoconsolas a robots industriales. La página oficial es https://www.lua.org/.

Con el paso del tiempo y la aparición de otras alternativas para programar ESP8266, como (especialmente) con C++ con el entorno del Arduino y otras como MicroPython, el interés en Lua ha disminuido considerablemente.

A pesar de que la programación en Lua tenía aspectos interesantes, no es un lenguaje tan extendido como C++ y Python. Además, nunca consiguieron hacerlo totalmente estable en el ESP8266. Por otro lado, al ser un lenguaje interpretado (en lugar de compilado) el rendimiento y aprovechamiento de los recursos es inferior.

En 2015 el equipo de desarrollo original dejo de mantener el firmware de NodeMCU. Aunque sigue siendo mantenido por una comunidad de desarrolladores el interés en el firmware ha caído casi por completo. Por este motivo, actualmente nos referimos con NodeMCU más a la placa de desarrollo que al firmware.

No obstante, aunque actualmente el firmware haya caído un poco en el olvido, no hay que olvidar la contribución que el proyecto NodeMCU, tanto firmware como placa de desarrollo, han supuesto para la proliferación e implantación del ESP826.

Placa de desarrollo NodeMCU

Ahora que hemos visto un poco de historia y el origen de NodeMCU tanto como firmware como placa de desarrollo, toca meternos de lleno en harina y ver lo que nos interesa actualmente, que es NodeMCU como placa de desarrollo.

Básicamente, la placa de desarrollo NodeMCU está basada en el ESP12E y expone las funcionalidades y capacidad del mismo. Pero, además, añade las siguientes ventajas propias de placas de desarrollo:

  • Puerto micro USB y conversor Serie-USB
  • Programación sencilla a través del Micro-USB
  • Alimentación a través del USB
  • Terminales (pines) para facilitar la conexión
  • LED y botón de reset integrados

No vamos a entrar en los detalles de hardware del ESP12E porque los vimos de forma intensiva en su propia entrada y son comunes a todas las placas de desarrollo basadas en el ESP12E (y tampoco tiene sentido que lo repita en cada placa de desarrollo que veamos).

Si queréis podéis consultar detalles del hardware del ESP12E (pines GPIO, salidas y entradas analógicas, comunicación), que son directamente compartidos con los del NodeMCU, podéis consultar la entrada sobre el ESP12E.

En esta nos centraremos en los aspectos propios de la placa NodeMCU más allá de las “heredadas por montar un ESP12E. Como decíamos en la introducción, todo lo relacionado con NodeMCU puede llegar a ser confuso porque existe más de un fabricante y cada uno tiene sus propios criterios.

Para colmo, los vendedores chinos de AliExpress o eBay redactan las descripciones de sus artículos como si les pagaran por palabra, mezclando todo y haciéndolo innecesariamente complicado.

Por resumir, tenemos tres principales fabricantes de NodeMCU, Amica, Lolin/Wemos y DOIT/SmartArduino. Las placas son muy similares (o incluso idénticas), aunque pueden tener alguna diferencia de designación de los pines.

Por otro lado, tenemos tres versiones de la placa NodeMCU, que veremos a continuación. Las designaciones de las versiones no lo hacen peor ni queriendo también contribuyen a generar confusión. Pero, aunque parece un poco complicado, en realidad es sencillo si sigues la evolución desde el principio.

Primera generación v0.9

La versión original del NodeMCU se denominó devkit v0.9, y montaba un ESP12 junto a 4MB de flash (recordemos que la memoria en el ESP8266 es externa y se conecta por SPI). El ESP12 es similar al ESP12E, pero carece de una hilera de pines por lo que dispone de menos GPIO.

esp8266-esp12-esp12e

La versión 0.9 era fea (bueno, para gustos), amarilla-anaranjada y muy ancha. Con unas dimensiones de 47x21mm ocupaba 10 hileras de pins de una placa breadboard, por lo que la tapa por completo. Esto la hacía muy poco práctica de usar porque no deja pines libres en la breadboard para realizar conexiones.

esp8266-nodemcu-v09

No vamos a dedicarle más tiempo a esta placa porque es una versión obsoletay ni siquiera vamos a poder comprarla. Pero que sepáis que fue la NodeMCU original y que todo empieza por aquí.

Segunda generación v1.0 / V2

La siguiente versión del NodeMCU es la v1.0 V2. De forma resumida Amica, una compañía creada por el alemán Gerwin Janssen, fabricó su propia versión mejorada de la v0.9. Al equipo original de NodeMCU le gustó y la declararon versión “oficial” de NodeMCU.

esp8266-nodemcu-v2

La principal diferencia de la versión v1.0 v2 es que monta un ESP12E en lugar de un ESP12, por lo que tiene más pines disponibles que el modelo original. Además, es más estrecha que la versión 0.9, tapando sólo 8 hileras de una breadboard. Esto deja una hilera adicional a cada lado para realizar conexiones.

esp8266-nodemcu-dev-kit-v2-pins

Los tres fabricantes, Amica, Lolin/Wemos y DOIT/SmartArduino fabrican, o han fabricado en algún momento, esta versión v1.0 V2.

Como el equipo de NodeMCU designo la versión de Amica como “oficial”, en ocasiones se dice que Amica es el distribuidor oficial de NodeMCU. No es así ya que es Open Hardware, y cualquier fabricante es tan válido como los demás.

Tercera generación v1.0 / V3

Llegamos a lo que a veces se denomina “tercera generación”, la versión 1.0 V3. Básicamente el fabricante Lolin/Wemos decidió crear su propio diseño “mejorado” con unos cuantos cambios menores.

esp8266-nodemcu-v3

El cambio principal es que la V3 monta un conversor serial CH340G en lugar del CP2102. El fabricante asegura que hace que el puerto USB sea más robusto. Por otro lado, reusaron los dos pines reservados de la V2 para sacar un GND y un VUSB.

esp8266-nodemcu-pinout-v3

Por lo demás, las especificaciones son las mismas. Por contra, el modelo v1.0 V3 vuelve a ser ancho y tapar toda la breadboard, lo cual es un auténtico problema a la hora de realizar montajes con bredboard

Aun así, la 1.0 V3 es seguramente el modelo más vendido ahora mismo. Aunque mucha gente busca la V2 porque son prácticamente iguales en funcionalidades, pero al ser estrecha es más cómoda de usar en una breadboard.

Como la versión V3 es una versión creada por Lolin/Wemos, en ocasiones se le ha tachado de “no oficial” (por el mismo NodeMCU). Pero teniendo en cuenta que es open hardware, el propio concepto de “no oficial” no tiene mucho sentido.

Resumen de las versiones

Resumiendo lo que hemos visto,

GeneraciónVersiónMóduloAnchuraComentario
Primera0.9ESP1210 pinesLa original, no está a la venta
Segunda1.0V2ESP12E8 pinesVersión “oficial”
Tercera1.0V3ESP12E10 pinesVersión de Wemos/Lolin. Convesor CH340G

Hasta aquí la teoría. Ahora viene la realidad, que es algo más “divertida”. ¡Los vendedores de eBay y AliExpress (y otros) lo mezclan todo! Por ejemplo, lo mismo ponen “NodeMCU Lua Lolin V2” que “NodeMCU Amica devkit v3”. Así, al buen tun tun. Pero la parte más divertida es que he visto versiones marcadas como V3 que en realidad son estrechas. Versiones que venden como V2 que son anchas.

La mejor forma de diferencias entre V2 y V3 de un vistazo es fijarnos en el conversor serial que monta. El CP2102 que es cuadrado, o el CH340G que es más alargado.

esp8266-nodemcu-v2-v3

Por lo demás no tampoco merece la pena que le dediquéis más tiempo del necesario al tema de las versiones. Prácticamente son similares, y cualquier que tengáis os va a funcionar bien.

Precio

Vamos a hablar del precio de estas plaquitas de desarrollo que actualmente son realmente baratas. En ambos casos, tanto para la versión v1.0 V2 como la V1.0 V3, podemos encontrarlas por el (increíble) precio de 2-2.5€, buscando en vendedores internacionles de AliExpress o eBay.

La versión V3 generalmente es un poco más barata (unos 2€, frente a los 2.5€ de la V2), seguramente por montar el CH340G o por una mayor producción. Si queréis una NodeMCU para un proyecto sin breadboard quizás os convenga la V3 por ser ligeramente más barata.

Sin embargo, en montajes que requieren usar una breadboard la opción preferida suele ser la V2 pese a su precio ligeramente superior, porque su menor anchura facilita las conexiones.

En cualquier caso, ambos modelos de placas de NodeMCU son similares y tienen un precio realmente imbatible para una placa de desarrollo con esta potencia y conectividad Wifi, siendo el principal motivo de su éxito y alta popularidad.

Pinout del NodeMCU

No podemos terminar la entrada sin ver nuestro siempre adorado y consultado esquema de patillaje (pinout).

esp8266-nodemcu-pinout

Y aquí una tabla de resumen con los pines, sus funciones, y algunas de sus peculiaridades.

PinGPIOInputOutputComentarios
D0GPIO16No interrupcionesNo PWM
No I2C
HIGH durante boot

Resistencia Pull-Down

Conectar a RST para Wake-Up
D1GPIO5OKOKSCL (I2C)

(frecuentemente)
D2GPIO4OKOKSDA (I2c)

(frecuentemente)
D3GPIO0Pulled UpOKBoot falla si pulled LOW

Conectado a botón FLASH
D4GPIO2Pulled UpOKHIGH durante boot

Boot falla si pulled LOW

Built-in LED

TX1
D5GPIO14OKOKSLCK (SPI)
D6GPIO12OKOKMISO (SPI)
D7GPIO13OKOKMOSI (SPI)
D8GPIO15Pulled GNDOKCS (SPI)

LOW durante boot

Boot falla si pulled HIGH

No tiene Pull-Up
RXGPIO3OKRXHIGH durante boot

No usable si se usa UART
TXGPIO1TXOKHIGH durante boot

Boot falla si pulled LOW

Debug output en boot

No usable si se usa UART
A0ADC0Analog InputNO

Sin embargo, como hemos visto, hay una gran variedad de pequeñas variaciones y fabricantes que denominan igual (y a veces equivocadamente) a sus placas de desarrollo. Así que puede haber pequeñas diferencias en la placa de desarrollo que tengáis.

Precisamente por eso, en caso de dudas, acudid a la entrada sobre el ESP12E, porque lo que tienen en común todas estas placas es que montan el mismo módulo y, por tanto, tienen las mismas funciones.

Lo que puede cambiar es el nombre que han rotulado en cada pin o que tenga el LED integrado en otro pin o, en casos más raros, que hayan conectado los pines de forma distinta con el ESP12E. Pero mirando el pinout del ESP12E seréis capaces de lidiar con cualquier placa NodeMCU aunque tengan pequeñas variaciones.

Hasta aquí la entrada sobre el NodeMCU. En futuras entradas veremos otras pacas de desarrollo muy interesantes, como la Wemos D1 y Wemos D1 Mini, y veremos cómo programar placas de dasarollo basadas en ESP8266 con el entorno de Arduino y con microPython. Mientras tanto ¡A jugar con vuestros NodeMCU!