I2C temperature sensor with Raspberry Pi 4
Ask QuestionAsked yesterdayActive todayViewed 26 times1
I’m trying to use a Raspberry Pi 4 to read an I2C temperature and humidity sensor. The part I’m using is a module from Grove based on the DHT20 sensor. Here’s a link to a page about the module:
https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-V2-0-DHT20-p-4967.html
I need some help programming the I2C communication. The specs sheet for the sensor explains the frames that are needed for correct communication (see page 8):
I would be grateful if someone could show me the Python code needed to get a sensor reading. Preferably this would be based on the smbus package, but I will be grateful for any solution (based on whatever package you prefer). I understand that there are many answers about the DHT11 and DHT22 sensors, but these older models have one-wire logic whereas the newer DHT20 has I2C.
Thanks!pi-4i2cShareEditFollowClose 3Flagedited yesterdayasked yesterdaythatguyfromcanada1122 bronze badges New contributor
- 1Does this answer your question? Reliable temperature/humidity logging with Python and a DHT11 – Milliways yesterday
- 1@Milliways: Thanks for the link! Unfortunately the DHT11 and DHT22 are older models that use one-wire logic. The DHT20 is a newer model with I2C logic, so none of the DHT11 and DHT22 solutions will work. I have edited my post to clarify this difference. But I appreciate you trying to help! – thatguyfromcanada yesterday
- 1a search for dht20 python yielded (amongst many) this result – there is a raspberry pi folder there! 🤔 – Bravo yesterday
- (1) AHT20 – Temperature & Humidity Sensor Breakout Board Product Sheet – Adafruit US$4.50 adafruit.com/product/4566 (2) AHT20 – Temperature & Humidity Sensor Breakout Board Learning Guide- Adafruit learn.adafruit.com/adafruit-aht20 (3) AHT20 Temperature Sensor Datasheet – aosong aosong.com/en/products-32.html (4) Why are DHT11/DHT22 problematic? – AdaFruit learn.adafruit.com/modern-replacements-for-dht11-dht22-sensors/… / to continue, … – tlfong01 6 mins ago
- (5) What are better alternatives to DHT11/DHT22? – AdaFruit learn.adafruit.com/modern-replacements-for-dht11-dht22-sensors/… (6) DHT20 GitHub Home – DFRobot github.com/DFRobot/DFRobot_DHT20 (7) DHT20 GitHub Python – DFRobot github.com/DFRobot/DFRobot_DHT20/tree/master/python/raspberrypi – tlfong01 5 mins ago
- (8) DHT20 GitHub Python Readme – DFRobot github.com/DFRobot/DFRobot_DHT20/blob/master/python/raspberrypi/… (9) DHT20 GitHub Python Program – DFRobot github.com/DFRobot/DFRobot_DHT20/blob/master/python/raspberrypi/… (10) DHT20 GitHub Python Example – DFRobot github.com/DFRobot/DFRobot_DHT20/blob/master/python/raspberrypi/… – tlfong01 just now Edit
1 Answer
First start by finding the I2C address of your sensor. Here’s an explanation of how to do that: https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c (look under the section “Testing I2C”).
Once you have the address, try the following Python code:
import time
import smbus
address = 0x38 #Put your device's address here
i2cbus = smbus.SMBus(1)
time.sleep(0.5)
data = i2cbus.read_i2c_block_data(address,0x71,1)
if (data[0] | 0x08) == 0:
print('Initialization error')
i2cbus.write_i2c_block_data(address,0xac,[0x33,0x00])
time.sleep(0.1)
data = i2cbus.read_i2c_block_data(address,0x71,7)
Traw = ((data[3] & 0xf) << 16) + (data[4] << 8) + data[5]
temperature = 200*float(Traw)/2**20 - 50
Hraw = ((data[3] & 0xf0) >> 4) + (data[1] << 12) + (data[2] << 4)
humidity = 100*float(Hraw)/2**20
print(temperature)
print(humidity)
ShareEditFollowFlaganswered 58 mins agoultracold1111 bronze badge New contributor
.END
Categories: Uncategorized