wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija
wifi.sta.connect() --conectar
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
conn:send("HOLA MUNDO") --envia al cliente. HOLA MUNDO.
end)
end)
pin=4 --asignamos valor 4 para la variable pin
gpio.mode(pin, gpio.OUTPUT) --configuramos el pin 4 como salida.
wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija
wifi.sta.connect() --conectar
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
--activacion de la salida D1 del ESP8266-1
if payload=="ledon\r" then --secuencia para encender led
gpio.write(pin, gpio.HIGH) --encender led
conn:send("Led On") --envia al cliente.mensage
print("evento on")
elseif payload=="ledoff\r" then --secuencia para apagar led
gpio.write(pin, gpio.LOW) --apagar led
conn:send("Led Off") --envia al cliente.mensage
print("evento off")
end
end)
end)
aqui un video de su funcionamiento: recepcion="null"
wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija
wifi.sta.connect() --conectar
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
end)
end)
--configura uart
uart.setup(0,9600,8,0,1)
print ("uart.setup(0,9600,8,0,1) finished")
print ("waiting for serial data....")
--recepcion de la usart
uart.on("data","\r",function(data)
print(data) --imprime el dato recivido por la usart
recepcion=data
if data=="quit\r" then --palabra para salir del modo usart
uart.on("data")
end
end, 1)-- valor 0 no entra en modo interprete.pero acepta binarios
-- valor 1 pude entrar en modo interprete
recepcion="null"
wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija
wifi.sta.connect() --conectar
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
tmr.delay(1000000) -- 1 segundos de retardo
conn:send(recepcion) --envia al cliente.datos recibidos de la uart
end)
end)
--configura uart
uart.setup(0,9600,8,0,1)
print ("uart.setup(0,9600,8,0,1) finished")
print ("waiting for serial data....")
--recepcion de la usart
uart.on("data",10,
function(data)
print(data) --imprime el dato recivido por la usart
recepcion=data
if data=="quit123456" then --palabra para salir del modo usart
uart.on("data")
end
end, 0)-- valor 0 no entra en modo interprete.pero acepta binarios
-- valor 1 pude entrar en modo interprete
aqui se espera que se recivan 10 bytes.y para salir del modo usart habria que mandar quit123456 = 71 75 69 74 31 32 33 34 35 36 en hexagesimal.pero como tu lo pusistes no se puede copiar y pegar sin los numeros
de linea.cosa que es un estorbo.si se pudiera poner del estilo que tu indicas pero sin numeros
staticIp=string.gsub (payload, "ip=","" ) --busqueda y reemplazo
out=string.match(payload,"ip=") --comprueba si coincide el patron
if out~=nil then wifi.sta.setip({ip=staticIp}) end --imprime resultado
lo que hace es buscar la cabecera "ip=" y cojer los datos que hay detras de esta combinacion.en este caso la IPvalla.vas avanzando. la verdad es que lo mejor es usar una IP fija.en una practica que he hecho he configurado el modulo con
la IP 192.168.1.5 y he puesto una condicional para que mediante un cliente pueda cambiarla a otra IP.la idea es crear una red en el hogar
pero cambiando todas las IP de cada uno de los modulos sin tener que programarlos uno a uno.
este es parte del codigo:
Código: [Seleccionar]staticIp=string.gsub (payload, "ip=","" ) --busqueda y reemplazolo que hace es buscar la cabecera "ip=" y cojer los datos que hay detras de esta combinacion.en este caso la IP
out=string.match(payload,"ip=") --comprueba si coincide el patron
if out~=nil then wifi.sta.setip({ip=staticIp}) end --imprime resultado
pero me falta almacenar el dato de la IP en la memoria y tambien la restauracion de esta cuando se inicia el modulo.
no te preocupes.pronto llegara el ESP32.y quizas con un precion apetecible.
respecto a las pruebas que estoy realizando con la uart.me he dado cuenta de que ni caracter de control \r ni numero de bytes a recibir.
ya que si especificamos un numero minimo de bytes a recibir,no se producira el evento de recepcion hasta que no se llene el buffer.
asi que la opcion esta en recibir los datos de byte en byte.ire creando un string caracter a caracter dentro de un tiempo predeterminado.
PD: es magnifica la informacion que estas poniendo.haber si llenamos esto de ejemplos y tener un sitio donde referirse.
trama=""
wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija
wifi.sta.connect() --conectar
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
tmr.delay(1000000) -- 1 segundo de retardo
conn:send(trama) --envia al cliente.datos recibidos de la uart
trama="" --borra la trama
end)
end)
--configura uart
uart.setup(0,9600,8,0,1)
print ("uart.setup(0,9600,8,0,1) finished")
print ("waiting for serial data....")
--recepcion de la usart
uart.on("data",1, --recepcion de caracter en caracter
function(data)
trama=trama..data--recepcion --concatenar strings
--esta rutina solo es para modo debug.ya que al trabajar con valores hexagesimales no podemos prescindir de ningun
--valor entre 0x00 y oxff
--if data=="-" then --palabra para salir del modo usart
--print ("salida....")
--uart.on("data")
--end
end, 0)-- valor 0 no entra en modo interprete.pero acepta binarios
-- valor 1 pude entrar en modo interprete
wifi.setmode(wifi.STATION) --modo estacion
wifi.sta.config("SSID","clave") --nombre del punto de acceso wi-fi de nuestro router.y la clave
file.open("ip.lua","r") --abre el archivo en formato lectura
ipMem=file.read() --introduce el contenido "IP" en la variable ipMem
file.close() --cierra el archivo
wifi.sta.setip({ip=ipMem,netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija.donde ipMem es la ip almacenada en un archivo.
wifi.sta.connect() --conectar con el cliente
print("ESP8266 mode is: " .. wifi.getmode()) --indica el modo wi-fi.(estacion en este caso)
print("The module MAC address is: " .. wifi.ap.getmac()) --indica la mac de nuestro dispositivo
print("Config done, IP is "..wifi.sta.getip()) --indica la IP que nos ha asignado el router.
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen(80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
staticIp=string.gsub (payload, "ip=","" ) --busqueda y reemplazo
out=string.match(payload,"ip=") --comprueba si coincide el patron ip=
if out~=nil then saveIp() --si coincide,introduce la ip nueva. ejm.. mandar ip=192.168.1.10
end --y el modulo se configurara con esta ip
end)
end)
function saveIp () --funcion para el salvado de la ip
wifi.sta.setip({ip=staticIp}) --configura ip estatica
file.open("ip.lua","r+") --abre arcchivo
file.write(staticIp) --guarda valor de IP
file.close() --cierra archivo
end
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
endGET /foros/index.php?userid=30 HTTP/1.1
Host: www.todopic.com.ar
Connection: keep-alive
Cache-Control: max-age=0
***** Aca hay mas *********
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
userid=30&name2=value2
Grupo1 : "GET"
Grupo2 : "/foros/index.php"
Grupo3: "userid=30"GET /foros/index.php?userid=30 HTTP/1.1
Host: www.todopic.com.ar
Connection: keep-alive
Cache-Control: max-age=0
***** Aca hay mas ****
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
userid=30&name2=value2([A-Z]+) (.+)?(.+) HTTP
([A-Z]+) (.+)\?(.+) HTTP
([A-Z]+) (.+) HTTPpin4=4 --asignamos valor para la variable pin
--Numeros de los pin
--gpio 8=D8 de lolin
--gpio 7=D7 de lolin
--gpio 6=D6 de lolin
--gpio 5=D5 de lolin
--gpio 4=D4 de lolin y led azul del esp8266-12F
--gpio 3=D3 de lolin
--gpio 2=D2 de lolin
--gpio 1=D1 de lolin
--gpio 0=D0 de lolin
gpio.mode(pin4, gpio.OUTPUT) --configuramos el pin 4 como salida.
wifi.setmode(wifi.STATION) --modo estacion
ssid="nombre_de_la_wi_fi"
clave="clave_de_wifi_del_router"
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija.donde ipMem es la ip almacenada en un archivo.
wifi.sta.config(ssid,clave) --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.connect() --conectar con el cliente
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen (80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
if payload=="ledon\r" then --secuencia para encender led
gpio.write(pin4, gpio.HIGH) --encender led
conn:send("Led On") --envia al cliente.mensage
print("evento on ",pin4) --envia datos a la usart
elseif payload=="ledoff\r" then --secuencia para apagar led
gpio.write(pin4, gpio.LOW) --apagar led
conn:send("Led Off") --envia al cliente.mensage
print("evento off ",pin4) --envia datos a la usart
end
end)
end)
pin4=4 --asignamos valor para la variable pin
--Numeros de los pin
--gpio 8=D8 de lolin
--gpio 7=D7 de lolin
--gpio 6=D6 de lolin
--gpio 5=D5 de lolin
--gpio 4=D4 de lolin y led azul del esp8266-12F
--gpio 3=D3 de lolin
--gpio 2=D2 de lolin
--gpio 1=D1 de lolin
--gpio 0=D0 de lolin
gpio.mode(pin4, gpio.OUTPUT) --configuramos el pin 4 como salida.
gpio.write(4, gpio.HIGH) --apaga led del ESP8266
wifi.setmode(wifi.STATION) --modo estacion
ssid="nombre_de_la_wi_fi"
clave="clave_de_wifi_del_router"
wifi.sta.setip({ip="192.168.1.5",netmask="255.255.255.0",gateway="192.168.1.1"}) --configura IP fija.donde ipMem es la ip almacenada en un archivo.
wifi.sta.config(ssid,clave) --nombre del punto de acceso wi-fi de nuestro router.y la clave
wifi.sta.connect() --conectar con el cliente
wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T)
print("\n\tSTA - CONNECTED".."\n\tSSID: "..T.SSID.."\n\tBSSID: "..
T.BSSID.."\n\tChannel: "..T.channel)
gpio.write(4, gpio.LOW) --enciende led del ESP8266
end)
wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
print("\n\tSTA - DISCONNECTED".."\n\tSSID: "..T.SSID.."\n\tBSSID: "..
T.BSSID.."\n\treason: "..T.reason)
gpio.write(4, gpio.HIGH) --apaga led del ESP8266
end)
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen (80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
if payload=="ledon\r" then --secuencia para encender led
gpio.write(pin4, gpio.HIGH) --encender led
conn:send("Led On") --envia al cliente.mensage
print("evento on ",pin4) --envia datos a la usart
elseif payload=="ledoff\r" then --secuencia para apagar led
gpio.write(pin4, gpio.LOW) --apagar led
conn:send("Led Off") --envia al cliente.mensage
print("evento off ",pin4) --envia datos a la usart
end
end)
end)pin=2
gpio.mode(pin,gpio.INT,gpio.PULLUP) --configuramos el pin como entrada e interrupcion activada
do
local function pin1cb(level)
print( "esto es una interrupcion" )
gpio.trig(pin, level == gpio.HIGH and "down" or "up")
end
gpio.trig(pin, "down", pin1cb)
end
gpio.write(ledAzul, gpio.LOW) --enciende led del ESP8266
tmr.delay(1000000)
gpio.write(ledAzul, gpio.HIGH) --apaga led del ESP8266
tmr.delay(1000000)
gpio.write(ledAzul, gpio.LOW) --enciende led del ESP8266
tmr.delay(1000000)
gpio.write(ledAzul, gpio.HIGH) --apaga led del ESP8266
tmr.delay(1000000)
-- si durante el reseteo del ESP8266.se mantiene el pin 3(boton Flash) a cero,el archivo init.lua se borrara.esto da la opcion
-- de desbloquear el ESP ante un bucle infinito.
if gpio.read(3)==0 then
print("Init.lua Borrado ")
file.remove("init.lua")
end
--config.lua
--Variables
sec=0
min=0
hor=0
final=0
adcval=1024
limite=500
-- WiFi
WIFI_SSID = "Contador5"--"HUAWEI-E5186-AACA"--"WLAN_05"--"WiFi-RepeaterCH"
WIFI_PWD = ""
MI_IP="192.168.1.5"
-- Confirmation message
print("\nGlobal variables loaded...\n")
--exit_prog.lua
ledAzul=4 --pin 4.led azul del modulo
pinFlash=3 --pin para el borrado del archivo init.lua(boton Flash)
gpio.mode(ledAzul,gpio.OUTPUT) --configuramos el pin ledAzul como salida.
gpio.mode(pinFlash,gpio.INPUT,gpio.PULLUP) --configuramos el pin exit como entrada.
gpio.write(ledAzul, gpio.LOW) --enciende led del ESP8266
tmr.delay(1000000)
gpio.write(ledAzul, gpio.HIGH) --apaga led del ESP8266
tmr.delay(1000000)
-- si durante el reseteo del ESP8266.se mantiene el pin 0(boton Flash) a cero,el archivo init.lua se borrara.esto da la opcion
-- de desbloquear el ESP ante un bucle infinito.
if gpio.read(pinFlash)==0 then
print("Init.lua Borrado ")
file.remove("init.lua")
end
--adc.lua
channel=0 --pin A0 del nodemcu
gpio.mode(channel,gpio.INPUT)
if adc.force_init_mode(adc.INIT_ADC)
then
node.restart()
return -- don't bother continuing, the restart is scheduled
end
--init.lua
dofile ("exit_prog.lua") --opcion para salir del prgrama
dofile ("config.lua") --variables del programa
dofile ("adc.lua") --carga el archivo que gestiona el adc
AP_cfg={} --configura nombre del punto de acceso
AP_cfg.ssid="Contador5"--WIFI_SSID
wifi.ap.config(AP_cfg)
setIP_cfg = --configura IP
{
ip=MI_IP,netmask="255.255.255.0",gateway="192.168.1.1"
}
wifi.ap.setip(setIP_cfg)
wifi.setmode(wifi.SOFTAP) --modo punto de acceso
wifi.sta.connect()
wifi.eventmon.register(wifi.eventmon.AP_STACONNECTED, function(T)
print("\n\tAP - STATION CONNECTED".."\n\tMAC: "..T.MAC.."\n\tAID: "..T.AID)
gpio.write(ledAzul, gpio.LOW) --enciende led del ESP8266
end)
wifi.eventmon.register(wifi.eventmon.AP_STADISCONNECTED, function(T)
print("\n\tAP - STATION DISCONNECTED".."\n\tMAC: "..T.MAC.."\n\tAID: "..T.AID)
gpio.write(ledAzul, gpio.HIGH) --apaga led del ESP8266
end)
srv=net.createServer(net.TCP,60) --crea el servidor.y si no hay trafico,cierra conexion pasados 60s
srv:listen (80,function(conn) --estar a la escucha en el puerto 80.
conn:on("receive",function(conn,payload) --evento de recepcion y carga el valor leido en payload
print(payload) --envia al puerto serie lo que se recive desde el cliente
--print("ssid: ", wifi.sta.getrssi())
conn:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1> Circuito Contador </h1>\r\n")
print (time)
conn:send("<h3> Tiempo luz encendida: </h3>"..time)
conn:send("<h3> Intensidad de la Luz. valor entre 0 y 1024. limite:500 </h3>")
conn:send("<h3> Valor Actual </h3>"..adcval.."<pre></pre>")
conn:send('<form method="post">')
conn:send('<input type="submit" value="Actualizar" style="height: 50px; width: 200px"/>')
conn:send('</form></body></html>')
if (adcval<limite) then
conn:send("\r\n\r\n<h2> FINALIZADO </h2>")
else
conn:send("\r\n\r\n<h2> RUN </h2>")
end
end)
tmr.delay(1000000) -- 1 segundo de retardo
end)
mytimer = tmr.create()
mytimer:register(1000, tmr.ALARM_AUTO, function() contador() end )
mytimer:start()
function contador ()
if (adcval<limite) then mytimer:stop() end --para el contador si el valor de luminosidad esta por debajo del limite
adcval=adc.read(channel)
sec=sec+1
if (sec==60) then sec =0 min=min+1 end
if (min==60) then min = 0 hor=hor+1 end
if (string.len(hor)<2) then hor="0"..hor end --ajusta a dos cifras
if (string.len(min)<2) then min="0"..min end --ajusta a dos cifras
if (string.len(sec)<2) then sec="0"..sec end --ajusta a dos cifras
time=(hor)..":"..(min)..":"..(sec)..":"
print (time)
print (adcval)
end