Introducción y programación de la placa ESP8266 NodeMCU

El ESP8266 NodeMCU es un pequeño microcontrolador que tiene GPIO y puede conectarse a Internet a través de WLAN. Esto y el bajo precio lo hacen muy interesante en comparación con Arduinos, por ejemplo. En los próximos tutoriales, queremos usar los módulos económicos ESP8266 para enviar datos a través de una conexión Wifi a la Raspberry Pi, que actúa como el «núcleo».

Este tutorial trata sobre la introducción y la configuración general y comienza primero con un NodeMCU ESP8266.

Piezas de hardware requeridas

Hay diferentes modelos del ESP8266, el más económico (ESP-01) solo tiene cuatro pines GPIO. Esto debería ser suficiente para aplicaciones mínimas. Si se necesitan más pines de hardware, el ESP-12 es la mejor opción. Este último también está disponible como una «placa de desarrollo», lo que hace innecesarios los adaptadores.

Antes de comenzar, debe asegurarse de qué versión es adecuada para usted. Este y todos los próximos tutoriales serán compatibles con ambas versiones.

  • El módulo NodeMCU ESP-12 tiene la ventaja de que se puede conectar a través de un cable MicroUSB y tiene un botón de reinicio. Si solo necesita el módulo sin una placa de desarrollo (por ejemplo, debido a limitaciones de espacio), también puede comprarlo por separado.

Si no tienes una placa integrada, necesitas lo siguiente:

Si desea recrear el ejemplo al final, también debe tener algunos LED allí.

Configuración y cableado

En primer lugar, tenemos que conectar el ESP8266 a un puerto USB de nuestro ordenador. Con la placa de desarrollo, es suficiente conectar un cable micro USB. Sin dicha placa tenemos que usar el adaptador USB-TTL. Para ello, es importante que conozcamos la asignación de pines de nuestro módulo ESP.

Para los dos ESP-01 y ESP-12, he insertado la asignación de pines aquí: Vista superior del ESP8266 NodeMCU ESP-01 (fuente)ESP8266 NodeMCU ESP-12 Pinout

Puede encontrar una asignación de todos los modelos (ESP-05, ESP-07, etc.) aquí.

Ahora tenemos que conectar el módulo al adaptador USB FT232. Este tiene 6 pines, de los cuales usaremos 4. El etiquetado de los pines no es directamente visible ya que está entre el puente y los pines reales.

Los siguientes pines del módulo ESP8266 NodeMCU se conectan primero al convertidor USB-TTL mediante cables puente:

Adaptador serie USB-TTL ESP8266FT232
CCV CCV
CH_PD CCV
TXD Tx
TIERRA TIERRA
RXD Rx
GPIO 0 GND (temporal)

Por cierto, la conexión de GPIO0 a GND solo es importante al flashear. Después de que el firmware se haya actualizado correctamente, puede desconectar este pin de GND.

Actualización de firmware

Primero, conecte el adaptador USB a su PC. El ESP8266 debe reconocerse automáticamente y los controladores deben instalarse automáticamente en Windows 7/8/10.

Entonces necesitamos la herramienta NodeMCU Flasher. De este existe una versión de 32 bits y de 64 bits, las cuales se deben descargar de acuerdo al sistema operativo.

Inicie el programa y seleccione el puerto correspondiente al que está conectado el ESP82166. Por lo general, esto se reconoce automáticamente (siempre que no haya más de un módulo conectado). Después de verificar, presione Flash (F) y espere a que se complete el proceso. La dirección Mac debe mostrarse directamente:

El equipo de desarrollo probablemente esté en proceso de hacer que la herramienta esté disponible para Linux y Mac. Si desea actualizar el firmware algún día, puede encontrar más información aquí.

Por ejemplo, puede cargar firmware personalizado desde aquí (con más bibliotecas incluidas como estándar (como http, etc.). Esto está en el formato de archivo «.bin» y se puede usar en la pestaña «Configuración» en lugar del predefinido firmware Conecte que la velocidad en baudios en estas compilaciones personalizadas es 115200 y no 9600 (si las usa).

Una vez que el firmware se haya transferido con éxito, puede desconectar GPIO0 de GND y cerrar la herramienta de actualización.

Conexión al ESP8266

El microcontrolador ESP8266 NodeMCU se puede programar usando el lenguaje LUA (por cierto, esto también ocurre en nuestro script de telegrama automático). Para transferir el código del programa a este, primero tenemos que establecer una conexión en serie. La forma más fácil de hacerlo es con la ayuda de una herramienta.

Para ello utilizo la herramienta “ESPlorer”, que fue escrita en Java y por lo tanto puede ser utilizada en todos los sistemas operativos. Primero, descárguelo de la página del desarrollador y descomprímalo.

En sistemas operativos Windows es suficiente iniciar el “ESPlorer.bat” asociado.

La selección del puerto vuelve a estar disponible en la pestaña derecha. Seleccione el puerto correspondiente (para mí es COM5) con una tasa de baudios de 9600 (en versiones anteriores era 115200). Ahora haga clic en el botón Abrir.

Por lo general, no sucede mucho al principio, excepto por este texto:

PORT OPEN 9600  Communication with MCU..

Primero debe reiniciar el microcontrolador. Presionar el botón de reinicio en una placa de desarrollo es suficiente. Sin una placa, el pin RST (ver arriba para la asignación) debe conectarse brevemente a GND. Aparece entonces el siguiente mensaje:

Got answer! Communication with MCU established. AutoDetect firmware...  Can't autodetect firmware, because proper answer not received (may be unknown firmware).  Please, reset module or continue.  Self adjust flash size.  NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4 lua: cannot open init.lua >

¡Ahora lo has logrado! Aquí ya se pueden ingresar comandos a través de LUA, que luego se ejecutan una vez. Por ejemplo, puede ingresar lo siguiente en la parte inferior:

print("Hello World")

Por supuesto, también es posible ejecutar el código del programa inmediatamente después de iniciarlo. Para hacer esto, el código debe escribirse en un archivo «init.lua», pero llegaremos a eso en un momento.

Por cierto: en teoría, también es posible conectarse a través de Putty o Arduino IDE o cualquier programa que pueda establecer una conexión en serie. En mi opinión, la herramienta ESPlorer es la opción más conveniente.

Primera prueba: servidor

La página de NodeMCU tiene algunos ejemplos (a continuación), dos de los cuales queremos probar.

El primer ejemplo es un pequeño servidor web que se ejecuta bajo la dirección IP local del ESP8266. Por supuesto, este primero tiene que estar conectado a la WLAN.

En el lado izquierdo del ESPlorer puedes copiar el siguiente código:

wifi.setmode(wifi.ESTACIÓN)

–wifi.sta.config(«SSID»,»contraseña»)

wifi.sta.config {ssid=SSID, pwd=SSID_CONTRASEÑA}

— un servidor http simple

srv=net.createServer(net.TCP)

srv:escucha(80,función(conexión)

conexión: on («recibir», función (conexión, carga útil)

imprimir (carga útil)

conn:send(«

Hola, NodeMcu.

«)

fin)

fin)

Por supuesto, los datos de WLAN (SSID = nombre, contraseña) deben reemplazarse con los de su red.

Luego presione «Enviar a ESP» (es posible que deba guardar el archivo localmente de antemano).

Para averiguar la dirección IP, puede ingresar lo siguiente en la vista derecha a continuación:

Esto da una salida como esta:

192.168.1.77    255.255.255.0    192.168.1.1

La primera dirección IP especificada es la de la red local. Si su computadora también está en esta red, simplemente ingrese esta IP en su navegador y debería aparecer lo siguiente:

Tan pronto como llame a esto, el registro en la ventana derecha de ESPlorer también debería mostrar algo.

Si desea colocar el archivo en el inicio automático, guárdelo en «init.lua» y transfiéralo al ESP.
Si quieres borrarlo algún día, puedes hacerlo de la siguiente manera (documentación):

file.remove("init.lua")

Conexión del ESP8266 NodeMCU GPIO

Finalmente, queremos usar los GPIO y dejar que se encienda un LED.

Asegúrese de que la numeración de GPIO, al igual que con Raspberry Pi, no coincida con la asignación de pines. Por ejemplo, con ESP-01 GPIO0 = Pin3 y GPIO2 = Pin4. En el código, le damos la numeración del pin. La tarea se puede encontrar aquí.

Índice IOESP8266 pinÍndice IOESP8266 pin
0 GPIO16 7 GPIO13
1 GPIO5 8 GPIO15
2 GPIO4 9 GPIO3
3 GPIO0 10 GPIO1
4 GPIO2 11 GPIO9
5 GPIO14 12 GPIO10
6 GPIO12

Con el ESP-12 NodeMCU cabe señalar que los D-Pins (D0, D1, etc.) no representan los números GPIO, sino la numeración IO/Pin:

Con el siguiente script, puede hacer parpadear un LED en GPIO2 (extremo largo del LED en GPIO, extremo corto en GND):

patilla = 4 — GPIO2

gpio.mode(pin,gpio.SALIDA)

mientras que cierto

gpio.write(pin,gpio.HIGH)

tmr.delay(1000000)

gpio.write(pin,gpio.BAJO)

tmr.delay(1000000)

fin

En la página de referencia de NodeMCU puede encontrar más pequeños ejemplos.

¿Qué proyectos (especialmente en relación con Raspberry Pi) debo implementar a continuación?