Raspberry PI DHT Sensor Control Code
DHT sensors can measure temperature and humidity. You can receive fresh measurements every 2 seconds in the form of digital signals. DHT11 can sense temperature from 0 to 50 °C and humidity from 20 to 80% RH. DHT22 can sense temperature from -40 to 80 °C and humidity from 0 to 100% RH. The DHT Controller Device manages communication between a DHT sensor and the current Ozeki software.
Required hardware
- Raspberry PI
- DHT11 or DHT22 sensor
- Resistor 4.7kΩ
Source code to install on controller
#!/usr/bin/python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import sys def bin2dec(string_num): return str(int(string_num, 2)) data = [] effectiveData = [] bits_min=999; bits_max=0; HumidityBit = "" TemperatureBit = "" crc = "" crc_OK = False; Humidity = 0 Temperature = 0 pin=17 GPIO.setmode(GPIO.BCM) def pullData(): global data global effectiveData global pin data = [] effectiveData = [] GPIO.setup(pin,GPIO.OUT) GPIO.output(pin,GPIO.HIGH) time.sleep(0.025) GPIO.output(pin,GPIO.LOW) time.sleep(0.14) GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) for i in range(0,1000): data.append(GPIO.input(pin)) def analyzeData(): seek=0; bits_min=9999; bits_max=0; global HumidityBit global TemperatureBit global crc global Humidity global Temperature HumidityBit = "" TemperatureBit = "" crc = "" while(seek < len(data) and data[seek] == 0): seek+=1; while(seek < len(data) and data[seek] == 1): seek+=1; for i in range(0, 40): buffer = ""; while(seek < len(data) and data[seek] == 0): seek+=1; while(seek < len(data) and data[seek] == 1): seek+=1; buffer += "1"; if (len(buffer) < bits_min): bits_min = len(buffer) if (len(buffer) > bits_max): bits_max = len(buffer) effectiveData.append(buffer); for i in range(0, len(effectiveData)): if (len(effectiveData[i]) < ((bits_max + bits_min)/2)): effectiveData[i] = "0"; else: effectiveData[i] = "1"; for i in range(0, 8): HumidityBit += str(effectiveData[i]); for i in range(16, 24): TemperatureBit += str(effectiveData[i]); for i in range(32, 40): crc += str(effectiveData[i]); Humidity = bin2dec(HumidityBit) Temperature = bin2dec(TemperatureBit) def isDataValid(): global Humidity global Temperature global crc if int(Humidity) + int(Temperature) == int(bin2dec(crc)): return True; else: return False; def printData(): global Humidity global Temperature print "{}\t{}\t".format ("Humidity: ", Humidity + "%") print "{}\t{}\t".format ("Temperature: ", Temperature + "°C") try: while True: pullData(); analyzeData(); if (isDataValid()): crc_OK=True; print "\r", printData(); else: sys.stderr.write(".") time.sleep(2); except KeyboardInterrupt: GPIO.cleanup()
More information