风火轮用户Zruq4 发表于 2022-12-14 09:59:29

关于python驱动gpioDHT11

本帖最后由 风火轮用户Zruq4 于 2022-12-14 10:01 编辑

我写了一份代码接收DHT11的数据,设备是rockpi4,不知道哪里写的有问题。返回的温湿度都是0.附代码


# coding:utf-8
import mraa as GPIO
import time
import math

# 使用物理编码为3的引脚做总线
P = 3

print("开始进行DHT11测量数据获取\n")
# 等待1s后再进行逻辑
time.sleep(1)
gpio_1 = GPIO.Gpio(P)

def readData():
    print("readData")
    # 先将总线引脚设置为输出模式
    gpio_1.dir(GPIO.DIR_OUT)
    # 将总线电平拉低,发出开始信号
    gpio_1.outputMode(GPIO.MODE_IN_ACTIVE_LOW)
    # 手册要求至少保持18ms的低电平,我们这里保持20ms
    time.sleep(0.02)
    # 拉高电平
    gpio_1.outputMode(GPIO.MODE_IN_ACTIVE_HIGH)
    # 之后将引脚设为输入模式,等待传感器响应
    gpio_1.dir(GPIO.DIR_IN)

    # 先等待80us的低电平信号
    while gpio_1.read() == GPIO.MODE_IN_ACTIVE_LOW:
      continue
    # 再等待80us的高电平信号
    while gpio_1.read() == GPIO.MODE_IN_ACTIVE_HIGH:
      continue
    # 开始接收数据
    # 循环计数
    i = 0
    # 存放二进制位数据
    data = []
    # 存放中间数据
    kdata = []
    # 每次读取40位数据
    while i < 40:
      j = 0
      # 50us的低电平表示准备传输一位数据
      while gpio_1.read() == GPIO.MODE_IN_ACTIVE_LOW:
            continue
      # 开始检测高电平的时间
      while gpio_1.read() == GPIO.MODE_IN_ACTIVE_HIGH:
            j += 1
            if j > 100:
                return [False, 0, 0]
      kdata.append(j)
      i += 1



    print("--------临时数据----------\n")
    print(kdata)
    print("--------临时数据----------\n")

    # 开始整理数据
    i = 0
    while i < 40:
      tmp = kdata
      if tmp > 7:
            data.append(1)
      else:
            data.append(0)
      i += 1
    print("--------临时数据2----------\n")
    print(data)
    print("--------临时数据2----------\n")
    # 解析湿度整数部分
    t1 = data[0:8]
    c1 = 0
    i = 7
    for n in t1:
      c1 += n * math.pow(2, i)
      i -= 1

    # 解析湿度整数部分
    t2 = data[8:16]
    c2 = 0
    i = 7
    for n in t2:
      c2 += n * math.pow(2, i)
      i -= 1

    # 解析温度整数部分
    t3 = data[16:24]
    c3 = 0
    i = 7
    for n in t3:
      c3 += n * math.pow(2, i)
      i -= 1

    # 解析温度整数部分
    t4 = data[24:32]
    c4 = 0
    i = 7
    for n in t4:
      c4 += n * math.pow(2, i)
      i -= 1

    # 解析校验
    t5 = data[32:40]
    c5 = 0
    i = 7
    for n in t5:
      c5 += n * math.pow(2, i)
      i -= 1

    # 进行校验
    va = True
    print("c1:%d\nc2:%d\nc3:%d\nc4:%d\nc5:%d\n" % (c1, c2, c3, c4, c5))
    if c1 + c2 + c3 + c4 == c5:
      va = True
    else:
      va = False

    return , "%d.%d" % (c1, c2), "%d.%d" % (c3, c4)]


while True:
    time.sleep(1)
    result = readData()
    if result[0]:
      hum = result[1]
      temp = result[2]
      print("当前环境湿度: %s %%, 当前环境温度:%s℃\n" % (hum, temp))
    else:
      print("此次数据无效,已被丢弃\n")
    time.sleep(1)




这是返回数据

页: [1]
查看完整版本: 关于python驱动gpioDHT11