Internet de las cosas con ESP8266

1.- Leerse primero el tema conexión Wifi a nuestro Arduino


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



Montaje para la prueba
Menu