Vamos a empezar explicando un proyecto simple sobre Nodemcu: Capturar la temperatura y enviarla a thingspeak.com que podemos adaptar sin problemas a nuestras necesidades
¿Por que thingspeak.com y que es?
- Registrare en thingspeak.com.
- Crea un Canal en Channels -> New Channel.
- En el Field 1 le asignamos un nombre cualquiera.
- Una vez generado todo entramos al canal y nos dirigimos a API Key -> Write API Key y la copiamos.
Ya tenemos generado nuestro canal que almacenara la información recibida por el sensor, nos podemos centrar en muestro código.
Yo suelo utilizar Atom como IDE y ESPlorer para cargarlo al Nodemcu. Recordar que para que el Nodemcu "lea" el archivo al iniciar este tiene que llamarse init.lua.
Esquema Fisico
Funciones paso a paso
Lo primero es declarar las "variables globales" para que sean fácilmente localizables.Es importante comentar que vamos a describirlas como objetos diferentes ya que cada una se ejecutara como una funcion,Las funciones no te permiten usar libremente variables declaradas aquí o allá, pero sirve para organizar e independizar el código
Conexión
Vamos a realizar la conexión a la wifi y seria la espina dorsal de nuestro scritp ya que resolución condiciona a el resto.
function conectar(SSID, PASSWORD, HOST)
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
if wifi.sta.status() == 5 then
print("Conectado IP: " .. wifi.sta.getip())
tmr.alarm(0, 600000, 1, function()
socket = net.createConnection(net.TCP,0)
socket:connect(80,HOST)
socket:on("connection",function(sck)
local post_request = generar_datos(HOST)
sck:send(post_request)
end)
end)
else
print("Error de Conexion")
tmr.alarm(0, 60000, 1, function() conectar(SSID, PASSWORD, HOST) end)
end
end
La función conectar trae del gobal el nombre del ssid, la contraseña y el host a que enviaremos el Post.
Una vez iniciado seleccionamos el modo STATION y le pasamos la configuracion de acceso a la red Wifi, Una vez realizado, comprobamos el estado de la conexión.
Si genera algún error, esperamos 1 minutos y volvemos a probar.
En caso de conectar mostramos por el serial la IP asignada y le damos 5 minutos para lanzar el post.
Bien una vez listo abrimos un Socket a la IP de thingspeak al puerto 80, una vez el Socket esta "conectado" llamamos a la cabecera HTML con los datos del POST (mas abaja la explicamos) y lo enviamos por el socket y listo.
Esto lo realizamos para no "bombardear" el servidor con datos ya que el Nodemcu por defecto ejecutara un LOOP de todo el código.
Temperatura
function Temperatura()
local r = adc.read(0)
local c = r * 285 / 1024
return c
end
Leemos el Analógico 0, la formula de conversión y devolvemos el resultado, así de simple
Generar POST
Aquí tenemos que preparar la cabecera HTML y preparar la llamada POST
function generar_datos(HOST)
API_KEY = "api_key"
temperatura = Temperatura()
YO = wifi.sta.getip()
print("Temperatura"..temperatura.."C\n")
-- Preparamos el POST
data_post = "api_key="..API_KEY.."&field1="..temperatura
-- Lanzamos el POST
cabecera_post = "POST https://"..HOST.."/update HTTP/1.1\r\n"..
"Host: "..YO.."\r\n"..
"Connection: close\r\n"..
"Content-Type: application/x-www-form-urlencoded\r\n"..
"Content-Length: "..string.len(data_post).."\r\n"..
"\r\n"..data_post
return cabecera_post
end
Paso por Paso, declaramos nuestra API KEY creada en thingspeak.
- Almacenamos temperatura (calculada en su función)
- Almacenamos nuestra IP para la cabecera HTML
- Formateamos los datos POST, en este caso enviamos la llave y el campo uno, si por ejemplo fueran 2 campos añadiríamos &field2=DATO
- Creamos la cabecera HTML lo mas importante a comentar es el Content-Length que lo calculamos con el string.len (por ello formateamos y almacenamos el POST anteriormente)
- Listo devolvemos la petición ya formateada.
LISTO, con esto ya estamos comunicando los datos correctamente y el servidor realizara la recolección y muestra.
El ejemplo completo lo puedes encontrar Aqui
El ejemplo completo lo puedes encontrar Aqui
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola Alfonso me da valores de temperatura 193, 194, sabes que puede ser?
ResponderEliminarHe cambiado el sensor de temperatura y los valores ya son mas normales.
ResponderEliminar