0

我最近一直在构建一些 Raspberry pi 温度传感器,使用 Pi zeros 来监控某些计算机楼层的温度峰值。我正在使用初始状态设置并将数据发送到他们的仪表板。好吧,我得到了一个完美的设置,没有任何问题,并且它可以很好地发送数据。但是当我去设置第二个时,完全相同的方式,使用完全相同的代码,我不断收到以下错误:

Traceback (most recent call last):
 File "tempsensor.py", line 20, in <module>

 temp_f = format(temp_c * 9.0 / 5.0 + 32.0, ".2f")

 TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

我不精通python,但我尝试查找类似的问题,但没有什么能真正帮助我解决我的问题。但是我不明白的是这段代码基本上是其他的复制粘贴,以及其他人使用的。当什么都没有改变时,为什么这会返回错误?

下面还列出了我一直在使用的完整代码。谢谢你的帮助!

import Adafruit_DHT
from ISStreamer.Streamer import Streamer
import time

# --------- User Settings ---------
SENSOR_LOCATION_NAME = "Office"
BUCKET_NAME = ":partly_sunny: Room Temperatures"
BUCKET_KEY = "rt0129"
ACCESS_KEY = "PLACE YOUR INITIAL STATE ACCESS KEY HERE"
MINUTES_BETWEEN_READS = 10
METRIC_UNITS = False
# ---------------------------------

streamer = Streamer(bucket_name=BUCKET_NAME, bucket_key=BUCKET_KEY, access_key=ACCESS_KEY)
while True:
    humidity, temp_c = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
    if METRIC_UNITS:
        streamer.log(SENSOR_LOCATION_NAME + " Temperature(C)", temp_c)
    else:
        temp_f = format(temp_c * 9.0 / 5.0 + 32.0, ".2f")
        streamer.log(SENSOR_LOCATION_NAME + " Temperature(F)", temp_f)
    humidity = format(humidity,".2f")
    streamer.log(SENSOR_LOCATION_NAME + " Humidity(%)", humidity)
    streamer.flush()
    time.sleep(60*MINUTES_BETWEEN_READS)
4

2 回答 2

0

问题是您的temp_c变量被设置为None. 这就是异常TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'告诉你的。

我不知道为什么会发生这种情况,但鉴于它发生在您的通话中,Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)我猜想要么通话没有正确进行。或者,如果相同的代码在另一个 Pi 上运行,则更有可能是传感器未正确安装或设置。

于 2020-07-20T22:27:02.417 回答
0

Adafruit_DHT.read_retry没有正确返回temp_c。因此它是NoneType并且不能乘以浮点数。我建议您尝试通过调用具有不同参数和print返回值的函数来进行调试,直到您根据设备的功能确定如何正确调用它。

于 2020-07-20T22:29:04.973 回答