DHT22 et Orange Pi Zéro

Le DHT 22 est un capteur de température et d’hygrométrie connectable à des nano ordinateurs comme les Orange PI.

Raccordement

Raccordez le DHT22 au +3.3v de l’orange pi zéro et par exemple sur la pin PA06 comme indiqué sur le schéma.

Code

Pour l’installation du système Armbian, voir l’article suivant: https://f1atb.fr/index.php/fr/2020/03/27/mise-en-route-orange-pi-zero/

En premier pour python 3, il faut mettre à jour et rajouter l’installateur pip , setuptools et python3-dev.

apt-get update
apt-get upgrade
apt install python3-pip
apt-get install python3-setuptools
apt-get install python3-dev

Allez dans le dossier que vous souhaitez utiliser pour installer la bibliothèque de lecture des GPIO et DHT. Rajouter sudo aux commandes si vous n’êtes pas en root.

git clone https://github.com/nvl1109/orangepi_zero_gpio.git
cd orangepi_zero_gpio
python3 setup.py install

Note: Attention avec la librairie pyA20 incluse dans le package ci dessus, sur un Orange PI Zero H2, les pins PA15 et PA16 ne sont pas accessibles.

Retourner dans votre dossier d’installation et clonez la librairie des capteurs de température DHT.

git clone https://github.com/jingl3s/DHT11-DHT22-Python-library-Orange-PI.git

Mettez une copie du fichier dht.py de la librairie dans le dossier où vous souhaitez exécuter le programme de test de votre capteur DHT sur la pin PA6

cp DHT11-DHT22-Python-library-Orange-PI/dht.py dht.py

Créez le source test.py avec nano.

nano test.py
from pyA20.gpio import gpio
from pyA20.gpio import port


import dht
import time
import datetime

# initialize GPIO
PIN2 = port.PA6
gpio.init()

# read data using pin
instance = dht.DHT(pin=PIN2)

while True:
    result = instance.read()
    if result.is_valid():
        print("Last valid input: " + str(datetime.datetime.now()))
        print("Temperature: {0:0.1f} C".format(result.temperature))
        print("Humidity: {0:0.1f} %".format(result.humidity))

    time.sleep(2)

Testez l’ensemble avec:

python3 test.py

La sortie:

Last valid result: 2020-10-03 04:17:58.325014
Temperature: 23.3 C
Humidity: 57.6 %

Note sur le DHT22

DHT22 utilise une norme propriétaire pour transmettre les données en série. Il faut environ 4 ms pour transmettre les 40 bits des résultats (16 bits pour l’humidité, 16 bits pour la température, 8 bits pour le contrôle). Un bit 0 correspond à un niveau 0 pendant 50us puis un 1 pendant 27us. Un bit 1 correspond à un niveau 0 pendant 50us puis un 1 pendant 70us. Pour décoder cette trame de 40 bits, vous devez échantillonner la broche GPIO à environ 20 us. Si vous utilisez une bibliothèque comme pyA20 écrite en C, cela fonctionne comme il est décrit ici. Le pyA20 ne peut pas être utilisé avec tous les modèles d’Orange PI. Si vous utilisez la bibliothèque OPI.GPIO en Python (pour un Orange PI One Plus par exemple), elle utilise le système de fichiers sysfs pour accéder au GPIO. Vous pouvez échantillonner une entrée à seulement 120us. C’est trop lent pour décoder la trame série d’un DHT22.

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

3 réponses

  1. Pascal ROY dit :

    Bonjour, je débute avec Orangepi 02W que je souhaite utiliser pour transmettre des données de DHT22 vers Domoticz. Est-ce que votre méthode est transposable pour le OPI02W? En vous remerciant et bravo pour la clarté de votre présentation.

    • F1ATB André dit :

      Je ne sais pas. Avec les Orange Pi, il y a toujours le point délicat des bibliothèque d’accès au GPIO.
      Il faut essayer et trouver la bibliothèque compatible.

      Pour faire plus simple, vous pouvez prendre un arduino, un ESP8266 ou un ESP32.
      Cordialement

      • Pascal ROY dit :

        Bonjour et merci de votre réponse. J’ai déjà mis en oeuvre la DHT22 sur un ESP8266 qui communique en MQTT avec un raspberry pi et DHT22 sur le GPIO d’un RPI02W. Je suis curieux de transposer sur un Orangepi02w mais c’est pas si simple. Je vais continuer à chercher…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *