NodeMCU es la placa de desarrollo basada en el ESP8266 que nos hace la vida más fácil a los que queremos desarrollar dispositivos conectados. En este tutorial daremos un repaso por los 5 puntos más importantes de NodeMCU.
Ya hemos hablado en varias ocasiones sobre esta placa o kit de desarrollo. Este tutorial pretende ser una guía de inicio para todos aquellos que quieran profundizar en su funcionamiento.
Yo soy un defensor de las placas de Arduino. Aunque hay grandes diferencias sobre todo con respecto a la documentación, NodeMCU nos brinda la posibilidad de crear nuestros primeros dispositivos para el IoT de una manera muy económica, apenas 8 €.
Este tutorial consta de 5 partes. Comenzamos viendo una visión general de los kit de desarrollo y de NodeMCU. Luego pasaremos a diferenciar las diferentes versiones que nos encontramos de esta placa. Veremos los pines que están disponibles y sus particularidades, los LEDs y pulsadores integrados dentro de NodeMCU y por último cómo conectar NodeMCU a nuestro PC.
Si no tienes experiencia con la programación de Arduino, te recomiendo que empieces por este Curso de Arduino desde cero.
Indice de contenidos
NodeMCU el kit de desarrollo para el IoT
NodeMCU es una placa de desarrollo totalmente abierta, a nivel de software y de hardware. Al igual que ocurre con Arduino, en NodeMCU todo está dispuesto para facilitar la programación de un microcontrolador o MCU (del inglés Microcontroller Unit).
No hay que confundir microcontrolador con placa de desarrollo. NodeMCU no es un microcontrolador al igual que Arduino MKR1000 tampoco lo es. Son placas o kits de desarrollo que llevan incorporados un chip que se suele llamar SoC (Sytem on a Chip) que dentro tiene un microcontrolador o MCU.
El esquema general de este tipo de placas sería el siguiente.

El objetivo es programar la MCU o microcontrolador a través del kit o placa de desarrollo. Todo lo demás nos sirve de apoyo para que crear nuestros propios proyectos sea lo más sencillo posible.
Esto no solo sucede con NodeMCU, las placas como Arduino UNO o Arduino MKR1000 utilizan la misma arquitectura eso si, cada una con sus características particulares.

La mayor ventaja que tienen placas como Arduino MKR1000 y NodeMCU es que incorporan un módulo WiFi que nos permite crear proyectos del IoT o sistemas inalámbricos.
¿Para qué es necesario este tipo de dispositivos? ¿Qué podemos hacer con una placa con conexión WiFi? Son el primer paso hacia el Internet de las Cosas o el IoT. Pueden enviar datos, recibir datos e incluso controlar los pines de entrada y salida de forma remota e inalámbrica.
MCU o microcontrolador de NodeMCU
Vamos a partir de la unidad más básica la MCU o microcontrolador. En el NodeMCU este chip se integra dentro del SoC. Como veremos a continuación, a todo este conjunto (SoC) se le conoce como ESP8266.
Por lo tanto, en términos estrictos el ESP8266 no es un microcontrolador. Dentro si que lleva uno y se llama Tensilica L106 de 32-bit. La MCU se va a encargar de gestionar todas las entradas, salidas y cálculos necesarios para hacer funcionar el programa que hayamos cargado.

Imagen obtenida del ESP8266 datasheet
Funciona con 32-bit lo que viene a decir que puede realizar operaciones con números de ese tamaño (de 0 a 4.294.967.295 o de -2.147.483.648 a 2.147.483.647). Sin embargo, las MCU más comunes son de 8-bit como la que lleva el Arduino UNO el ATmega328P.
Estos microcontroladores pueden hacer operaciones con números de 8-bit (de 0 a 255 o de -128 a 127). Para hacer operaciones con números mayores de debe dividir la operación en diferentes partes para trabajar con números de ese tamaño.
Trabaja a una velocidad de 80MHz aunque puede llegar a los 160MHZ. Para que te hagas una idea, mi primer PC tenía una velocidad de 160MHz. Esto nos indica la frecuencia con la que la MCU ejecuta las instrucciones.
SoC ESP8266
Una vez que tenemos claro qué es una MCU o microcontrolador, ahora veremos que es en realidad el ESP8266. El nombre técnico es ESP8266EX.

Se trata de un SoC o Sistema en Chip. Básicamente consiste en un chip que tiene todo integrado (o casi todo) para que pueda funcionar de forma autónoma como si fuera un ordenador. En el caso del ESP8266 lo único que no tiene es una memoria para almacenar los programas.
Esto supone un inconveniente ya que parte de los pines de entrada y salida, tendrán que ser utilizados para conectarse a una memoria Flash externa.

Imagen obtenida del ESP8266 datasheet
Las características principales son las siguientes:
- Incorpora una MCU de 32-bit de bajo consumo (Tensilica L106)
- Módulo WiFi de 2.4 GHz
- RAM de unos 50 kB
- 1 entrada analógica de 10-bit (ADC)
- 17 pines de entrada y salida GPIO (de propósito general)
Para más información te recomiendo que mires la hoja de características técnicas.
Módulo ESP-12 de NodeMCU
Dentro de los diferentes módulos del ESP8266, encontramos el ESP-12. Este es el módulo que utiliza NodeMCU para procesar la información.
En el siguiente nivel ya nos encontramos el módulo ESP-12 y el ESP-12E. Dependerá la versión de NodeMCU utilizará uno u otro. Las diferencias entre ellos son mínimas como veremos en el siguiente tema.
Básicamente este módulo incorpora la memoria Flash para almacenar los programas o sketchs y la antena. Pero ya no solo eso, aquí comienza la tarea de facilitar el acceso a los pines y demás conectores del SoC y del microcontrolador.

Internamente los pines del ESP8266 están cableados hasta los pines del módulo ESP-12 siendo así más fácil su acceso. Pero aún es complicado el poder programar este tipo de módulos. Un ejemplo lo tenemos en el ESP-01.
Este módulo fue el primero que se popularizó dentro de la gama de los ESP8266. Aún a día de hoy sigue siendo complicado utilizarlo. Puedes escuchar y leer el capítulo del podcast que dedicamos al ESP-01.
Existe una amplia gama de módulos basados en el SoC ESP8266.

La diferencia entre ellos es el acceso a los pines. Dependerá de cada módulo tendrás acceso a unos u otros pines.
En este tutorial trabajaremos con el ESP-12, aunque de forma transparente. Ya lo irás viendo.
Kit o placa de desarrollo NodeMCU
Por fin llegamos al nivel superior donde todo es mucho más sencillo. Este tipo de kit incorpora componentes que nos ayudan a programar y conectar el módulo y la MCU a nuestros circuitos.
Existen diferentes modelos de varias marcas con características y funcionalidades diferentes dependiendo del SoC o microcontrolador que utilizan.
Pero todos tienen el mismo objetivo, facilitarnos el prototipado y desarrollo de proyectos con microcontroladores.
NodeMCU es uno de ellos y sus características principales son:
- Conversor Serie-USB para poder programar y alimentar a través del USB
- Fácil acceso a los pines
- Pines de alimentación para sensores y componentes
- LEDs para indicar estado
- Botón de reset

En este nivel, ya no nos preocupamos de cómo cargar el programa o cómo conectar los pines. Ahora solo necesitamos un ordenador, un cable USB y un entorno de desarrollo para programar la MCU o microcontrolador.
Versiones de NodeMCU
Existe una gran confusión con respecto a las diferentes versiones que hay de NodeMCU. Todo esto es debido a que se trata de una placa de hardware abierto y cualquier fabricante puede crear su propia distribución.
Lo que te tiene que quedar claro es que todos los NodeMCU se basan en los mismos módulos el ESP-12 y ESP-12E que se a su vez se basan en el SoC ESP8266.
Partiendo de esta premisa, las diferencias que vamos a encontrar son básicamente el número de pines a los que tenemos acceso y el tamaño de cada placa. A lo largo de este tema veremos tres versiones.

Actualmente hay varias versiones en el mercado en concreto 3. Existe cierta confusión al respecto y es debido a que se han nombrado de diferentes maneras. Podemos encontrar el nombre dependiendo de la generación a la que pertenecen, la versión o el nombre común que se les ha dado.
Generación | Versión | Común |
1ª | v0.9 | V1 |
2ª | v1.0 | V2 |
2ª | v1.0 | V3 |
La última columna es el nombre que encontrarás en diferentes tiendas online como Amazon, Baggood o AliExpress. Lo lógico es que te guíes por este nombre a la hora de comprar.
La placa V3 es básicamente la V2 con algunas mejoras y pertenece a la 2ª generación de NodeMCU aunque no es una nueva especificación oficial.
El gran follón que existe con respecto a los nombres es debido a que se trata de una placa de hardware abierto y cualquiera puede fabricar un NodeMCU y comercializarlo.
Principalmente vamos a encontrar 3 fabricantes:
- Amica es el distribuidor oficial
- DOIT
- Lolin / Wemos
Comparando las diferentes versiones de NodeMCU
Cuando adquieres un NodeMCU es importante reconocer la versión a la que pertenece según la tabla que hemos visto antes. Es fundamental a la hora de programar y a la hora de sacar todo el potencial.
Las placas de 1ª y 2ª generación son fáciles de distinguir debido a su tamaño. Ambas utilizan el módulo ESP-12 con 4 MB de Flash, pero la 2ª generación utiliza la más nueva y mejorada ESP-12E.

Vamos a ver en detalle cada una de las versiones de NodeMCU.
1ª generación / v0.9 / V1

Quizás el mayor inconveniente que encontramos con esta placa es su tamaño. Es muy incomodo cuando la conectamos a nuestra protoboard ya que ocupa todo el espacio y no deja hueco para conectar los pines.
El módulo que utiliza es el ESP-12 basado en el ESP8266 con una memoria Flash de 4 MB.
2ª generación / v1.0 / V2

La gran diferencia, como ya te he dicho, es el tamaño. Esta 2ª generación sí que encaja perfectamente en la protoboard y nos permite conectar cables a los pines de una forma sencilla.

Otra diferencia es que el chip fue actualizado del ESP-12 al ESP-12E y esto nos permite tener algunos pines extra.
Con esta nueva generación de NodeMCU se produjo un salto sustancial de calidad y facilidad en la programación y prototipado. Es la placa recomendada y con la que vamos a trabajar en este tutorial.
2ª generación / v1.0 / V3

Lo primero que hay que decir de esta nueva versión es que no es una especificación oficial por parte de NodeMCU.
Se trata de una versión creada por Lolin que aporta ciertas mejoras como que el puerto USB parece ser más robusto y dos de los pines que no se utilizan en la versión V2 se han utilizado como salida de 5V directa del USB y un GND adicional.
Otra diferencia mínima es el tamaño ya que la V3 es un poco más ancha que la V2. Esto puede acarrear algún problema si queremos integrarlo dentro de alguna placa como un control de motores donde, la V3, no en caja, queda grande.
Aún así, es recomendable ceñirse a las especificaciones de NodeMCU V2 ya que es la última versión oficial.
Acceso a los pines de NodeMCU V2
Una vez que hemos visto qué es el NodeMCU y las versiones que existen, vamos a empezar describiendo las características más importantes que nos aporta esta placa a nivel de hardware, los pines digitales, analógicos y de alimentación.
En la siguiente imagen puedes ver una visión general de todos los pines de NodeMCU V2.

Como norma, siempre que haga referencia a este diagrama de pines de NodeMCU, equivaldrá a si ponemos la placa con el puerto USB hacia abajo como se muestra en la siguiente imagen.

Así sabrás en todo momento la correspondencia con los pines de la placa de desarrollo o prototipado.
Pines de NodeMCU
Gracias a la placa de desarrollo NodeMCU podemos acceder a los pines de una forma sencilla. Lo más práctico es pinchar la placa en una protoboard y desde aquí, sacar cables para conectarlos a los diferentes sensores y componentes.

Aunque tenemos acceso a más pines que los digitales, el pin analógico y los pines de alimentación, en un principio vamos a trabajar solo con estos.
- 13 pines digitales numerados del D0 al D12
- 1 pin analógico numerado A0
- 3 pines de 3,3V
- 1 pin de 5V (versión V3 2 pines 5V)
- 4 pines de tierra GND (versión V3 5 pines GND)
[icon name=»lightbulb-o» class=»» unprefixed_class=»»] Con la versión NodeMCU V3 tendríamos un pin más de 5V y de GND que ocuparían los pines nombrados como RSV.
Pines digitales de NodeMCU
Los pines digitales de NodeMCU van numerados del D0 al D12.

Encontrarás dos nomenclaturas para nombrar los pines, los que aparecen en la placa escritos y en ocasiones verás el nombre asociado a cada Dx con GPIOx.

El GPIOx indica a qué pin del propio ESP8266 está conectado esa patilla. Ya veremos más adelante que tendremos dos formas de acceder a ellos a través del código, esto puede generar cierta confusión.
Pines digitales útiles de NodeMCU
Cómo ya hemos visto antes, el ESP8266 no tiene memoria flash y por lo tanto necesita de una memoria externa en la que almacenar los programas y datos. Para conectarse a ella, necesita utilizar pines del propio ESP8266.
Debido a esto, alguno de los pines de NodeMCU no pueden ser utilizados. Dependerá de la versión y el fabricante con el que estemos trabajando pero lo recomendable es no utilizar los pines GPIO6, GPIO7, GPIO8, GPIO9 (D11), GPIO10 (D12) y GPIO11. [icon name=»lightbulb-o» class=»» unprefixed_class=»»] Recuerda cuando decimos GPIO nos referimos a la nomenclatura de los pines del ESP8266 y no a los de NodeMCU.
Solo dos de ellos son accesibles a través de la placa NodeMCU, el pin GPIO9 (D11) y el pin GPIO10 (D12). En tu placa aparecerá probablemente como SD2 y SD3. Evita, en la medida de lo posible, utilizar estos pines para conectar sensores y componentes.
De los pines restantes es aconsejable no utilizar tampoco los pines D9 y D10 correspondientes al Rx (recibir) y Tx (transmitir).
Estos pines se utilizan para transmitir un programa o sketch o para la comunicación entre el NodeMCU y el PC a través del puerto serie.
Si se utilizan pueden ocasionar interferencias a la hora de cargar un programa.
Por lo tanto, nos quedarían los pines del D0 al D8, 9 pines digitales de entrada y salida.

Pin analógico de NodeMCU
Si antes hablábamos de que en los pines digitales solo tenemos dos estados LOW y HIGH, en el pin analógico vamos a poder tener un rango de valores. Este rango vendrá determinado por la resolución del conversor ADC (del inglés Analog Digital Converter) Conversor Analógico Digital.
El NodeMCU tiene solo un pin analógico que admite un rango de valores de 0 a 3,3V con una resolución de 10-bit.

Esto implica que dentro del código tendremos un valor entre 0 y 1023 que se mapea con el voltaje entre 0 y 3,3V. Cuando llegue el momento veremos un ejemplo de cómo funciona este pin y como podemos convertirlo a una magnitud que entendamos.
Pines de alimentación de NodeMCU
Los pines de alimentación tienen 2 funciones:
- Alimentar sensores y componentes (salida)
- Alimentar la propia placa (entrada)
El voltaje de operación de NodeMCU es de 3,3V y por lo tanto, en principio no podríamos alimentar ningún componente que necesitara 5V.
Sin embargo, cuando se alimenta a través del puerto USB con 5V, internamente tiene un regulador de voltaje que saca 3,3V y 5V. Los 3,3V se utilizan para alimentar el NodeMCU (electrónica) y para sacarlo por los 3 pines marcados con ese valor.
Los 5V se utilizan para alimentar otros componentes dentro de la placa y para sacarlos por el pin de 5V.
Además, por cualquiera de estos pines podemos suministrar el mismo voltaje permitiendo así alimentar a la placa además del puerto USB. Eso sí, si alimentamos con 3,3V por alguno de los pines marcados con ese valor, la salida de 5V ya no nos suministrará esos 5V.
Esto hay que tenerlo en cuenta si en nuestro proyecto hay sensores que se alimentan con 5V.

LEDs y pulsadores de NodeMCU
Ya conocemos los pines de entrada y salida digitales, el pin analógico y los pines de alimentación de NodeMCU. Además de todo esto, esta placa nos ofrece unos componentes extra para controlar su funcionamiento.
Dentro de la propia placa de desarrollo vamos a encontrar 2 LEDs integrados y 2 pulsadores.

Estos componentes los podremos manejar desde el código pero antes, sepamos qué es lo que hacen y cómo están conectados.
LEDs integrados dentro de la placa
El NodeMCU V2 tiene dos LEDs integrados. Cada uno de ellos están asociados a los pines D0 (GPIO16) y D4 (GPIO2). Esto quiere decir que desde el código podremos encender y apagar cada uno de ellos.

El LED conectado al D4, pertenece al módulo ESP12-E y el LED conectado al D0 es de la propia placa. Algo a tener en cuenta (lo veremos más adelante con un ejemplo de código), es que estos LEDs tienen la polaridad invertida.
Para encenderlos tenemos que poner un estado LOW (0V) y para apagar los LEDs tenemos que poner un estado HIGH (3,3V).
Además de poderlos encender y apagar a través del código, el LED conectado al D4 nos sirve para saber si se está cargando un programa. Cada vez que damos al botón de subir, mientras dura la transmisión del programa el LED parpadea.

Pulsadores integrados dentro de la placa
Además de los LEDs la placa tiene dos pulsadores. El típico botón de RESET (RST) que si lo pulsamos se resetea la placa y comienza la ejecución de cero y otro botón que pone FLASH.

El botón de RESET hace eso, resetear. Esto no quiere decir que elimine el código, lo único que hace es comenzar la ejecución desde el principio pasando por la función setup().
El botón de FLASH nos permite cargar un programa o firmware. Esto no es algo específico de NodeMCU o del ESP8266, todos los microcontroladores tienen como mínimo dos estados.
El estado de ejecución es cuando el microcontrolador ejecuta el programa que hemos cargado. El estado carga de programa o de firmware nos permite subir un programa al microcontrolador.
Función del botón Flash
Al igual que Arduino, esta placa ya lo hace automáticamente cuando pulsamos en el botón del IDE de Arduino subir programa. Básicamente consiste en poner uno de sus pines o varios, en unos estados conocidos.
Con el módulo ESP01 (es el primero que se empezó a comercializar con el microcontrolador ESP8266) esto se hace de forma manual. Pero en el NodeMCU es automático aunque no quita que si dejamos pulsado el botón cuando arrancamos la placa, se comportará de forma extraña y no ejecutará el código que haya cargado.
El botón de FLASH está conectado al pin GPIO0 que corresponde con el D3 de la NodeMCU. Además tiene una resistencia pull-up lo que hace que en estado de reposo está a estado HIGH (3,3V). Lo veremos más adelante con un ejemplo.
Si cargas un programa básico, solo con la función setup() y loop(), y conectas un LED al pin D3, verás como el LED se ilumina. [icon name=»lightbulb-o» class=»» unprefixed_class=»»] Un firmware es programa a bajo nivel que nos permite controlar el hardware (NodeMCU). Al contrario de lo que parece, un sketch o un programa de Arduino es un firmware ya que lo estamos cargando en un microcontrolador y controlamos un circuito electrónico. Por defecto el NodeMCU viene cargado con un firmware que nos permite programar en un lenguaje que se llama LUA. Cuando cargamos el primer programa sobrescribimos este firmware y cargamos uno nuevo.
Conectar el NodeMCU al PC
Para poder cargar un programa al NodeMCU, necesitamos un conversor USB a serie. Esta placa ya tiene uno integrado al contrario de lo que ocurre con el módulo ESP-01 por ejemplo. Así que en principio solo necesitamos conectar la placa al ordenador y listo.
En algunos casos esto no es suficiente y lo deberemos configurar de forma manual. No hay que olvidar que esta placa es Open Hardware y por lo tanto, cualquier persona puede fabricar y comercializar sin ninguna restricción.
Aquí es donde reside el problema, los componentes que se utilizan son diferentes y en ocasiones la compatibilidad con nuestro ordenador depende de ello.
Drivers para el NodeMCU
Los drivers nos van a permitir configurar la gestión del conversor USB a serie. Si has comprado el NodeMCU en alguna tienda de confianza tu placa llevará uno de estos conversores USB a serie:
- CP1202 (es el más utilizado en la versión v0.9/V1)
- CH340 (el más común en la versión v1.0/V2)
- FT232RL (es el más raro de ver pero hay algunas placas que lo llevan)
Lo normal es que el sistema operativo (Windows) lo detecte e instale automáticamente los drivers. De no ser así debes buscar en Internet los drivers para el conversor USB a serie que utiliza tu placa.
En mi caso utiliza el CP1202. Puedes verlo en Administrador de Dispositivos en Windows.

¿Qué pasa si utilizo MAC?
En este caso sí o sí tendrás que instalar los drivers en tu MAC y como en el caso de Windows, dependerá del conversor USB a serie que tenga tu placa. A continuación te dejo un enlace a las instrucciones para instalar el driver para el CP1202.
Si después de todo esto tienes algún problema, ponte en contacto conmigo.
Preparando el IDE de Arduino
Esto no es algo nuevo en este blog. Ya tenemos un tutorial donde te explicamos paso a paso como preparar el IDE de Arduino para programar NodeMCU, te recomiendo que lo sigas. Te dejo a continuación el vídeo donde se explica todo.
Conclusiones tutorial NodeMCU desde cero
NodeMCU es una placa muy económica y de hardware libre. Esto permite tener a nuestra disposición todos los esquemas para poder construir nuestra propia placa e incluso comercializarla.
He de decir que aunque me sienta a gusto desarrollando proyectos con NodeMCU, mi preferida siempre ha sido Arduino MKR1000. Ya no es solo por ser de Arduino (eso es un punto a su favor) es sobre todo por mi experiencia.
Con NodeMCU muchas cosas no están claras y las tienes que investigar o descubrir sobre la marcha. Sin embargo, parece que Arduino siempre tiene en cuenta todo esto. Cuando sale una nueva placa de Arduino, siempre tienen cuidado de tener la documentación mínima para poder empezar.
Aún así, NodeMCU es una placa recomendada para un nivel de experiencia medio debido a la escasa documentación.
¿Qué opinas tu de NodeMCU?
¿Has realizado algún proyecto con NodeMCU que quieras compartir?
Todos los comentarios aquí abajo, muchas gracias :)
Puedes escuchar este programa en, iVoox, iTunes y en Spreaker. Si lo haces, por favor valora y comenta, así podremos llegar a más gente.
Gracias a Shutterstock por ceder los derechos de las siguientes imágenes: