【问题标题】:Raspberry Pi Control LED Base on CPU Temperature with PythonRaspberry Pi 使用 Python 根据 CPU 温度控制 LED
【发布时间】:2021-03-02 15:27:31
【问题描述】:

我需要一些帮助,让这个 python 代码与我的 Raspberry Pi 一起工作。目标是基于 CPU Temperature Range 一次打开 3 个 LED 中的 1 个 (Green, Yellow, and Red)。

这意味着:

  • 当温度范围低于 32ºC 时,绿色 LED 需要打开。
  • 如果温度高于 37ºC,红色 LED 会亮起。
  • 如果温度高于 31ºC 或低于 37ºC,则黄色 LED 亮起。

我是编码新手,到目前为止,我可以打印温度,并且无论 CPU 温度如何,只有红色 LED 会亮起并保持亮起。

import os
import time
import RPi.GPIO as GPIO


#GREEN=11
#YELLOW=10
#RED=9

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(10,GPIO.OUT)
GPIO.setup(9,GPIO.OUT)


def measure_temp():
        temp = os.popen("vcgencmd measure_temp").readline()
        return (temp.replace("temp=","").replace("'C",""))

while True:
        measure_temp()
        if measure_temp<32:
            GPIO.output(11,GPIO.HIGH)
            GPIO.output(10,GPIO.LOW)
            GPIO.output(9,GPIO.LOW)
        if measure_temp>37:
            GPIO.output(9,GPIO.HIGH)
            GPIO.output(10,GPIO.LOW)
            GPIO.output(11,GPIO.LOW)
        if measure_temp>32 or <37
            GPIO.output(10,GPIO.HIGH)
            GPIO.output(11,GPIO.LOW)
            GPIO.output(9,GPIO.LOW)
            print(measure_temp())

#cleanup
c.close()
GPIO.cleanup()

【问题讨论】:

    标签: python raspberry-pi cpu led temperature


    【解决方案1】:

    很酷的项目,您的代码已关闭。

    我认为主要问题是您从vcgencmd 获得了string,并且您正试图将其与一个数字进行比较。我会选择更像这样的东西(未经测试):

    #!/usr/bin/env python3
    
    import os
    import re
    import time
    import RPi.GPIO as GPIO
    
    RED, YELLOW, GREEN = 9, 10, 11
    
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(RED,GPIO.OUT)
    GPIO.setup(YELLOW,GPIO.OUT)
    GPIO.setup(GREEN,GPIO.OUT)
    
    
    def measure_temp():
            output = os.popen("vcgencmd measure_temp").readline()
            # Remove anything not like a digit or a decimal point
            result = re.sub('[^0-9.]','', output)
            return float(result)
    
    while True:
            temp = measure_temp()
            if temp<32:
                GPIO.output(GREEN,GPIO.HIGH)
                GPIO.output(YELLOW,GPIO.LOW)
                GPIO.output(RED,GPIO.LOW)
            elif temp>37:
                GPIO.output(RED,GPIO.HIGH)
                GPIO.output(GREEN,GPIO.LOW)
                GPIO.output(YELLOW,GPIO.LOW)
            else:
                GPIO.output(YELLOW,GPIO.HIGH)
                GPIO.output(GREEN,GPIO.LOW)
                GPIO.output(RED,GPIO.LOW)
            print(temp)
            # Let's not affect our temperature by running flat-out full-speed :-)
            time.sleep(1)
    
    #cleanup
    c.close()
    GPIO.cleanup()
    

    还要注意elif 的使用,它可以更轻松地测试三个案例中的最后一个案例。

    我还使用regex 来从vcgencmd 字符串中提取数字,因为文本可能会随着不同的国际化而改变 - 此处为 YMMV。

    【讨论】:

    • 非常感谢您花时间修复我的代码。这一切都如我所愿。上帝保佑你!!
    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2015-04-06
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多