¿Nos ayudas a pagar el Hosting?

Compartir en facebook Compartir en twitter Compartir en linkedin

Sensor de temperatura y humedad con Python

Publicado en Noviembre de 2017

Un sensor de temperatura es simplemente un componente que nos devuelve un valor de tensión proporcional a la temperatura a la que está sometido. En esta ocasión vamos a utilizar un modelo comercial muy extendido y fácil de encontrar por muy poco dinero: el DHT22

Que necesitas:

Es muy sencillo. Este sensor (el que yo he probado) puede funcionar a 3.3 y a 5v. Lee el manual porque hay varios modelos diferentes, si no lo tienes claro (que deberías) empieza con 3.3v y si funciona mal, cámbialo a 5v. Pero antes, lee el manual. Tenemos 3 pines:

+      --> pin 01 (3.3V)
OUT --> pin 07 (PA6)
-      --> pin 09 (GND)

Usaremos una librería muy sencilla pero que funciona bien y la librería PYA20. Para instalar la librería del sensor lanza lo siguiente en un terminal:

sudo git clone https://github.com/AiratNig/DHT22-DHT11_Orange-Pi_Python.git

Consiste en una sencilla clase que sólo tenemos que instanciar en nuestro código, dándole el PIN al que está conectado y llamar al método read() que nos devolverá el valor de la temperatura y la humedad. La forma más sencilla de implantar es usando el ejemplo que viene con la librería. Accede a la carpeta recien creada y mira el ejemplo. Yo lo he adaptado un poco:

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# author    : "javier pérez santos para orangepiweb.es"
# credits   : "javier pérez santos, orangepiweb.es"
# copyright : "Copyright 2017, orangepiweb.es"
"""
   ___                             ____  ___        __   _
  / _ \ _ __ __ _ _ __   __ _  ___|  _ \(_) \      / /__| |__   ___  ___
 | | | | '__/ _` | '_ \ / _` |/ _ \ |_) | |\ \ /\ / / _ \ '_ \ / _ \/ __|
 | |_| | | | (_| | | | | (_| |  __/  __/| | \ V  V /  __/ |_) |  __/\__ \
  \___/|_|  \__,_|_| |_|\__, |\___|_|   |_|  \_/\_/ \___|_.__(_)___||___/
                        |___/

Sensor de temperatura
"""
from pyA20.gpio import gpio
from pyA20.gpio import port

import dht
import time

# initialize GPIO
DHT22_PIN = port.PA6
gpio.init()
#gpio.cleanup()

DHT22_instance = dht.DHT22(pin=DHT22_PIN)

def DHT22_print_data(DHT22_result):
    if DHT22_result.is_valid():
        print 'Temperatura: {}, Humedad: {}'.format(DHT22_result.temperature, DHT22_result.humidity)
    else:
        DHT22_read_sensor()

def DHT22_read_sensor():
    DHT22_result = DHT22_instance.read()
    DHT22_print_data(DHT22_result)

#if __name__ == '__main__':
    #DHT22_read_sensor()

while True:
    DHT22_read_sensor()
    time.sleep(1)

Cuando lo ejecutes, te dará el siguiente resultado:

orangepi@orangepiplus2e:~/DHT22-DHT11_Orange-Pi_Python$ sudo python example.py
Temperature: 21.1, Humidity: 32.0
Temperature: 21.2, Humidity: 32.1
Temperature: 21.1, Humidity: 32.0
Temperature: 21.1, Humidity: 32.0
Temperature: 21.1, Humidity: 32.1
Temperature: 21.1, Humidity: 32.1
Temperature: 21.1, Humidity: 32.1
Temperature: 21.1, Humidity: 32.1
Temperature: 21.1, Humidity: 32.1
...

Parece bastante estable. Ahora sólo tienes que añadir tu código condicional para comprobar si cualquiera de los dos parámetros está dentro o fuera de rango para ejecutar otros programas.

Esta librería también funciona con el sensor DHT11. Hay otras librerías pero con esta yo he quedado bastante contento.

Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.


Utiliza este espacio si quieres añadir algún comentario adicional o si tienes alguna duda.
No olvides añadir tu distribución y tu placa.

Todos los comentarios serán validados antes de su publicación.

Chujalt

Saludos, gracias por el tuto.

Lo he seguido y funciona, la unica pega es que da unos resultados raros

Temperatura: 588.8, Humedad: 896.0

Sabes si es algo de configuracion o es que funcina mal el sensor

Perdona por las faltas de ortografia. Estoy conectado a la OrangePy mediante RDP y me esta volviendo loco el teclado.

Gracias y Saludos


Chujalt

Saludos otra vez :)

Ya me salen unas temperaturas y humedades normales.
Lo que he hecho es, al tener el modelo DHT11, cambiar en el script todo lo que ponia 22 por 11 y ahora funciona correcto.

Gracias y Saludos


Talo

Hola, soy nuevo en esto de la orange pi, estoy tratando de descargar el repositorio de github, pero me pide usuario y contraseña.

Gracias y lo demas super bien, bien explicado y detallado.


Administrador OrangePiWeb.es

Hola Talo. El repositorio no te pide usuario ni contraseña. Si te pide contraseña al ejecutar el comando 'sudo git clone https://github.com/....' la contraseña que te pide es la de root de Linux para ejecutar comandos como super usuari (sudo). En cualquier caso, para hacer un clonado de github, no haría falta sudo y puedes quitarlo. Saludos.


Talo

Gracias por la respuesta, soy nuevo en linux pero no tanto, jajajajjaa pero si paso ahora la instalacion. ahora el tema es que al ejecutar me dice "Import Error: no module named PyA20.gpio".
deduzco que es parte de la libreria que descargo de github, pero es solo descargarla o hay que hacer algo???
PD: lo estoy haciendo con una orange pi lite, el sensor es un hdt11 con armbian


Administrador OrangePiWeb.es

Por tu pregunta... Tienes que instalar la librería PyA20:
https://orangepiweb.es/gpio.php
Aquí tienes instrucciones. Saludos. Ya me contarás.


Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2024 desde 2016. Todos los derechos reservados | Diseño JaviPSantos

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúa navegando consideramos que acepta el uso de cookies.

OK | Más información