0

在我开始之前,我在写这篇文章之前浏览了“类似问题”部分,并没有看到一个与我的情况相匹配的问题。如果找到,请告诉我,如果实际上相似,我会将其标记为“已回答”。我是一名专业的 .net 全栈开发人员,我最近才开始涉足 Python 和电气工程作为一种爱好。

我正在创建一个自动鱼菜共生控制系统,该项目的一部分读取生长床介质的温度,并通过各种其他传感器的输入,重新计算泵循环淹没床的频率。我正在使用带有 Python3.9 和 W1ThermSensor v2.0.0a2 库的 DS18B20。这是传感器的几个函数的初始化和第一个。在初始测试期间,我将 w1thermsensor 作为类的属性而不是继承,因为以这种方式操作代码对我来说更容易。

#!/usr/bin/env python3

from w1thermsensor import W1ThermSensor, Sensor, Unit
from datetime import datetime
import os
import numpy
import traceback


class DS18B20:

    def __init__(self, min_temp=18, max_temp=26):
        self.sensor = W1ThermSensor()
        self.temp_string = "{dt} : Sensor: {id} :: {temp_c}C - {temp_f}F"
        self.temp_c = 0.00
        self.temp_f = 0.00
        self.is_active = False
        self.is_alert = False
        self.min_temp = min_temp
        self.max_temp = max_temp
        self.values = [0.00, 0.00, 0.00, 0.00, 0.00]
        self.value = 0.00

    def start(self):
        if self.sensor is None:
            return False
        os.system('modprobe w1-gpio')
        os.system('modprobe w1-therm')
        # Set baseline for values Average
        self.is_active = True
        self.monitor()
        self.values = [self.temp_c, self.temp_c, self.temp_c, self.temp_c, self.temp_c]
        self.value = numpy.average(self.values)

我遇到的这个问题是它将有 3 个问题之一:

  1. 引发 w1thermsensor.errors.NoSensorFoundError
  2. 引发 w1thermsensor.errors.SensorNotReadyError
  3. 调用 get_temperature() 后在 temp_c 属性中不返回任何值

我对此进行了更多研究,如果我使用'sudo python3'命令在终端中加载IDLE,我可以输入以下命令并且它没有问题:

sudo python3
>>> from w1thermsensor import W1ThermSensor, Sensor
>>> import time
>>> temp_sensor = W1ThermSensor(Sensor.DS18B20)
>>> while True:
...    print(str(round(temp_sensor.get_temperature()))
...    time.sleep(2)

它可以正常工作。我也尝试了“猫”命令

cd /sys/bus/w1/devices
cd 28-3c01d607414b
cat w1_slave
94 01 55 05 7f a5 81 66 5b : crc=5b YES
94 01 55 05 7f a5 81 66 5b t=25250

堆栈跟踪显示它在“ init ()”中调用 W1Termsensor() 函数时抛出错误。我的问题是,是我的代码或实现导致了问题,还是其他原因。我的睡眠时间设置为 2 秒,希望我只是在更新过程中赶上它。任何帮助都会有很大帮助。

附加信息:

  • DS18B20 连接到单独的 5v 电源,电容器用于稳定电压,因为电源的同一 5v 电源轨上有一个 5v 继电器和一个 LED 阵列。
    5v+ -------------+---------VCC------
                     |                  |
                   4.7 Kohm             |
                     |                  |
    GPIO4 ---------------------DQ       = 1uf polCap
                                        |
                                        |
                                        |
    GND ----------------------GND-------
  • 我已经仔细检查了我是否启用了 1-wire。
4

0 回答 0