import log
from machine import Pin
import utime
log.basicConfig(level=log.INFO)
uart_log = log.getLogger("UART")
class dht11():
def __init__(self, dataline):
self.dataline = dataline
def DHT11_Rst(self):
self.dataline.set_dir(1)
self.dataline.write(0)
utime.sleep_ms(20)
self.dataline.write(1)
utime.sleep_us(30)
def DHT11_Check(self):
self.dataline.set_dir(0)
retry = 0
while self.dataline.read() and retry < 100:
retry = retry + 1
utime.sleep_us(1)
if retry >= 100:
return 1
else:
retry = 0
while (not self.dataline.read()) and retry < 100:
retry = retry + 1
utime.sleep_us(1)
if retry >= 100:
return 1
else:
return 0
def DHT11_Read_Bit(self):
retry = 0
while self.dataline.read() and retry < 100:
retry = retry + 1
utime.sleep_us(1)
retry = 0
while (not self.dataline.read()) and retry < 100:
retry = retry + 1
utime.sleep_us(1)
utime.sleep_us(40)
if self.dataline.read():
return 1
else:
return 0
def DHT11_Read_Byte(self):
dat = 0
for i in range(0, 8):
dat <<= 1
dat |= self.DHT11_Read_Bit()
return dat
def DHT11_Read_Data(self, buf):
self.DHT11_Rst()
if self.DHT11_Check() == 0:
uart_log.info("检测到DHT11")
for i in range(0, 5):
buf[i] = self.DHT11_Read_Byte()
uart_log.info("接收到一字节数据")
if (buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]:
humi = buf[0]
temper = buf[2]
uart_log.info("湿度 {}".format(humi))
uart_log.info("温度 {}".format(temper))
else:
uart_log.info("data :{}".format(buf))
else:
uart_log.info("未检测到DHT11")
dataline = Pin(Pin.GPIO2, Pin.OUT, Pin.PULL_DISABLE, 1)
dht11 = dht11(dataline)
if __name__ == "__main__":
buf = ['','','','','']
dht11.DHT11_Read_Data(buf)