Ein-/Ausschalten des Raspberry Pi Touch-Displays

Ein-/Ausschalten des Raspberry Pi Touch-Displays

Das 7“ Touch-Display für den Raspberry Pi ist eine praktische Sache für eigene Projekte. Oft gibt es aber Probleme mit dem Bildschirmschoner. Mal wird das Display einfach ausgeschaltet, wenn man es eigentlich anhaben will. Manchmal ist es ein, wenn es aus sein soll. Möglichkeiten, das zu verbessern und selber zu steuern, erhalten Sie in diesem Artikel.

Im Internet gibt es viele Blogartikel, die erklären, wie man den Bildschirmschoner von Raspbian abschalten kann. Für viele Fälle ist das schon eine ausreichende Lösung. Damit bleibt der Bildschirm immer eingeschaltet. Es gibt aber auch Einsätze bei denen das Display gezielt aus- und wieder eingeschaltet werden soll. Deswegen bietet sich zusätzlich eine eigene Steuerungsmöglichkeit für das Display an.

Das Ein- und Ausschalten ist mit ein paar Befehlen recht einfach möglich. Die fertigen Dateien finden Sie am Ende des Artikels unter Download.

Hintergrundbeleuchtung an- und ausschalten

Beim originalen Raspberry Pi 7“ Display erstellen Sie am besten zwei Dateien on und off. Die beiden enthalten nur jeweils eine 1 (aus) oder eine 0 (ein). Je nach Status wird dann eine der Dateien nach /sys/class/backlight/rpi_backlight/bl_power kopiert.

Für das Display bedeutet das, die Hintergrundbeleuchtung des Displays ein- oder auszuschalten.

Display AUS als Datei display_off:

sudo cp off /sys/class/backlight/rpi_backlight/bl_power

Display EIN als Datei display_on:

sudo cp on /sys/class/backlight/rpi_backlight/bl_power

Ist der Bildschirm so ausgeschaltet, gibt es aber keine Möglichkeit ihn per Touch wieder zu aktivieren. Das macht es für die Anwendung unbrauchbar. Ich möchte Ihnen hier 3 Möglichkeiten zeigen, wie Sie das Problem lösen können.

Reaktivierung mit Taster

Eine Möglichkeit ist, eine Hardware-Taste zu installieren und beim Betätigen den Bildschirm wieder einzuschalten. Die Realisierung ist mit ein paar Bauteilen einfach möglich.

Schaltplan
Schaltplan für den Anschluss eines Tasters

Das Python-Programm fragt den Taster ab. Am besten läuft es unabhängig von jeder anderen Anwendung und startet mit dem Systemstart als Hintergrundprozess.

Auszug aus dem Python-Test-Programm: test.py

#Prellzeit in Sekunden
KEY_BOUNCE_TIME=2

#GPIO-Pin des Tasters
PinButton=14

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(PinButton,GPIO.IN)

DisplayOn=True
while True:
    time.sleep(0.1)
    print(GPIO.input(PinButton))

    if GPIO.input(PinButton)==0:
        #Taste wird gedrückt, wg. Pull-Up Widerstand beim Wert 0
        DisplayOn=not DisplayOn
        if DisplayOn==True:
            print("Bildschirm EIN")
        else:
            print("Bildschirm AUS")

        #Prelldauer für Taster warten
        time.sleep(KEY_BOUNCE_TIME)   

GPIO.cleanup()
sys.exit()

Reaktivierung mit Sensor-Taste

Oft gibt es bauraumbedingt keine Möglichkeit einen Taster zu installieren. In diesen Fällen wäre es günstig, einen extrem flachen Taster zu haben. Eine Lösung ist ein Sensor-Taster. Er besteht nicht aus mechanischen Bauteilen, sondern nur aus Drähten zur Aktivierung und einem Elektronik-Teil.

Schaltplan
Schaltplan für den Anschluss eines Sensor-Tasters

Die Elektronik des Tasters besteht aus einer Darlington-Stufe. Die beiden Transistoren verstärken einen geringen Stromfluss durch den Finger der berührenden Person und fungieren damit als Tast-Signal für den Raspberry.

Platine
Platine für den Sensor-Taster

Für die Funktion reicht es zwei blanke Drähte an einem Gehäuse anzubringen. Dafür ist extrem wenig Platzbedarf im inneren des Gehäuses notwendig. Für die Befestigung reichen 4 Bohrungen, durch welche die Drähte gesteckt werden. Zur Sicherung empfiehlt es sich, diese auf der Innenseite mit Heißkleber zu fixieren.

Gehäuse
Einbau der Sensor Leitungen in Gehäuse

Als Steuerung dient das gleiche Python-Programm, wie oben beim normalen Taster beschrieben wurde.

Reaktivierung mit PIR

Komfortabler ist der Einsatz ohne Drücken oder Berühren von Tastern. Das kann mit einem PIR-Elements – einem Bewegungsmelder – erreicht werden. Die Bauteile gibt es meistens in 2 Bauformen.

PIR-Module
PIR-Module HC-SR502 und HC-SR505

Die größere Version lässt sich über Potis im Verhalten von Erkennung und Aktivierungszeit einstellen. Die kleine Version hat fest eingestellte Werte. Auch hier ist der Anschluss an den Pi einfach.

Es gibt nur 3 Kontakte: VCC, Data und GND.

Schaltplan
Schaltplan für den Anschluss des PIR

In Python wird der Ausgang des Bewegungsmelders, ebenfalls sehr ähnlich zum obigen Beispiel, abgefragt. Mit der Bewegungserkennung lassen sich aber mehr sinnvolle Erweiterungen einbauen. Beispielsweise eine Nachlaufzeit mit automatischem Ausschalten, wenn keine Bewegung mehr stattfindet.

Auszug aus Python-Programm: automatic.py

#PIR-Kontakt
PinButton=21

#Wartezeit in Sekunden
DISPLAY_ON_TIME=12 # + 8 Sekunden für die kleine PIR-Version = Gesamtzeit

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(PinButton,GPIO.IN)

KeypressButton=time.time()
DisplayOn=True
i=0
while True:
    time.sleep(0.1)
    i=i+1
    if i==10:
        i=0
        if DisplayOn==True:
            print("Time-Out: "+str(DISPLAY_ON_TIME-round(time.time()-KeypressButton)))

    if GPIO.input(PinButton)==1:
        #Zeitpunkt des Tastendrucks merken
        KeypressButton=time.time()
        if DisplayOn==False:
            DisplayOn=True
            SetDisplay("RD7",True)

    if DisplayOn==True:
        if time.time()-KeypressButton>DISPLAY_ON_TIME:
            #Zeit abgelaufen, Bildschirm ausschalten
            DisplayOn=False
            SetDisplay("RD7",False)

GPIO.cleanup()
sys.exit()

Andere Displays

Mit dieser Basis können natürlich auch andere Displays gesteuert werden. Möchten Sie einen HDMI-Bildschirm verwenden, sind diese Befehle möglich.

Display AUS:

xset dpms force on

Display EIN:

xset dpms force off

Das ist bereits in der Funktion SetDisplay vorbereitet. Rufen Sie einfach die Funktion mit den passenden Parametern auf.

  • Ein: SetDisplay(“HDMI”,True)
  • Aus: SetDisplay(“HDMI”,False)
def SetDisplay(DisplayKind,DisplayOn):
    cmd=""
    if DisplayKind=="HDMI": #Jede HDMI-Quelle
        if DisplayOn==True:
            cmd="xset dpms force on"
        else:
            cmd="xset dpms force off"
    if DisplayKind=="RD7": #Raspberry Pi Touch-Display 7"
        if DisplayOn==True:
            cmd="bash -c \"/home/pi/display/display_on\""
        else:
            cmd="bash -c \"/home/pi/display/display_off\""
    if cmd<>"":
        print("Display-Status: "+str(DisplayOn))
        print(cmd)
        os.system(cmd)
        #10 Sekunden warten, solange bleibt Bildschirm aus, wg.
        #Bounce-Time des PIR-Elements
        time.sleep(10)

Beispiel Mediaplayer

In meinem Fall ist der PIR-Sensor in einem Mediaplayer installiert. Bei jeder erkannten Bewegung soll das Display eingeschaltet werden und dann für 20 Sekunden an bleiben. Erfolgt in der Zwischenzeit eine Bewegung, werden die 20 Sekunden wieder zurückgesetzt und laufen von vorne. Nach Ablauf der 20 Sekunden wird das Display wieder automatisch ausgeschaltet.

Allerdings ist bei mir das Display in einem Standard-Gehäuse eingebaut. Dieses bietet aber nicht genügend Platz, um einen Bewegungsmelder anzubauen.

Ich habe mich deshalb für eine Variante aus dem 3D-Drucker entschieden. Das PIR-Gehäuse kann direkt am Display an der Kamera-Halterung befestigt werden.

Montage der Gehäuse
PIR-Gehäuse am Raspberry Pi Touch Display Gehäuse montiert

Das Gehäuse gibt es für beide Bauformen, die große und die kleine PIR Version. Die Modelle dazu können Sie ebenfalls unter Links als Step-Datei herunterladen.

Bei mir wurde die kleine Version verbaut. Hier muss nur beachtet werden, dass eine feste Zeitdauer für die Bewegungserkennung eingestellt ist. In meinem Fall sind das 8 Sekunden. Das Programm für die Erkennung muss diese Zeit berücksichtigen.


Mit diesen Lösungen können Sie jetzt hoffentlich Ihr Display gezielter ein- oder ausschalten und so einen Komfortgewinn für Ihr Projekt erreichen.

Downloads

symbol_download

Hier finden Sie alle Dateien des Projekts zum Download:
Python-Programme für Taster und PIR-Sensor
3D-Gehäuse PIR-Sensor
Schaltpläne für Fritzing

Links

Wikipedia Eintrag zur Darlington-Stufe:

https://de.wikipedia.org/wiki/Darlington-Schaltung

Interessante Informationen rund um PIR-Sensoren mit dem Raspberry Pi:

Artikel zum Mediaplayer:

TACTbox – Mein Mediaplayer

TACTbox+

Dieser Beitrag hat 2 Kommentare

Kommentar verfassen

Menü schließen