Contenido


Conozca NodeMCU y su placa DEVKIT

Configure y empiece a programar para este entorno de desarrollo de código abierto para IoT

Comments

Las tarjetas de desarrollo, como Arduino y Raspberry Pi, son opciones habituales cuando se están creando prototipos de dispositivos de IoT nuevos. Esas tarjetas de desarrollo son básicamente minicomputadoras que pueden conectarse y ser programadas por un PC o Mac estándar. Después de haber sido programadas, se pueden conectar a sensores y controlarlos en el campo. (Puede leer más acerca de hardware para desarrollar IoT en este artículo de developerWorks .)

Ya que la "I" de IoT significa Internet, las tarjetas de desarrollo tienen que tener una forma de conectarse a Internet. En el campo, la mejor forma de conectarse a Internet es mediante el uso de redes inalámbricas. Sin embargo, Arduino y Raspberry Pi no tienen incorporado el soporte para redes inalámbricas. Los desarrolladores tienen que añadir a la tarjeta un módulo wifi o de móvil y escribir código para acceder al módulo inalámbrico.

En este artículo, presentaré una tarjeta de desarrollo de código abierto para IoT llamada NodeMCU. Una de sus características más únicas es que tiene soporte incorporado para la conectividad wifi y, por lo tanto, hace que el desarrollo de aplicaciones de IoT sea mucho más fácil.

¿Qué es NodeMCU?

NodeMCU (Unidad Microcontroladora de Nodos) es un entorno de desarrollo de hardware y software de código abierto que está construido en torno de un sistema en chip (SoC) barato llamado ESP8266. El ESP8266, diseñado y fabricado por Espressif Systems, contiene todos los elementos cruciales de las computadoras modernas: CPU, RAM, red (wifi) e, incluso, un sistema operativo y un SDK modernos. Cuando se compra al por mayor, el chip ESP8266 sólo cuesta 2 $ la unidad. Eso hace que sea una opción excelente para los proyectos de IoT de todos los tipos.

Sin embargo, como chip, también es difícil de acceder a él y de utilizar. Para realizar las tareas más simples, como encenderlo o enviar una pulsación del teclado a la " computadora" del chip, hay que soldar cables, con la tensión análoga adecuada, a sus PINs. También, hay que programarlo en instrucciones automáticas de bajo nivel que puedan ser interpretadas por el hardware del chip. Aunque este nivel de integración no es un problema cuando el ESP8266 se utiliza como chip controlador incorporado en electrónicos que se producen masivamente, es un gran inconveniente para aficionados, hackers o estudiantes que quieran experimentar con él en sus propios proyectos de IoT.

El proyecto NodeMCU toma prestada una página del libro de prácticas de Arduino o de Raspberry Pi, para simplificar el desarrollo en ESP8266. Tiene dos componentes principales.

  1. Un firmware ESP8266 de código abierto, que se ha construido encima del SDK patentado del fabricante del chip. El firmware proporciona un entorno de programación sencillo que se basa en eLua (embedded Lua, Lua incorporado en inglés), que es un lenguaje muy simple y rápido para crear scripts y que tiene establecida una comunidad de desarrolladores. El lenguaje de creación de scripts Lua es muy fácil de aprender para los novatos.
  2. Una tarjeta DEVKIT que incorpora el chip ESP8266 en una tarjeta de circuitos estándar. La tarjeta tiene incorporado un puerto USB que ya está conectado al chip, un botón para restablecer el hardware, una antena wifi, luces LED, y conectores GPIO (General Purpose Input Output) de tamaño estándar que se pueden enchufar en una placa de pruebas. La Imagen 1 muestra la tarjeta DEVKIT, y la Imagen 2 muestra el esquema de sus conectores.
Figura 1. La tarjeta NodeMCU DEVKIT
Foto del tablero NodeMCU DEVKIT
Foto del tablero NodeMCU DEVKIT
Figura 2. El esquema de los conectores de NodeMCU
Foto do esquema de pinos do NodeMCU
Foto do esquema de pinos do NodeMCU

La tarjeta NodeMCU DEVKIT que viene precargada con el firmware se puede comprar por 8 $ la unidad, lo que hace que sea un dispositivo muy económico para crear prototipos y para su uso en producción.

y ¿qué tal es Arduino? El proyecto Arduino crea un SDK de software y diseña hardware de código abierto para crear un controlador de IoT versátil. Como NodeMCU, el hardware de Arduino es una tarjeta microcontroladora que tiene preparado un conector USB, luces LED y conectores de datos estándar. También define interfaces estándar para interactuar con sensores o con otras tarjetas. Pero, a diferencia de NodeMCU, la tarjeta Arduino puede tener diferentes tipos de chips de CPU (normalmente, chips ARM o Intel x86) con chips de memoria y diferentes entornos de programación. De hecho, también hay un diseño de referencia de Arduino para el chip ESP8266. Sin embargo, la flexibilidad de Arduino conlleva importantes variaciones entre sus diferentes proveedores. Por ejemplo, la mayor parte de las tarjetas Arduino no tienen capacidades de wifi, y algunas, incluso, tienen un puerto de datos de serie en vez de un puerto USB. Creo que NodeMCU proporciona una experiencia más coherente y accesible para los desarrolladores de IoT.

1

Iniciando con NodeMCU

Aunque este artículo asume que el usuario utiliza una computadora último modelo Mac OS X, si usted utiliza una máquina Linux las instrucciones son esencialmente las mismas. Los usuarios de Windows, primero tienen que instalar Python y pip .

1a

Instale un controlador de USB-a-puerto-de-serie

Descargue e instale en su computadora una aplicación controladora de USB-a-puerto-de-serie. Yo utilicé una de la página web de Silicon Labs. Esta aplicación controladora es necesaria para que la computadora se comunique con la tarjeta NodeMCU mediante un cable USB estándar.

1b

Cree su firmware personalizado de NodeMCU

Cree su propio firmware personalizado de NodeMCU Vaya al sitio web de NodeMCU Custom Builds, y elija las opciones que quiera.

Figura 3. Configure y cree su propio firmware de NodeMCU
Captura de pantalla del sitio web para crear su propio firmware NodeMCU

Además de las opciones estándar (predeterminadas) hay otras opciones interesantes que usted puede elegir y que le muestro a continuación:

  • ADC: Soporte para medir la entrada análoga (nivel de tensión) en el conector A0 de la tarjeta de NodeMCU.
  • HTTP: Soporte para escribir código para manejar las solicitudes HTTP.
  • SSL / TLS: Soporte para las conexiones HTTPS seguras.
  • MQTT: Soporte para que el protocolo MQTT envíe datos a otros dispositivos o servidores que utilizan un modelo de publicar/suscribir sobre TCP/IP.
  • Websocket: Una biblioteca de conveniencia para acceder a servicios web basados en websocket.
  • DHT: Una biblioteca de conveniencia para leer datos de la familia de sensores ambientales DHT.
  • Configuración de usuario final: Soporta un "portal de captura" para permitir que el usuario ingrese su propia contraseña de la wifi,sin tener que programar las credenciales de la wifi en el código de la aplicación.

Después de crear el firmware, el sistema le enviará por e-mail un enlace para que descargue el archivo binario de su firmware. Elija la versión con soporte para números decimales salvo que sepa que su aplicación sólo manejará números enteros.

1c

Instale el firmware en el dispositivo NodeMCU

Instale la biblioteca Python esptool , y utilícela para instalar el firmware que acaba de descargar en el dispositivo NodeMCU.

Utilizando Python y pip, ejecute el siguiente comando para instalar esptool y todas sus dependencias.

sudo pip install esptool

Conecte el dispositivo NodeMCU a la computadora utilizando un cable USB. La luz azul de NodeMCU parpadeará brevemente después de la conexión. Después, ejecute el siguiente comando para instalar el firmware que acaba de descargar (el archivo*.bin ) en NodeMCU.

esptool.py --port=/dev/cu.SLAB_USBtoUART write_flash -fm=dio -fs=32m 0x00000 nodemcu-master-10-modules-2017-01-28-02-40-34-float.bin

En los Mac, el puerto es /dev/cu.SLAB_USEtoUART tal como se describió anteriormente; en Windows, el puerto podría ser COM8; en Linux, el puerto podría ser /dev/ttyUSB0.

1d

Ejecute algo de código de Lua

Conéctelo a su NodeMCU, y ejecute algo de código de Lua. Afortunadamente, cuando se instala esptool, el sistema también instala miniterm como una dependencia. Así que, continúe y ejecute el siguiente comando.

miniterm.py /dev/cu.SLAB_USBtoUART

Ahora, pulse el botón RESET de la tarjeta NodeMCU y, después, pulse algunas veces la tecla INTRO del teclado de su computadora. Primero verá algunos caracteres aleatorios y, después, finalmente verá un indicador de comandos interactivo.

--- Miniterm on /dev/cu.SLAB_USBtoUART  9600,8,N,1 ---
--- Salir: Ctrl+] | Menú: Ctrl+T | Ayuda: Ctrl+T seguido por Ctrl+H ---
␒�␁@����␆�G��p��������␟␅]␝bvFD����������
>
>

En el indicador de comandos ya podrá ejecutar scripts de Lua. Pruebe este comando:

print ("Hola Mundo")

Ya puede experimentar con ello. Una buena forma de empezar es con los fragmentos de código de la sección "Ejemplos" del sitio web de NodeMCU.

Es posible utilizar la herramienta de GUI ESPlorer como alternativa a miniterm. Sin embargo, tendrá que tener instalado Java en su computadora.

1e

Actualice el script init.lua

Cuando la tarjeta NodeMCU se enciende o se reinicia, ejecuta el script init.lua . Este script es el punto de partida de su aplicación. A continuación hay un script init.lua de ejemplo, que hace parpadear la luz LED roja de la placa cada segundo.

-- D0 es la LED de la tarjeta NodeMCU
lpin = 0
-- cronómetro para ejecutar cada 1000 ms
tmr.alarm(1, 1000, tmr.ALARM_AUTO, function()
    -- Encender la LED
    gpio.write(lpin, gpio.LOW)
    -- Mantenerla durante 100 ms
    tmr.delay(100000)
    -- Apagar la LED
    gpio.write(lpin, gpio.HIGH)
end)

Utilice el programa luatool para instalar el script init.lua en el dispositivo. Se puede descargar luatool desde este repositorio de GitHub. Después, ejecute el siguiente comando desde la misma carpeta que la del archivoinit.lua .

python luatool.py --port /dev/cu.SLAB_USBtoUART --src init.lua --dest init.lua --verbose

Según mi experiencia, antes tendrá que ejecutar miniterm y ver el indicador de la línea de comando de Lua. Después, utilice CTRL-] para salir de miniterm, y, luego, ejecute luatool.py. La razón al hacerlo así que es que luatool es menos tolerante al ruido en el puerto de serie. Así que, primero debemos ejecutar miniterm para limpiar el canal.

2

Aspectos básicos de la programación en NodeMCU

Hasta ahora ha visto cómo se cargan y ejecutan aplicaciones de Lua en NodeMCU. En esta sección revisaremos algunas técnicas básicas para ejecutar aplicaciones de NodeMCU.

2a

Obtener wifi

Una de las principales funciones de NodeMCU es sus capacidades wifi ya integradas. En el script init.lua es posible conectar el dispositivo NodeMCU a cualquier red wifi con pocas líneas de código.

-- configurar la wifi
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")

Observe que para unirse a la wifi tendrá que saber el nombre de la red y su contraseña. Si el dispositivo se va a colocar en diferentes entornos, una técnica habitual es ejecutar un bucle en una lista de pares de nombres y contraseñas de redes conocidas.

2b

Conectar a Internet

El SDK de NodeMCU contiene un módulo HTTP para realizar solicitudes HTTP a través de Internet. Cuando construya su firmware de NodeMCU, tendrá que seleccionar las opciones HTTP que quiere incluir en este módulo. El siguiente fragmento de código muestra cómo realizar una solicitud HTTP GET, y cómo ejecutar algo de código cuando se completa esta solicitud. En la función de devolución de llamada, el argumento code es el valor de retorno HTTP (por ejemplo, 200 significa éxito y 404 significa que el URL no es accesible), y el argumento data es el contenido del mensaje de respuesta HTTP.

geturl = "http://www.ibm.com/"
    http.get(geturl, nil, function(code, data)
        -- Apagar el LED de la tarjeta NodeMCU
end)
2c

Acceder a los conectores de GPIO

Los conectores de General Purpose Input Output (GPIO) son conectores digitales de la tarjeta NodeMCU DEVKIT. Cada conector puede tener sólo dos estados: un estado de baja tensión y un estado de alta tensión, representados por 0 y 1 respectivamente. Desde la aplicación NodeMCU Lua se puede leer el estado de cada conector y, después, establecer el estado.

-- Leer el estado del CONECTOR Núm. 5 de GPIO. El valor val es 0 o 1
gpio.mode(5, gpio.INPUT)
val = gpio.read(5)


-- Establecer que el estado del CONECTOR N.º 5 de GPIO sea ALTO
gpio.mode(5, gpio.OUTPUT)
gpio.write(5,gpio.HIGH)
2d

Lectura de señales analógicas

Aunque los conectores de GPIO son digitales, algunos sensores de IoT envían datos como señales analógicas. Es decir, la tensión del cable de entrada representa los datos. Por ejemplo, el nivel de tensión real de un sensor de temperatura puede indicar la lectura de temperatura. En la tarjeta NodeMCU DEVKIT, el conector A0 puede funcionar como un conector ADC (Conversor de Analógico a Digital). Cuando un cable de entrada se conecta a A0, su nivel de tensión entre 0 a 3,3 V se convertirá en un número entero entre 0 y 1024. El siguiente fragmento de código muestra cómo leer un valor análogo de un conector A0.

-- Leer el nivel de tensión de A0. El valor v va de 0 a 1024
adc.force_init_mode(adc.INIT_ADC)
v = adc.read(0)

El conector ADC puede sólo convertir la tensión de 0 a 3,3 V. Si su sensor produce una tensión analógica que se sale de se rango (como de 0 a 5 V), tendrá que añadir una resistencia entre el cable de entrada y el conector A0. Añadir esta resistencia es fácil cuando se conecta la tarjeta NodeMCU DEVKIT a una placa de pruebas.

Conclusión

En este artículo, le he presentado NodeMCU DEVKIT. Es una eficiente solución, fácil de utilizar y de muy bajo costo para el desarrollo de aplicaciones de IoT. Para los principiantes de IoT, creo que NodeMCU es una de las mejores opciones para pasar de la creación de prototipos a producción.

En mi siguiente artículo utilizo NodeMCU como ejemplo para mostrarle cómo desarrollar una solución completa para sensores IoT con servicios MQTT de backend.


Recursos para Descargar


Tema relacionado


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Internet of Things
ArticleID=1062684
ArticleTitle=Conozca NodeMCU y su placa DEVKIT
publish-date=08072017