Viernes, 24 de Octubre de 2025

¿Cómo programar NodeMCU?

2 de agosto de 2022
m

Hoy dedico el artículo a mi placa de desarrollo preferida en lo que a relación calidad/precio se refiere: NodeMCU.

Me inicié en el mundo maker, imagino que como muchos de vosotros, con Arduino y un pequeño kit que me suministraron en un curso de Robótica. Si bien la placa no era propiamente un Arduino, conocí su entorno de desarrollo y aprendí los básicos de su programación. Ello me llevó algunos meses después a adquirir mi primer Arduino UNO.

Esta versión de Arduino se movía en el entorno de los 20-30 euros, lo cual no estaba nada mal para las posibilidades que brindaba. Aquello de disponer de una pequeñita placa electrónica con la que controlar dispositivos físicos como LEDs, motores, sensores etc. me abrió un mundo nuevo donde volcar mi creatividad.

Más tarde empecé a indagar en la conectividad de Arduino con otros elementos como PCs, o smartphones y progresivamente empecé a utilizar otras placas o accesorios que incorporaban nuevas funcionalidades de comunicación.

El propio Arduino ha lanzada algunas placas con conectividad ethernet o WiFi, pero cada uno de estos nuevos lanzamientos incrementaba el precio del Arduino UNO básico lo que hacía que estos gadgets perdieran una de las características que los hace tan atractivos: su bajo precio.

Afortunadamente, el boom de la electrónica DIY motivó a otras compañías a idear un sinfín de elementos y ponerlos en el mercado a precios muy asequibles.

Así, tras experimentar con la tecnología bluetooth o RF llegué a la conclusión de que necesitaba hacer uso de redes ethernet/WiFi para que mis proyectos no estuviesen limitados por la distancia.

Primer experimento: ESP-01

En ese salto a la comunicación WiFi, el primer elemento que parecía dar respuesta a esas necesidades fue ESP-01. ESP-01 es un módulo que integra el chip ESP8266 y que, en teoría, permitía dotar a una placa como Arduino de conectividad WiFi. Y digo «en teoría» porque su configuración no es nada sencilla y me dio muchos quebraderos de cabeza.

Fotografía cercana de dos módulos ESP-01

Algunos inconvenientes que presenta este módulo son:

  • Los pines no entran en una breadboard. Hay que doblarlos.
  • El módulo consume una intensidad de corriente alta para comunicarse (unos 200 mA). El Arduino sólo puede proporcionar unos 50 mA. El módulo recibirá señal, pero no será capaz de detectar la red local ni conectarse a ella. Para solucionar eso es conveniente conectar una fuente de 3.3 V independiente que alimente el ESP8266. Otra solución que parece funcionar es conectar una pila de 9V al jack de alimentación del Arduino además de la conexión USB.
  • El estado alto del módulo en la comunicación Tx/Rx es a 3.3V. Se recomienda instalar un divisor de voltaje (de 5V a 3.3V) entre el pin Tx del Arduino y el Rx del módulo.
  • La configuración se realiza mediante comandos AT y muestra incompatibilidades con algunos baudrate. Hay que cambiarlo con un convertidor FTDI-USB.

Por todo ello no llegué a hacer funcionar este módulo de manera fiable.

Si te sientes con ganas de experimentar por ti mismo, puedes hacerte con algunos de estos módulos aquí.

La solución «oficial»: Arduino MKR1000

Entonces recurrí a papá Arduino, que por aquel entonces ya había sacado Arduino MKR1000, una nueva placa de desarrollo que combinaba la funcionalidad de Arduino Zero con el shield WiFi oficial de Arduino.

Esta placa era más económica que la suma de esos dos elementos, pero aún así su precio no era nada desdeñable, 35 euros, lo que hace pensar que un proyecto grande en el que necesitemos varios de estos dispositivos sale por un monto importante.

No obstante, una vez adquirido un MKR1000 y metido en harina, logré el objetivo buscado. Por fin tenía un Arduino con WiFi.

NodeMCU

Durante la confección del pedido del MKR1000 (siempre que hago un pedido de material, suelo añadir algunos accesorios o componentes que me puedan ser útiles) vi un dispositivo en la misma sección de comunicaciones WiFi que me llamó la atención: NodeMCU. Dicho dispositivo tenía el chip ESP8266 con el que ya había conocido con el módulo ESP-01 y del que guardaba un infausto recuerdo. Pero en este caso, NodeMCU se definía como una placa de desarrollo completa que ofrecía unas posibilidades muy parecidas a las de Arduino MKR1000 y por un precio mucho menor: en torno a los 5 euros. ¿Cómo no añadir entonces un NodeMCU a la cesta de la compra?

Y cuando empecé a trabajar con NodeMCU… guau. Evidentemente tenía mucha más confianza en el MKR1000 por aquello de ser un Arduino oficial y porque costaba 7 veces más, pero no me hicieron falta muchas pruebas para encontrar alguna limitación en la librería WiFi101 necesaria para exprimir las posibilidades WiFi del MKR1000.

Y le di una oportunidad al baratísimo NodeMCU, que superó con creces todas mis expectativas. La librería ESP8266WiFi superaba a la librería WiFi101 y, unido a la funcionalidad de NodeMCU derivada del hecho de ser una placa de desarrollo completo, convertían a este un un gadget poderosísimo y a un precio irrisorio.

Fotografía cercana de un módulo NodeMCU

¿Cómo programar NodeMCU?

Y bien, aquí llega el meollo de la cuestión: ¿Cómo programamos un NodeMCU? Pues como anuncié antes, la mayor ventaja de este dispositivo es que es una placa de desarrollo completa, como una placa Arduino cualquiera, y no sólo eso, sino que podemos programarlo con el IDE de Arduino.

Eso sí, tendremos que usar el IDE de arduino.cc (https://www.arduino.cc/en/software). Para aquellos que no estén muy al tanto, en algún momento de la historia de Arduino se produjo una escisión entre los creadores de Arduino y la empresa que fabricaba el hardware y dieron lugar a los proyectos arduino.cc y arduino.org, cada uno con su respectivo IDE. Por lo general, el IDE de arduino,cc ofrece mayor compatibilidad con otras placas.

Otra precaución que debemos tener es que la nomenclatura de los pines a usar dentro del programa debe ser la del chip ESP8266, no la de NodeMCU. Así por ejemplo el pin D1 de NodeMCU es el pin GPIO5 de ESP8266, de modo que en el código este pin será el 5.

Podéis encontrar el pinout detallada en muchos sitios de internet.

Pinout del módulo NodeMCU

Con estas premisas ya sólo nos queda configurar las opciones del IDE. Estas serían las que muestro en la siguiente imagen:

Opciones de configuración del IDE de Arduino para programar un módulo NodeMCU
  • Placa: «NodeMCU 1.0 (ESP-12E Module)»
  • Flash Size: «4M (3M SPIFFS)»
  • CPU Frequency: «80 MHz»
  • Upload Speed: «115200»
  • Puerto: aquel en el que tengáis conectado NodeMCU. Lo podéis ver en el Administrador de Dispositivos de Windows.
  • Programador: «AVRISP mkII»

En próximas entradas publicaré un ejemplo de carga de un programa.

Publicaciones relacionadas

Controla una Roomba a tu voluntad

Controla una Roomba a tu voluntad

En este artículo te muestro una característica poco conocida de los robots de limpieza Roomba de iRobot: la interfaz abierta de Roomba (o ROI, Roomba Open Interface, por sus siglas en inglés). Esta interfaz es un puerto de conexión serie que permite a Roomba intercambiar mensajes con otros dispositivos como microcontroladores, ordenadores o smartphones. El protocolo de información es público y gracias a él podemos añadir a Roomba cuantas funcionalidades se nos ocurran.

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *