Aprovechando que tengo un sensor DHT11 voy a realizar un pequeño montaje en el que voy a medir la temperatura y la humedad con dicho sensor.
Para obtener más información sobre el sensor, consultar la siguiente entrada del blog.
El esquema sería el siguiente:
Como se puede apreciar, alimentamos el sensor y el pin de datos lo conectamos al pin 5 del módulo NodeMCU.
Para programar el módulo haremos uso de la API dht
El siguiente programa muestra por consola la temperatura y la humedad cada 3 segundos y se basa en el ejemplo de la documentación de la API:
pin = 5
function LeeDatos()
status,temp,humi,temp_decimial,humi_decimial = dht.read11(pin)
if( status == dht.OK ) then
print(
string.format(
"DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp),
temp_decimial,
math.floor(humi),
humi_decimial
)
)
end
end
tmr.alarm(0,3000,1, function() LeeDatos() end)
El resultado en consola es el siguiente:
DHT Temperature:23.000;Humidity:41.000
La instrucción que lee los datos es la siguiente:
status,temp,humi,temp_decimial,humi_decimial = dht.read11(pin)
Luego, se comprueba que el estado del sensor es correcto:
if( status == dht.OK ) then
Para mostrar en consola el resultado:
print(string.format(
"DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp),
temp_decimial,
math.floor(humi),
humi_decimial
))
La clave está en string.format que se utiliza para dar formato a cadenas. Se compone de diferentes directivas que indican dónde y cómo debe ser escrito cada argumento. Una directiva se compone del carácter % seguido de una letra que nos indica cómo formatear el argumento:
- %d o %i: número decimal entero
- %x: número hexadecimal
- %o: número octal
- &f: número en coma flotante
- %s: string
- %c: carácter
Por cada directiva hay que indicar un argumento separado por comas.
También podemos indicar el número de caracteres. Por ejemplo:
d = 5; m = 11; y = 1990
print(string.format("%02d/%02d/%04d", d, m, y)) --> 05/11/1990
Finalmente, los caracteres especiales:
- \r: retorno de carro
- \n: nueva línea
Nota: math.floor es una librería de Lua que redondea un número.
Más información sobre los string: The String Library
Notas:
Mi módulo DHT11 solo muestra valores de temperatura y humedad enteros por lo que no son necesarias las variables temp_decimial,humi_decimial. Por tanto, el código podría ser:
status,temp,humi = dht.read11(pin)
Podemos mostrar los códigos de error en el caso de que la lectura haya sido incorrecta. Para ello nos valemos del resultado que devuelve la lectura del sensor en su variable status:
if( status == dht.OK ) then
print("DHT Temperatura: "..temp.."ºC - Humedad: "..humi.." %")
elseif( status == dht.ERROR_CHECKSUM ) then
print( "DHT Checksum error." );
elseif( status == dht.ERROR_TIMEOUT ) then
print( "DHT Time out." );
end
end
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.