Programando NodeMCU con MicroPython

Aunque en la actualidad se cuenta con diversas tarjetas de desarrollo para la creación de proyectos de electrónica, como lo son las tarjetas arduino en sus diferentes modelos como Arduino Uno, Arduino Mega, Arduino Nano entre otras del mercado, el día de hoy queremos presentar una alternativa interesante, en este caso hablamos tarjeta de desarrollo NodeMCU (figura 1) ya que en cuanto a hardware proporciona características similares a arduino pero en software difiere un poco, ya que no solo tiene la posibilidad de programarse con el IDE de Arduino en C/C++ si no también en otros lenguajes de programación como LUA y MicroPython evitandonos depender del IDE de Arduino o realizar configuraciones complicadas.

Fig 1. Tarjeta de desarrollo NodeMCU.

¿Qué es NodeMCU?

La tarjeta de desarrollo NodeMCU nos permitirá realizar proyectos de electrónica a nivel del Internet de las Cosas puesto que cuenta con un módulo de wifi que incluye antena, además de pines header para la conexión en tarjeta de prototipado u otros dispositivos como sensores, actuadores, interfaces de control y comunicación.
Esta tarjeta de desarrollo esta basada en el chip ESP8266 (figura 2) que es bien conocido en el ámbito del hardware libre por la gran facilidad con la que podemos crear proyectos de internet, aunque esta tarjeta es de propósito general dando pie a ser usada en un diseño propio o como NodeMCU exponiendo todos sus puertos de comunicación y puertos de entradas y salidas mediante pin headers ya que como podemos ver el ESP8266 no cuenta con el hardware necesario para empezar a realizar proyectos.

Fig 2. Tarjeta ESP8266.

Características más importantes de NodeMCU

  • Programación a través de un cable micro USB-B
  • 11 pines de E/S digitales (3.3V)
  • 1 pin de Entrada analógico
  • ESP-12E Procesador con ESP8266 Módulo-WLAN
  • Chip USB-Serial CP2102
  • 1MB de RAM a 80Mhz
  • Programable a través de Arduino, Lua y MicroPython.

Pinout del NodeMCU

Siempre es importante reconocer que hardware tenemos disponible en cada una de nuestras tarjetas de desarrollo por ello es que en el diagrama de la figura 3 se describen los pines con los que cuenta el NodeMCU.

Fig 3. Pinout de la tarjeta NodeMCU.

Estas son las características más relevantes de nuestra tarjeta de desarrollo, si se requiere más información al respecto puede consultar la ficha técnica en el enlace NodeMCU.

¿Qué es MicroPython?

En términos simples podemos decir que MicroPython es una reimplementación del lenguaje de programación Python que se enfoca en microcontroladores y sistemas integrados.
Si aún no hemos escuchado de Python, podemos decir que Python es un lenguaje de programación interpretado, orientado a objetos y de alto nivel con semántica dinámica para el desarrollo rápido de aplicaciones y es de código abierto como Arduino. La sintaxis simple y fácil de aprender de Python enfatiza la legibilidad y, por lo tanto, reduce el costo del mantenimiento del programa.
La diferencia más obvia entre Python regular y MicroPython es que MicroPython está diseñado para funcionar bajo condiciones extraordinariamente restringidas por ejemplo a 16 kilobytes de RAM en tarjetas de desarrollo como micro: bit, xbee o NodeMCU entre otras del mercado y así como proporcionarnos acceso a la manipulación de los pines GPIO de dichas tarjetas.

Actualización del Firmware del NodeMCU

Ahora que tenemos una noción más completa de que es NodeMCU y MicroPython vamos a cargar a la tarjeta NodeMCU un firmware diferente al que tiene de fábrica ya que por default no es compatible con MicroPython y el firmware que tiene solo es compatible con el IDE de Arduino.

1. Lo primero que vamos a realizar es conectar la tarjeta NodeMCU al PC que vayamos a utilizar mediante un cable micro-USB, si trabaja en Windows, abra el Administrador de dispositivos, debería ver la placa NodeMCU detectada en los puertos (COM y LPT) como Silicon Labs como en la figura 4 en mi caso se detecto el puerto COM11 pero se puede obtener cualquier otro numero de puerto.

Fig 4. Puerto COM11 Detectado.

Sin embargo, si tiene un problema con el controlador de NodeMCU, actualice el controlador.
También puede instalar el controlador de Silicon Labs desde https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx.
Descárguelo según su plataforma.

2. Para obtener el firmware de MicroPython podemos ir a la pagina oficial en la sección descargas o bien ir directo al siguiente enlace para obtener el último firmware de MicroPython https://micropython.org/download#esp8266 descargue el archivo *.bin.

3. Para actualizar el firmware, puede usar el flasheador NodeMCU. Descargue NodeMCU Flasher en https://github.com/nodemcu/nodemcu-flasher. Hay dos plataformas binarias, x86 y x64. Abra el programa para que aparezca el cuadro de diálogo de la figura 5.

Fig 5. Interfaz del flasheador NodeMCU.

4. Seleccione el puerto COM donde se conectó NodeMCU.
Luego, haga clic en la pestaña Advanced, seleccione Baudrate en 5700 y SPI Mode en DIO figura 6. También puede cambiar la velocidad en baudios a 115200 si tiene un problema al flashear el firmware de MicroPython.

Fig 6. Pestaña de opciones avanzadas.

5. Damos clic en la pestaña Config y damos clic en el engrane para seleccionar el archivo binario que previamente se descargo e iniciar el flasheo figura 7.

Fig 7. Pestaña de configuración.

6. Finalmente en la pestaña Operation damos clic en Flash y esperamos a que se complete la operación como se puede ver en la figura 8. Esto nos indicará que la tarjeta NodeMCU está lista para ser programada con MicroPython, en este punto recomendamos presionar el botón reset o desconectarla y conectarla a la pc para habilitar el intérprete y correr nuestro primer script.

Fig 8. Proceso de firmware completado.

Programando la Tarjeta NodeMCU

1.- Para empezar a crear script (programas) en la tarjeta NodeMCU lo que necesitamos es un programa de terminal serial como lo puede ser Putty, Tera Term o Real Term que son de código abierto por lo que se pueden descargar en sus respectivos sitios oficiales sin restricción alguna.

En mi caso tengo instalado Tera Term, así que abriré ese programa con la configuración de default solo cambiaré el baudrate a 115200 como en la figura 9.

Fig 9. Configuración a una velocidad de 115200.

Al abrir la terminal serial veremos que nos arroja unas letras al azar pero al presionar enter en el teclado nos mostrará el símbolo “mayor que” tres veces el cual nos permitirá la creación de scripts y programación en tiempo real con MicroPython, como podemos ver en la figura 10 se imprime un texto que se pasa como parámetro en la función print(), quedando como print(“Hola Mundo en MicroPython”).

Fig 10. Ejemplo de impresión de texto en MicroPython.

2.- Lo siguiente que vamos a hacer es realizar el clásico ejemplo de blink que enciende y apaga un led con MicroPython, la conexión del LED será el Ánodo al GPIO5 (D1) y el Cátodo a GND del NodeMCU. Posterior a ello entramos a Tera Term como en el ejemplo anterior y escribimos el siguiente código (figura 11) línea por linea por línea.

Fig 11. Programa Blink en microPython.

3.- Ingresar el código línea por línea al NodeMCU puede ser difícil si es un código extenso, para estas situaciones puede ser útil crear nuestro script por separado para después cargarlo así que una alternativa puede ser el uso de WebREPL, que es una herramienta para acceder a MicroPython de forma remota y nos permite cargar nuestros scripts. Puede descargarlo y extraerlo en https://github.com/micropython/webrepl. Abra el archivo webrepl.html y debería ver el algo parecido a la figura 12.

Fig 12. Interfaz de WebREPL.

Para acceder, debemos conectarnos a la red WiFi generada por el NodeMCU. Deberíamos ver una red wifi como “MicroPython-xxxx” (figura 13). Por default la contraseña predeterminada es micropythoN.

Fig 13. Selección de redes wifi.

Como siguiente paso vamos a habilitar la opción para poder guardar y ejecutar programas desde la herramienta WebREPL, para esto vamos a conectarnos a NodeMCU mediante Tera Term e introducimos la siguiente linea de código import webrepl_setup a continuación nos pedirá que se presiones la letra “E” para habilitar la opción ademas de generar una contraseña que en mi caso fue microp (figura 14).

Fig 14. Configuración de la contraseña para WebREPL.

Vamos a modificar el programa blink por el siguiente (figura 15) donde vemos que se agrego la impresión de texto “Encendido” y “Apagado” como referencia del estado del LED además debe estar guardado como un archivo con la extensión “.py”.

Fig 15. Script blink.py.

En la carpeta previa que descargamos de WebREPL tenemos el archivo webrepl.html así que lo abrimos en nuestro navegador preferido y damos clic en el botón Connect que nos solicitará la contraseña creada previamente (en mi caso microp). Incluso como vemos en la figura 16 podemos hacer pruebas del que MicroPython funciona realizando unas simples operaciones.

Fig 16. Conexión de WebREPL con NodeMCU.

En la parte superior derecha de WebREPL veremos un pequeño formulario con el boton Examinar para cargar el programa blink.py que guardamos previamente en nuestra PC, de hecho podemos ver en la figura 17 que el archivo pesa 190 bytes puesto que ya lo busqué en mi pc.

Fig 17. Archivo blink cargado en WebREPL para enviar e NodeMCU.

Ya cargado el archivo a cargar a NodeMCU lo que procede es dar clic en el botón Send to device (figura 18) para que se aloje en la memoria del NodeMCU y espere a ser llamado.

Fig 18. Envio de script a NodeMCU.

Finalmente para ver en acción el programa solo escribimos en WebREPL el comando import blink donde blink es el nombre del archivo sin la extensión y eso bastará para que se ejecute el script en NodeMCU.

Fig 19. Ejecución del programa blink en NodeMCU.

Con este ejemplo finalizamos la entrada al blog, esperamos sea de utilidad para sus proyectos de electrónica, si requieren más información al respecto pueden buscar el soporte en la página oficial de MicroPython. Como siempre si te ha gustado esta publicación o tienes alguna inquietud de este tema no dudes en comentarla, hasta la próxima.

https://www.facebook.com/AGElectronicaMexico/

https://www.instagram.com/ag_electronica/?hl=es-la

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s