Temperatur- und Luftfeuchtigkeitssensor DHT22

Update 30.05.2020: getestet in Raspberry Pi OS (Version: May 2020)

Anschluß des DHT22:

Pin 1: VDD, Betriebsspannung 3,3 Volt  
Pin 2: DATA, Datenleitung (an GPIO)  
Pin 3: bleibt frei  
Pin 4: Masse  

zwischen Pin 1 (3,3V) und GPIO kommt ein Widerstand 10 KOhm


Installation DHT Python Bibliothek von Adafruit:

sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git 
cd Adafruit_Python_DHT
sudo python setup.py install

ein erster Test:

python /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 22 23

22 => Auswahl Sensor: 22 steht für den DHT22; Möglichkeiten siehe die Scripts im Ordner “Adafruit_Python_DHT”
23 => gibt den GPIO an (nicht den Pin!!!)

Die Ausgabe sollte wie folgt sein:

Temp=23.5* Humidity=48.4%

Script für das Auslesen der CPU Temperatur, der Temperatur & Luftfeuchte vom DHT22 Sensor und die Ausgabe in eine csv Datei:

#!/bin/bash

# Erfassung CPU Temperatur Raspi, Raumtemperatur und Luftfeuchtigkeit
# Sensor an GPIO 23 

datum=$(date +"%Y-%m-%d %H:%M")
#echo $datum

Raum_Temp=$(python /home/pi/scripts/AdafruitDHT_mod.py 22 23 | sed '2d' | tr '.' ',')
echo $Raum_Temp

sleep 3

Raum_Feuchte=$(python /home/pi/scripts/AdafruitDHT_mod.py 22 23 | sed '1d' | tr '.' ',')
echo $Raum_Feuchte

CPU_TEMP=$(vcgencmd measure_temp | cut -c 6-9 | tr '.' ',')
echo $CPU_TEMP

echo "$datum;$Raum_Temp;$Raum_Feuchte;$CPU_TEMP" >> /var/www/upload/temperatur.csv

Hier noch das angepasste Python Script zum Auslesen der Temperaturen.
Dazu habe ich die Datei AdafruitDHT.py aus dem Ordner examples angepasst. (aus der Ausgabe die Beschriftungen entfernt und einen Carriage Return eingebaut)

import sys
import Adafruit_DHT


sensor_args = { '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
    sensor = sensor_args[sys.argv[1]]
    pin = sys.argv[2]
else:
    print('Usage: sudo ./Adafruit_DHT.py [11|22|2302] <GPIO pin number>')
    print('Example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO pin #4')
    sys.exit(1)


humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


if humidity is not None and temperature is not None:
    print('{0:0.1f}\n{1:0.1f}'.format(temperature, humidity))
else:
    print('Failed to get reading. Try again!')
    sys.exit(1)

Hier noch das zur Abfrage der Werte über den Telegram Messenger angepasste Script von der Seite http://cz6l0chpiqudvyx7.myfritz.net:10102/docs/telegram/

#!/usr/bin/env python
#coding: utf8 

import time, datetime
import telepot 
from telepot.loop import MessageLoop

import os
import RPi.GPIO as GPIO
import sys
import Adafruit_DHT

time.sleep(10)


def action(msg):
    chat_id = msg['chat']['id']
    command = msg['text']

    print 'Received: %s' % command

    if command == '/temp':
  	    humidity, temperature = Adafruit_DHT.read_retry(22,23)
            dhtval = ('Temp={0:0.1f}°C  Luftfeuchte={1:0.1f}% rel.'.format(temperature, humidity))
	    telegram_bot.sendMessage (chat_id, str(dhtval))
    elif command == '/restart':
		os.system("sudo shutdown -r now")
		sys.exit()
    elif command == '/time':
		now = datetime.datetime.now()
		telegram_bot.sendMessage(chat_id, str(now.hour)+str(":")+str(now.minute))
    elif command == '/hi':
        telegram_bot.sendMessage (chat_id, str("Hihoy, Schweinebacke :-)"))
    elif command == '/logo':
        telegram_bot.sendPhoto (chat_id, photo = "https://jekyllrb.com/img/logo-2x.png")
    elif command == '/file':
        telegram_bot.sendDocument(chat_id, document=open('/home/pi/telegram.py'))
    elif command == '/audio':
        telegram_bot.sendAudio(chat_id, audio=open('/home/pi/test.mp3'))
    elif command == '/test':
		GPIO.setmode(GPIO.BCM)
		GPIO.setup(21, GPIO.OUT)
		for i in range(5):
			GPIO.output(21, GPIO.HIGH)
			time.sleep(0.5)
			GPIO.output(21, GPIO.LOW)
			time.sleep(0.5)
		GPIO.cleanup()

		
telegram_bot = telepot.Bot('123456789:AaFWearrrit9nnbArajrMrELsln7tthnnS4')
print (telegram_bot.getMe())

MessageLoop(telegram_bot, action).run_as_thread()
print 'Up and Running....'

# Keep the program running.
while 1:
    time.sleep(10)