DHT11:python 的DHT11程序,quecpython,micropython

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

    # 复位DHT11
    def DHT11_Rst(self):
        self.dataline.set_dir(1)  # 1 - (Pin.OUT)设置为输出模式

        self.dataline.write(0)  # 设置输出,拉低电平
        utime.sleep_ms(20)  # 延时18ms以上
        self.dataline.write(1)  # 拉高电平
        utime.sleep_us(30)  # //延时20~40us

    # 等待DHT11的回应
    # 返回1: 未检测到DHT11的存在
    # 返回0: 存在
    def DHT11_Check(self):  # 检查应答信号

        self.dataline.set_dir(0)  # 0 - (Pin.IN)设置为输入模式;
        retry = 0
        while self.dataline.read() and retry < 100:  # DHT11应返回83US的低电平
            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

    # 从DHT11读取一个位
    # 返回值:1 / 0
    def DHT11_Read_Bit(self):  # 读取单个位的数据
        retry = 0
        while self.dataline.read() and retry < 100:  # DHT11应返回54us的低电平
            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

       #第二种方法
       # while ( self.dataline.read()) :
        #    uart_log.info('高电平')
        #while (not  self.dataline.read() ):
        #    uart_log.info('低电平')
       # 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 = ['','','','','']
    # utime.sleep(1)
    # dht11.DHT11_Rst()
    # uart_log.info("dht11的情况为( # 返回1: 未检测到DHT11的存在,返回0: 存在) {}".format(dht11.DHT11_Check()))
    dht11.DHT11_Read_Data(buf)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值