栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

DHT11:python 的DHT11程序,quecpython,micropython

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号