2.- Con la conexión al USB/UART de dicha página vamos a cargar el Firmware requerido. Para ello es necesario unir momentaneamente el pin GPIO0 a masa. Ejecutamos el cargador de firm XTCOM-UTIL, elegimos la velocidad de 9600 baudios y conectamos. Con la opción Flash Image Download cargamos el firmware LUA nodemcu_latest.bin
El módulo ESP8266 nos permite añadir conexión Wifi a nuestro Arduino por unos 3€. Pero resulta que el esp8266 tiene en su interior su propio procesador con sus correspondientes salidas y entradas digitales y resulta también que existe un firmware que nos permite programar dicho procesador con el lenguaje LUA, siendo innecesaria la presencia de un Arduino para muchas tareas. Por un precio ridículo podemos distribuir diversos ESP8266 por nuestra casa para realizar diversas funciones de control o monitoreo y todo ello controlado via Internet desde un ordenador o un teléfono móvil. Es el auténtico Internet de las cosas (IoT) Veamos el proceso por pasos para ponerlo en marcha
3.- Quitamos el puente a GPIO0 y ejecutamos LUALoader.exe que descargamos de aqui. Si tenemos conectado el USB/UART hará la conexión automáticamente. Cargaremos el programa que queramos con Upload file... Y seguidamente pulsamos DoFile para que se ejecute.Cuando el programa tiene el nombre init.lua se ejecutará automáticamente cada vez que alimentemos al esp8266.
Aparte de cargar programas en el ESP8266, también se puede interactuar directamente con el. Basta poner nuestro SSDI y Clave para controlar los GPIO, tanto como entrada como en salida. Con Remove borramos el programa cargado. Con cat se ve el programa cargado. Con el Firmware LUA este módulo tiene unas enormes posibilidades ya que las posibilidades de programación son enormes. Ya hay también un IDE especifico para programa el esp8266.
Por último dejo un programa que nos permite controlar un LED a través de una página Web y ver el estado de otro GPIO. El LED se enciende durante 3'' al pulsar ON o si GPIO2 esta en alto. Además he puesto que se refresque cada 10'' para ver cambios en el Pin de entrada.
--Con 192.168.1.xxx/?pin=ON enciende el LED en GPIO0 (cero) durante 3'' wifi.setmode(wifi.STATION); wifi.sta.config("SSDI","clave"); gpio.mode(3, gpio.OUTPUT) gpio.mode(4,gpio.INPUT,gpio.FLOAT) srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end client:send("<meta http-equiv=\"refresh\" content=\"10\">") buf = buf.."<h2> Cambiar salida Pin GPIO0</h2><form src=\"/\">Cambiar PIN0 <select name=\"pin\" onchange=\"form.submit()\">"; local _on,_off = "",""
--Enciende LED por 3'' si GPIO4 esta alto if( gpio.read(4)==1) then client:send("<h1> Entrada de GPIO2= HIGH</h1>") gpio.write(3, gpio.HIGH); tmr.delay(3000000) ; gpio.write(3, gpio.LOW); end if( gpio.read(4)==0) then client:send("<h1> Entrada de GPIO2= LOW</h1>") end
--Ejecuta ordenes segun WEB if(_GET.pin == "ON")then _on = " selected=true"; --3 es el pin de GPIO0 gpio.write(3, gpio.HIGH); tmr.delay(3000000) ; gpio.write(3, gpio.LOW); elseif(_GET.pin == "OFF")then _off = " selected=\"true\""; gpio.write(3, gpio.LOW); end buf = buf.."<option".._on..">ON</opton><option".._off..">OFF</option></select></form>"; client:send(buf); client:close(); collectgarbage(); end) end)
Conectado directamente al GPIO he podido activar un pequeño rele de 5v y 1A de salida, aunque en el limite. Mejor un rele de estado solido a 3v