from machine import Pin, I2C
from utime import sleep_ms, ticks_us
from pico_i2c_lcd import I2cLcd
i2c = I2C(id=1,scl=Pin(27),sda=Pin(26),freq=100000)
lcd = I2cLcd(i2c, 0x27, 2,16)
class DHT22():
def __init__(self,gpio):
self.pin=gpio
self.pin=Pin(2,mode=Pin.OUT)
self.pin.high()
self.ckecksum=0
self.temperatura=0
self.humedad=0
sleep_ms(1)
def getReading(self):
DHT=self.pin
DHT.low()
sleep_ms(1)
DHT.init(mode=Pin.IN)
for i in range(2):
while DHT.value()==1:
pass
while DHT.value()==0:
pass
data=0
t1=ticks_us()
for i in range(32):
while DHT.value()==1:
pass
while DHT.value()==0:
pass
t2=ticks_us()
data=data<<1
data=data|((t2-t1)>100)
t1=t2
checksum=0
for i in range(8):
while DHT.value()==1:
pass
while DHT.value()==0:
pass
t2=ticks_us()
checksum=checksum<<1
checksum=checksum|((t2-t1)>100)
t1=t2
byte1=(data>>24&0xFF)
byte2=(data>>16&0xFF)
byte3=(data>>8&0xFF)
byte4=(data & 0xFF)
self.checksum=(checksum==(byte1+byte2+byte3+byte4)&0xFF)
self.humedad=((byte1<<8)|byte2)/10.0
neg=byte3 & 0x80
self.temperatura=(byte3<<8 | byte4)/10.0
if neg>0:
self.temperatura=-self.temperatura
while 1:
sleep_ms(100)
dht=DHT22(2)
dht.getReading()
sleep_ms(100)
#lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Temp")
lcd.move_to(7,0)
lcd.putstr(str(dht.temperatura)+ "C")
lcd.move_to(0,1)
lcd.putstr("Hume:")
lcd.putstr(str(dht.humedad)+"%")
#print("Checksum",dht.checksum)
#print("Humedad= ",dht.humedad)
#print("Temperatura= ",dht.temperatura)
#sleep_ms(2000)