Raspberry Pi 根据 CPU 温度和 Python 控制 LED
Raspberry Pi Control LED Base on CPU Temperature with Python
我需要一些帮助来使这个 python 代码与我的 Raspberry Pi 一起工作。目标是一次打开 3 个 LED 中的 1 个 (Green, Yellow, and Red) based on a CPU Temperature Range.
这意味着:
- 当温度范围低于 32ºC 时,绿色 LED 需要点亮。
- 如果温度高于 37ºC,红色 LED 亮起。
- 如果温度高于 31ºC 或低于 37ºC,则黄色 LED 点亮。
我是编码方面的新手,到目前为止,我可以打印温度并且只有红色 LED 亮起并保持亮起,无论 CPU 温度如何。
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()
很棒的项目,您的代码已完成。
我认为主要问题是您从 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 在这里。
我需要一些帮助来使这个 python 代码与我的 Raspberry Pi 一起工作。目标是一次打开 3 个 LED 中的 1 个 (Green, Yellow, and Red) based on a CPU Temperature Range.
这意味着:
- 当温度范围低于 32ºC 时,绿色 LED 需要点亮。
- 如果温度高于 37ºC,红色 LED 亮起。
- 如果温度高于 31ºC 或低于 37ºC,则黄色 LED 点亮。
我是编码方面的新手,到目前为止,我可以打印温度并且只有红色 LED 亮起并保持亮起,无论 CPU 温度如何。
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()
很棒的项目,您的代码已完成。
我认为主要问题是您从 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 在这里。