Autor Tema: Esp8266 & LUA  (Leído 15637 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Esp8266 & LUA
« Respuesta #30 en: 06 de Enero de 2016, 17:34:28 »
Hoy he decidido aportar mi granito de arena a nodeMCU y he escrito unas mejoras al driver del LM92.
Ahora estoy esperando que acepten mis agregados:


* Captura de pantalla 2016-01-06 17.31.21.png
(29.81 kB, 990x469 - visto 710 veces)


Saludos!
-
Leonardo Garberoglio

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #31 en: 27 de Enero de 2016, 11:52:30 »
bueno.pues despues de un tiempo.he vuelto a las andadas con este mdulo.he tardado porque los reyes magos me han traido un nuevo
portatil.y estaba habituandome a este windows 8.1  el viejo hera un vista.y varian vastante.crei que seria inconpatible con
la mayoria de programas que uso para la electronica.pero parece que me equivocaba.por ahora me va de perlas.

y tambien estaba liado con la forma en que lua almacena datos en un archivo.para que cuando apaguemos el modulo.estos datos
no se pierdan.

el siguiente codigo es una continuacion del anterior.solo que no implemento la uart hasta que no haga las pruebas en un circuito
real.


Código: [Seleccionar]
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


con este codigo.se establece un enlace con nuestro router.y con un cliente podemos realizar una conexion TCP por el puerto 80.
la parte destacable es el uso del modulo file.que nos permite el almacenamiento de la IP conque configuramos el modulo.

cuando encendemos el modulo.automaticamente el esp8266 es configurado con la IP 192.168.1.5
esta debe de ser cambiada por otra que no este en uso.de lo contrario no se produciria la conecxion.

si se realizara la conecxion.podriamos cambiar la ip por defecto "192.168.1.5" por otra que tubieramos libre.hay que tener
cuidado en no duplicar IPs.ya que al no tener implementado un servidor de DNS.habria conflictos entre ordenadores y tros dispositivos
de nuestra red.

el comando para configurar la IP es por ejemplo:  ip=192.168.1.10    para configurar nuestro modulo con la ip 192.168.1.10
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #32 en: 27 de Enero de 2016, 19:29:26 »

queria explicar el funcionamiento del modulo File. que he usado en el ejemplo anterior.
aqui la API: http://www.nodemcu.com/docs/file-module/

para poder manipular un archivo desde lua.lo primero que hay que hacer es crearlo y cargarlo en el ESP8266.
el archivo que he creado en este caso es   ip.lua

y en este he ingresado los caracteres 192.168.1.5   cuando lo cargo en el ESP.este me manda un error.que me indica que el numero
es incorrecto.y esto es porque no se pude poner punto decimal.mi intencion es poner un string.pero aunque lo ponga entre comillas
me sigue tirando otro error.asi que lo pongo sin comillas y por lo menos me funciona.

para poder modificar el contenido del archivo.primero hay que gestionarlo asi:

file.open(nombre,modo)   --nombre de nuestro archivo y el modo.
var=file.read()       --introducimos en la variable el contenido del archivo abierto
file.close()       --cerramos el archivo.

Los modos los pongo aqui abajo.

"r": modo de lectura (por defecto)
"w": modo de escritura
"a": Modo de anexar
"r +": modo de actualización, se conserva todos los datos anteriores
"w +": modo de actualización, todos los datos anteriores se borran
"a +": append modo de actualización, se conserva los datos anteriores, la escritura sólo se permite al final del archivo

Estos son los diferentes comandos para el uso del modulo File:

file.remove()
file.open()
file.close()
file.readline()
file.writeline()
file.read()
file.write()
file.flush()
file.seek()
file.list()
file.format()
file.rename()
file.fsinfo()

En el enlace anterior se describe como funcionan los diferentes comandos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3213
Re:Esp8266 & LUA
« Respuesta #33 en: 18 de Agosto de 2016, 14:52:33 »
Wow  ((:-))

Que interante, he empezado a practicar con estos modulitos ,sus aportes han sido de mucha ayuda.  :-/ ,muchas gracias!

En mi pc el ESPlorer se ve mal :/ pasas el el puntero del mouse y aparece fragmentos de pantalla de la misma app,todo un revoltijo,por ahora uso el LUaloader. -.-

Saludos!

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #34 en: 23 de Agosto de 2016, 15:36:33 »
me alegra que te sea util.yo he tenido que dejarlo aparcado un tiempo porque estoy con la camara OV7670.y me esta doliendo la cabeza con el.
mi hermano esta liado con lua.y ha estad practicando con un protocolo de comunicacion llamado mosquitto.o algo asi.por lo que me ha contado es la caña.

haber si pronto me pongo con ello.saludos.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado kmiz

  • PIC10
  • *
  • Mensajes: 3
Re:Esp8266 & LUA
« Respuesta #35 en: 23 de Noviembre de 2016, 19:56:14 »
Hola, soy nuevo en el foro.
He entrado atraido por este post sobre el 8266.
Yo ando cacharreando con un nodemcu hace algun tiempo.
Tengo problemas para comprender como se interpretan los patrones para los strings.
Veo el manual de lua y veo algun ejemplo, pero no consigo entender como funciona ese apartado.
Cuando tenga un rato pondre algun fragmento de codigo, como por ejemplo para utilizar websockets y asi mantener una conexion permanente en el navegador.
Saludos a todos.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #36 en: 25 de Noviembre de 2016, 11:10:14 »
hola kmiz.ya hace casi un año que tuve que dejar lo del ESP8266 y no estoy al dia.asi que no te sere de mucha ayuda.pero expon tu problema y haber si me acuerdo de algo.

a que te refieres con los patrones para los strings? te refieres al envio de tramas por la usart?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado kmiz

  • PIC10
  • *
  • Mensajes: 3
Re:Esp8266 & LUA
« Respuesta #37 en: 25 de Noviembre de 2016, 22:08:38 »
Gracias por responder.
Con "Patron" me refiero en :
Código: [Seleccionar]
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end

La parte: ([A-Z]+) (.+)?(.+) HTTP") y la parte ([A-Z]+) (.+) HTTP")

Por mas que miro el tutorial de lua no consigo entender el funcionamiento

Conectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8110
Re:Esp8266 & LUA
« Respuesta #38 en: 26 de Noviembre de 2016, 02:45:34 »
Busca por internet "Regular Expresion" o "Regex"

Ahi vas a tener la informacion de que es eso. ( No es especifico de LUA nomas, sino que varios lenguajes mas lo usan )
Tenes tambien de forma online algunas paginas que si vos pones el criterio ( patron, o lo que estes buscando) y pones el texto que te llega, se ilumina donde realmente coincide con eso

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #39 en: 26 de Noviembre de 2016, 14:38:02 »
ufff  :(. parecia que despues de todo este tiempo me acordaria.lo siento pero por ahora estoy en blanco.

pero en el manual: http://www.lua.org/manual/5.1/es/manual.html

esta esto:

string.find (s, patrón [, inicio [, básica]])

Busca la primera aparición de patrón en el string s. Si la encuentra, find devuelve los índices de s donde comienza y acaba la aparación; en caso contrario retorna nil. Un tercer argumento numérico opcional inicio especifica dónde comenzar la búsqueda; su valor por defecto es 1 y puede ser negativo. Un valor true como cuarto argumento opcional básica desactiva las utilidades de detección de patrones, realizando entonces la función una operación de "búsqueda básica de substring", sin caracteres "mágicos" en el patrón. Téngase en cuenta que si se proporciona el argumento básica también debe proporcionarse el argumento inicio.

Si el patrón tiene capturas entonces en una detección con éxito se devuelven los valores capturados, después de los dos índices.



lo que hace es buscar un patron determinado de una cadena string.yo creo que busca una determinada secuencia.
de una respuesta por parte del servidor.

no puedo aclarate nada mas.aunque esto ya lo practique.y no es muy dificil.

creo recordar que cuando recivia la trama del servidor.esta incluia los caracteres HTTP.y lo que se hacia hera
cargar en la variable esta cadena.solo por tener esta secuencia HTTP.no se si me explico.pero si no vuelvo
a practicar no puedo acordarme.
Montando mi primera impresora 3D (Raprep Prusa i3)

Conectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8110
Re:Esp8266 & LUA
« Respuesta #40 en: 26 de Noviembre de 2016, 15:32:32 »
Bueno.. Usualmente cuando uno hace un pedido a una pagina puede ir como GET o POST.

Ejemplo... al abrir la pagina de inicio de este foro. Mi navegador envia una solicitud GET al servidor:

Citar
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 *********

Otro caso seria:

Citar
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
userid=30&name2=value2

El servidor entonces tiene que actuar. Si fue GET los parametros van a ir en la URL, si es POST los parametros van a ir por la cabecera que envíe, esto se puede observar en los ejemplos anteriores.
De esa forma el ESP que estaria funcionando como servidor debe saber exactamente que es lo que le pide el cliente.

Ahora esa expresion regular esta buscando algo que concuerde con lo expresado:

([A-Z]+) (.+)?(.+) HTTP

Tenemos:

([A-Z]+)
Que separaria el primer grupo ( los grupos estan separados en parentesis), que son todas letras mayusculas de la A a la Z y que pueden ocurrir una o varias veces ( por eso el + )

Luego le sigue un espacio, ( caracter 32 de la tabla ASCII )

Luego tenemos el otro grupo
(.+)
Esto nos dice que puede ser cualquier letra ( el punto dice eso) y que se puede repetir muchas veces

Seguimos con un "?", que creo que aca necesita en realidad un caracter de escapees decir deberia ser \?
Eso seguido de otro grupo (.+) el cual puede ser cualquier cosa

Y terminado con " HTTP", es decir el espacio y las letras HTTP.

---------

Ahora miremos el ejemplo del GET y que puse en negrita antes

GET /foros/index.php?userid=30 HTTP/1.1

Si yo lo hago pasar por una expresion regular del estilo : ([A-Z]+) (.+)\?(.+) HTTP

Primero que coincide, por lo cual ya me indica que existe la cabecera, ademas los grupos me quedarian:

Código: [Seleccionar]
Grupo1 : "GET"
Grupo2 : "/foros/index.php"
Grupo3: "userid=30"

Entonces obtuve: El metodo, que es el GET , la pagina que se intenta acceder y los parametros a usar.

En el otro caso que es el de :

([A-Z]+) (.+) HTTP

Seria ideal para un POST, ya que como dijimos estos no poseen los parametros EN la direccion URL, y es por eso que esta alli, ya que en la cabecera post no hay un "?" en la URL, la expresion regular que usabamos antes y que funcionaba para el GET, ahora nos dice claramente que no encuentra ninguna sentencia de esa forma. Por eso mismo estan ambas.

--------

Espero que haya quedado claro. Y se pueda entender.

Desconectado kmiz

  • PIC10
  • *
  • Mensajes: 3
Re:Esp8266 & LUA
« Respuesta #41 en: 27 de Noviembre de 2016, 22:26:52 »
Muy agradecido.
Por fin entiendo el funcionamiento. De verdad, HE VISTO LA LUZ!!!!!
No entendía como y que retornaba en cada variable. Y ahora por fin lo entiendo.
osea, los [ ] son los que definirían los patrones y los  ( ) son los que definen lo que se retorna en las variables (las capturas), y el resto de caracteres
(excepto "^$()%.[]*+-?") se toman tal cual.
De verdad me habéis ayudado mucho.
Ahora lo voy a poder aplicar en bastantes rutinas que precisaba muchas instrucciones para filtrar el contenido de las cadenas recibidas.
A veces me atasco en cosas así y pierdo muchísimo tiempo dándole vueltas a lo mismo.




Conectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8110
Re:Esp8266 & LUA
« Respuesta #42 en: 27 de Noviembre de 2016, 23:12:18 »
En realidad los corchetes [ ] indican un rango.. si dice de A-Z quiere decir ABCDEFGHIJKLMNOPQRSTUVWXYZ todos mayusculas, si dice a-z son los caracteres en minuscula, si dice 0-9 son los numeros. El + como te decia significa que puede haber 1 o varias letras con el criterio anterior. Tal es el caso de GET (ocurre 3 veces y son todas letras mayusculas), luego el espacio.

El punto, en una expresion regular puede ser cualquier caracter (numero, letra, simbolo, etc) excepto un salto de linea. por eso te toma los "/" y letras en minusculas.

Seguido de eso la expresion tiene un"?", en realidad ese "?" es parte de las operaciones en expresiones regulares, lo vas a ver como un-greedy, y si se quisiera realmente indicar que debe existir una letra ? deberia escaparse el caracter, por eso en mi explicacion puse: "\?"

Si queres probar podes hacerlo, hay muchas paginas online que te lo permiten. Como esta:
http://regexr.com/

En el texto pone:

Código: [Seleccionar]
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


Y luego usa las siguientes expresiones y mira las diferencias:

Código: [Seleccionar]
([A-Z]+) (.+)?(.+) HTTP
([A-Z]+) (.+)\?(.+) HTTP
([A-Z]+) (.+) HTTP

Los valores que coincidan con la expresion se van a remarcar en un color, si apoyas el mouse veras los grupos y la diferencia entre los 2 primeros, Obviamente proba expresion a expresion.

Finalmente podes encontrar un cheat sheet con todos las operaciones que usan las ReGex pero lo mejor es leer un tutorial, ya que son un dolor de cabeza.

http://www.rexegg.com/regex-quickstart.html

El otro problema es que no todos los lenguajes tienen el mismo soporte, aunque la parte basica sea igual para todos.

Desconectado leonardovelasco1972

  • PIC10
  • *
  • Mensajes: 1
Re:Esp8266 & LUA
« Respuesta #43 en: 02 de Diciembre de 2016, 18:43:10 »
buenas tardes yo tambien estoy en el chicle del esp8266 programando en lua utilizando el esplorer les pregunto si alguno sabe como configurar los DNS utilizando lua para que el modulo lo pueda acceder por internet gracias

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re:Esp8266 & LUA
« Respuesta #44 en: 06 de Diciembre de 2016, 14:07:31 »
pues hace tiempo vi algo de lo que comentas.y creo que tenias que configurar el router con una cuenta DynDns o no-ip.y luego cargar en el Esp un archivo.y se podia establecer comunicacion
desde el exterior.creo que estaba en Github.pero no me acuerdo donde.
Montando mi primera impresora 3D (Raprep Prusa i3)