0

Construir un servidor HTTP con NodeMCU ESP 12-E y Lua

¡Buenas, gente! Hoy os explicaré cómo construir un pequeño servidor HTTP con la placa NodeMCU y Lua, utilizando la IDE de ESPlorer.

Sería bueno antes de seguir este tutorial estuviéramos un poco familiarizados con la sintaxis del lenguaje Lua, especialmente como se trabaja con las funciones y con las ‘clases‘ (porque, en realidad, Lua no tiene clases).


Paso 1 – Instalar ESPlorer

NOTA: Para utilizar ESPlorer, es necesario tener instalado java.

ESPlorer es una IDE para programar módulos ESP8266 como NodeMCU. Proporciona todas las herramientas para programar este tipo de placas, ya sea en LUA o en Python (este último sólo para algunos tipos de placas). También permite trabajar con comandos AT.

ESPlorer es un programa multiplataforma, disponible para Windows, Linux, Mac y Solaris.

El primer paso, pues, será descargarnos ESPlorer desde AQUÍ (hay un apartado llamado “ESPlorer Downloads”). Se descargará un fichero .zip que tendremos que descomprimir y ejecutar el archivo “ESPlorer.jar” que hay dentro.

Si estamos en Windows deberemos hacerlo en modo administrador. En Linux, como superusuario.


Paso 2 – Conectar la placa

Conectamos la placa y abrimos ESPlorer. Veremos una pantalla así de bonita:

En la pantalla de la derecha aparecerá un desplegable con todos los dispositivos conectados al ordenador por USB, entre ellos nuestra placa NodeMCU. Seleccionamos su dirección (en mi caso, ‘/dev/ttyUSB0’).

Cambiamos el Baud Rate por 9600. Si no funciona, lo probaremos también con 115200 (dependerá de nuestro modelo).

Finalmente pulsamos en el botón de ‘Open’:

Veremos que aparece un texto como este:

Pulsamos el botón de ‘reset’ de la placa (al lado del puerto de série) y el texto cambiará para indicar que se ha inicializado la placa:

¡Ya estamos listos para empezar a trabajar! Al trabajar con ESPlorer, las instrucciones no se cargan en la memoria de la placa como es el caso de Arduino y PIC, sino que se ejecutan dinámicamente al enviarlas a la placa. Vamos a probarlo, ¿de acuerdo?

En la pantalla de la izquierda escribimos:

print('Helou')

Y puslamos el botón ‘Send to ESP’:

Veremos que en la pantalla de la derecha, ahora, aparece este texto:

Si volvemos a pulsar ‘Send to ESP’, la instrucción se volverá a repetir:

Por tanto: las instrucciones se ejecutan al enviarse.


Paso 3 – Configurar el servidor HTTP

Vamos a construir un servidor muy simple que muestre el texto ‘ROBOLOGS’ en nuestro navegador, ¿vale? (si sabéis un poco de HTML, podéis hacer que diga más cosas). Podemos enviar este codigo a la placa con las instrucciones de una en una (eso sí, borrando la instrucción anterior antes de enviar la nueva) o podemos copiar el código completo que hay al final y enviarlo todo de golpe.

Empezaremos por poner la antena en modo estación:

wifi.setmode(wifi.STATION)

Después nos conectaremos a internet. Tenéis que cambiar el texto ‘NOMBRE’ por el nombre de vuestra red y ‘PSWD’ por la contraseña:

wifi.sta.config("NOMBRE","PSWD")

La siguiente instrucción nos servirá para saber la IP de nuestra placa (además, también mostrará la máscara de nuestro router y su dirección IP).

print(wifi.sta.getip())

La dirección que nos interesa es la primera (izquierda)

Después creamos un servidor con el protocolo TCP:

srv = net.createServer(net.TCP)

Después le diremos al servidor que escuche el puerto 80, al que normalmente se conectarán todas las conexiones entrantes:

srv:listen(80, function(conn)

Cuándo se reciba una conexión, le diremos al servidor que nos muestre la información de esta conexión y le envíe el mensaje:

conn:on("receive", function(sck, info_conexion)
        print(info_conexion)
        mensaje = "<html>ROBOLOGS</html>"
        sck:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" .. mensaje)
    end)

¿Qué significa el string “HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n”? Esto son las cabeceras HTTP, necesarias para que cualquier navegador pueda conectarse con nuestro servidor. Da información sobre la versión de HTTP que se utiliza, así como el tipo de datos que se van a transmitir.

Finalmente cerramos la conexión una vez se han enviado los datos:

    conn:on("sent", function(sck) sck:close() end)
end)

El código completo es el que hay abajo. ¡Acordaos de cambiar el nombre de la red y el password!

wifi.setmode(wifi.STATION)
wifi.sta.config("NOMBRE","PSWD")
print(wifi.sta.getip())

srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
    conn:on("receive", function(sck, info_conexion)
        print(info_conexion)
        mensaje = "<html>ROBOLOGS</html>"
        sck:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" .. mensaje)
    end)
    conn:on("sent", function(sck) sck:close() end)
end)

¡Hecho! Ahora abrid vuestro navegador de confianza y teclead la dirección de vuestro servidor (ej. 192.168.1.135). Si no recordáis cuál era su dirección IP, podéis enviar el comando ‘print(wifi.sta.getip())’ para verla. Si todo ha funcionado bien (y tenéis conexión a internet) veréis una página de texto plano con el mensaje ‘ROBOLOGS’.

Si os ha surgido algún problema durante el tutorial o tenéis alguna duda escribidme un comentario. ¡Hasta la próxima! 😉

 

N4n0

Creado para cuidar de los sistemas de laboratorios tan secretos que ni él tiene la seguridad de estar trabajando en ellos, a Nano le gusta dedicar los ciclos que no gasta en tapar agujeros de Firewall para dedicarse al hobby de la electrónica o a ver películas de ciencia ficción. Entre su filmoteca de culto, ocupan un lugar destacado Tron, The Matrix y Johnny Mnemonic.

Antes de comentar, por favor, lee las Normas

Ten el honor de decir "Primero!"

avatar
wpDiscuz