저는 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.
보시다시피 모션 센서가 있는데, 모션이 감지될 때마다 모니터를 절전 모드에서 깨우고 싶지만 해당 영역에 더 이상 모션이 없으면 2분 후에 모니터를 절전 모드로 전환해야 합니다.
저를 도와주세요?
답변1
x11-xserver-utils
명령을 얻으려면 패키지를 설치하십시오 xset
. 그런 다음 이를 사용하여 강제로DPMS모니터에 켜짐 또는 꺼짐 신호를 보냅니다. DISPLAY
환경에서 변수를 설정해야 할 수도 있습니다 . 예:
DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off
파이썬에서는 이런 일을 할 수 있습니다. 매초마다 여론조사를 실시합니다. 디스플레이를 켜거나 껐는지 여부를 기억하십시오. 신호가 활성화될 때마다 시간을 기록해 두십시오. 마지막 활성 이후 시간이 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
그런 다음 파이썬에서 강제를 제거할 수 있습니다.