Включение и выключение заставки на Raspberry Pi - скрипт на Python

Включение и выключение заставки на Raspberry Pi - скрипт на 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команду. Затем вы можете использовать его, чтобы заставитьДПМСсигналы на монитор для включения или выключения. Вам может потребоваться установить 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

и затем можно снять силу с питона.

Связанный контент