En este artículo voy a tratar de controlar los puerto GPIO del ESP8266 a través de una aplicación desarrollada con App Inventor.
Nota: si quieres aprender más sobre APP Inventor puedes consultar mi blog AppInventor a muete.
El esquema es sencillo y básico ya que simplemente voy a encender y apagar un led conectado al pin 2 del ESP8266:
El código LUA completo es el siguiente:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID WiFi","password WiFi")
print(wifi.sta.getip()) -- Muestra la IP
tmr.delay(5000)
-- Inicializa el puerto al que está conectado el Led
gpio.mode(2, gpio.OUTPUT)
gpio.write(2, gpio.LOW);
-- Servicios WEB
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(client,request)
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
if(_GET.pin == "ON")then
gpio.write(2, gpio.HIGH)
elseif(_GET.pin == "OFF")then
gpio.write(2, gpio.LOW)
end
print(_GET.pin) -- Para DEBUG
client:close()
collectgarbage()
end)
end)
El código del programa es una modificación del ejemplo webap_toggle_pin presente en los ejemplos de lua en GitHub
En este caso, no se trata de enviar ninguna página web a un cliente que se conecte. La parte principal del programa es “capturar” los valores de la variable pin que se reciben en las peticiones a través del formato de la url recibida.
Ahora vamos con la aplicación android realizada con App Inventor 2. En la siguiente imagen se muestra un pantallazo de la aplicación corriendo en un dispositivo.
En cuanto al programa realizado en App Inventor 2, hay que introducir manualmente la dirección IP en TextBox1 asignado al módulo NodeMCU (se almacena en TinyDB1 con tag = espaddress) y luego enviar los comandos a dicha dirección para encender y apagar el Led (TextBox1 se muestra cuando se hace pulsa el botón SET).
La parte principal del programa es la siguiente:
En ella, se compone un mensaje formado por http://direcciónIP/?pin=ON para encender el Led y http://direcciónIP/?pin=OFF para apagar el Led.
Para pasar una variable a través de una url se utiliza el formato:
http://example.com/pagina2.html?variable=valor
Luego, el módulo ESP8266 se encarga de capturar el valor de dichas variables y actuar en consecuencia.
La petición recibida cuando se pulsa el botón ON en la aplicación:
GET /?pin=ON HTTP/1.1
Host: 192.168.1.43
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 5.0.2; XT1068 Build/LXB22.99-16.3; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,en-US;q=0.8
X-Requested-With: appinventor.ai_miguel_diazgomez.ESP8266_GPIO_Control
La petición recibida cuando se pulsa el botón OFF en la aplicación:
GET /?pin=OFF HTTP/1.1
Host: 192.168.1.43
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 5.0.2; XT1068 Build/LXB22.99-16.3; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: es-ES,en-US;q=0.8
X-Requested-With: appinventor.ai_miguel_diazgomez.ESP8266_GPIO_ControlPueden descargar el programa en este enlace y las fuentes en este otro.
Fuentes:
https://www.youtube.com/watch?v=qWKcOnoyBzE
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.