hola a todos.en algun tema del foro. ya comente que no me iba a meter a aprender LUA.ya que mi tiempo es limitado.pero la posibilidad
de controlar dispositivos sin añadir gastos como integrar un miscrocontrolador,me ha vencido.ya que es algo muy tentador.
por eso abrire este tema para poner mis experiencias con el ESP8266 y su programacion con LUA.
para empezar voy a poner unos enlaces muy importantes para trabajar con este.
la API:
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en#filereadhttp://www.nodemcu.com/docs/index/y el manual de referencia:
http://www.lua.org/manual/5.1/es/manual.htmlel ESP8266Flasher para programar la flash.para win32/64
https://github.com/nodemcu/nodemcu-flasherla flash con la que programaremos el ESP8266.en mi caso he usado la nodemcu_float_0.9.6-dev_20150704.bin
https://github.com/nodemcu/nodemcu-firmware/releasesel programa Esplorer.que es una herramienta para programar nuestro ESP8266.
http://www.akirasan.net/esplorer-ide-de-programacion-para-esp8266/y el programa hercules para hacer conexiones por la red.
http://www.hw-group.com/products/hercules/index_en.htmlno voy a explicar como se usan estos programas porque hay informacion en internet y en youtube.asi que pondre diferentes configuraciones
para el uso de las diferentes funciones de la API del ESP8266.
tambien explicare diferentes cosas muy importantes y sencillas que si no las realizamos,nos va a doler bastante la cabeza.
una de ellas es que cada vez que programemos el ESP con el Esplorer.es que cerraremos la conexion y resetearemos el ESP.yo lo que
hago es sacar el conversor USB-TTL del ordenador y luego lo conecto de nuevo.
otra cosa es que el archivo que carguemos en el Esp.sera nombrado como init.lua
bueno.lo primero que voy a hcer es implentar un servidor en nuestro ESP8266. y este es el codigo:
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)
como veis las lineas estan comentadas para indicar su funcion.
las lineas que empiezan con el comando wifi son las que configuran el servidor.la primera selecciona el modo STA.la segunda ingresa
el nombre de la wi-fi del punto de acceso de nuestro router.y la clave
la siguiente asigna una IP fija para nuestro servidor.si no pusieramos esta linea. se nos asignaria automaticamente.pero como es aleatoria,
no sabriamos cual es si no la consultamos.
y posteriormente conectamos.
las lineas print es para consultar diferentes comandos.y son enviados por el puerto serie.
las lineas srv son para la creacion de la comunicacion del servidor con el cliente.
la primera crea el servidor con un limite maximo de conexion sin tarfico de 60segundos.
la siguiente configura al servidor para escuchar por el puerto 80
siguiente para cargar en la variable payload lo que se reciva por el puerto 80.
print es para sacar el dato por la usart.
y send es para responder al cliente con los datos que queramos.en este caso HOLA MUNDO.
para comunicarnos con este programa usaremos el Hercules.con este formato:
si quisieramos acceder desde un navegador como el crome,opera,firefox,iexplorer etc...
pondriamos 192.168.1.5 en la barra de busqueda y el servidor nos responderia con HOLA MUNDO.pero la linea conn:send("HOLA MUNDO")
hay que cambiarla por: conn:send("<h1> HOLA MUNDO.</h1>") ya que el navegador funciona con codigo HTML.