首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DHT22温湿度传感器误差

DHT22温湿度传感器误差
EN

Stack Overflow用户
提问于 2022-02-16 22:25:38
回答 1查看 1.2K关注 0票数 2

我正在使用mac终端,并试图使用raspberry pi 4来捕获和存储从DHT22传感器获取的值,每当我试图正确地连接它时,我就会得到这些错误: DHT传感器未找到,请检查连接DH22传感器时的接线。

代码语言:javascript
复制
De-initializing self.pulse_in
De-initializing self.pulse_in
Traceback (most recent call last):
File "/home/pi/humidity.py", line 26, in
temperature_c = dhtDevice.temperature
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_dht.py", line 274, in temperature
self.measure()
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_dht.py", line 219, in measure
pulses = self._get_pulses_pulseio()
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_dht.py", line 141, in _get_pulses_pulseio
self.pulse_in.clear()
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_blinka/microcontroller/bcm283x/pulseio/PulseIn.py", line 150, in clear
self._mq.send("c", True, type=1)
OSError: [Errno 22] Invalid argument

在处理上述异常的过程中,发生了另一个异常:

代码语言:javascript
复制
Traceback (most recent call last):
File "/home/pi/humidity.py", line 44, in
dhtDevice.exit()
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_dht.py", line 93, in exit
self.pulse_in.deinit()
File "/home/pi/.local/lib/python3.9/site-packages/adafruit_blinka/microcontroller/bcm283x/pulseio/PulseIn.py", line 111, in deinit
procs.remove(self._process)
ValueError: list.remove(x): x not in list

有人能理解这件事吗?

我的代码如下:

代码语言:javascript
复制
    # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
    SPDX-License-Identifier: MIT
    
    import time
    import datetime
    import board
    import adafruit_dht
    Initial the dht device, with data pin connected to:
    
    dhtDevice = adafruit_dht.DHT22(board.D4)
    
    e = datetime.datetime.now()
    date = "%s-%s-%s" % (e.day, e.month, e.year)
    t = time.localtime()
    current_time = time.strftime("%H%M%S", t)
    file = open('humidityValues'+ date + '_' + current_time +'.txt', 'w')
    you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
    This may be necessary on a Linux single board computer like the Raspberry Pi,
    but it will not work in CircuitPython.
    dhtDevice = adafruit_dht.DHT22(board.D18)
    
    while True:
    try:
    # Print the values to the serial port
    temperature_c = dhtDevice.temperature
    temperature_f = temperature_c * (9 / 5) + 32
    humidity = dhtDevice.humidity
    t = time.local
    current_time = time.strftime("%H:%M:%S", t)
    temperature_c = dhtDevice.temperature
    temperature_f = temperature_c * (9 / 5) + 32
    humidity = dhtDevice.humidity
    str = "time=" + current_time + " temp={0:0.1f}ºC humidity={1:0.1f}%".format(temperature_c, humidity)
    print(str)
    file.write(str + "\n")
    
    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        #raise error
    
    time.sleep(2.0)

我试着用这样的方法来解决这个问题:

代码语言:javascript
复制
    # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
    SPDX-License-Identifier: MIT
    
    import time
    import datetime
    import board
    import adafruit_dht
    Initial the dht device, with data pin connected to:
    
    dhtDevice = adafruit_dht.DHT22(board.D4)
    
    e = datetime.datetime.now()
    date = "%s-%s-%s" % (e.day, e.month, e.year)
    t = time.localtime()
    current_time = time.strftime("%H%M%S", t)
    file = open('humidityValues'+ date + '_' + current_time +'.txt', 'w')
    you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
    This may be necessary on a Linux single board computer like the Raspberry Pi,
    but it will not work in CircuitPython.
    dhtDevice = adafruit_dht.DHT22(board.D18, use_pulseio=False)
    
    while True:
    try:
    # Print the values to the serial port
    temperature_c = dhtDevice.temperature
    temperature_f = temperature_c * (9 / 5) + 32
    humidity = dhtDevice.humidity
    t = time.local
    current_time = time.strftime("%H:%M:%S", t)
    temperature_c = dhtDevice.temperature
    temperature_f = temperature_c * (9 / 5) + 32
    humidity = dhtDevice.humidity
    str = "time=" + current_time + " temp={0:0.1f}ºC humidity={1:0.1f}%".format(temperature_c, humidity)
    print(str)
    file.write(str + "\n")
    
    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        #raise error
    
    time.sleep(2.0)

但是,我得到的只有这样的东西:校验和没有验证。再试试。没有返回完整的缓冲区。再试试。

有人有什么建议吗。

注意:我绝不会把上面的代码当作我自己的。

EN

回答 1

Stack Overflow用户

发布于 2022-03-05 08:24:47

几个月前我也有过类似的问题。您的脚本看起来与我在教程中第一眼看到的脚本相同:https://pypi.org/project/adafruit-circuitpython-dht/

以下几点可能会有所帮助:

3,3V

  • i
  • 传感器可能被破坏(在我的5个传感器中过去有2个没有工作),
  • 试图连接5V上的DHT22,而不是

知道这一点很难看,但是检查布线是非常重要的(有时我是盲目的:D )<代码>H 215<代码>F 216

当它起作用时只是一个提示:试着计算精确数据的中值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71150044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档