我是 Python 编程新手。如何编写一个脚本来唤醒显示器并根据条件将其置于睡眠状态?
import RPi.GPIO as GPIO
PIR = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR, GPIO.IN)
while True:
if GPIO.input(PIR):
""" There should be the "awake monitor" function """"
else:
"""" There should be something that makes my script run over and over but after for example 2 minutes after there is no signal on PIR.
如您所见,我有一个运动传感器,每次感应到运动时,我都想让显示器从睡眠状态唤醒,但是当其区域内不再有运动时,两分钟后它应该让显示器进入睡眠状态。
你能帮我么?
答案1
安装x11-xserver-utils
软件包以获取xset
命令。然后您可以使用它来强制DPMS向显示器发出信号以打开或关闭。您可能需要DISPLAY
在环境中设置变量。例如:
DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off
您可以在 Python 中执行类似操作。每秒轮询一次。记住您是否已将显示器设置为打开或关闭。每当信号处于活动状态时,记下当天的时间。当自上次活动以来的时间超过 2 分钟时,关闭显示器。大致如下:
import os, subprocess, time
os.environ['DISPLAY'] = ":0"
displayison = False
maxidle = 2*60 # seconds
lastsignaled = 0
while True:
now = time.time()
if GPIO.input(PIR):
if not displayison:
subprocess.call('xset dpms force on', shell=True)
displayison = True
lastsignaled = now
else:
if now-lastsignaled > maxidle:
if displayison:
subprocess.call('xset dpms force off', shell=True)
displayison = False
time.sleep(1)
如果您正在与屏幕交互,并希望它在这段时间内独立于 gpio 保持开启状态,那么最好让标准 X11 空闲机制检测到 2 分钟空闲时间已过,然后自动关闭屏幕。只需使用您的程序强制打开屏幕即可。
您可以通过一次调用来设置 120 秒的空闲超时:
xset dpms 120 120 120
然后就可以从蟒蛇身上移除力量了。