Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi

Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi – Steuerung der Anzeige

Dieser Artikel „Steuerung der Anzeige“ beschreibt wie ich ich die Steuerung der Anzeige umgesetzt habe. Dabei war es wesentlich nur einen Taster zu verwenden, um den Bilderrahmen „wohnzimmertauglich“ und leicht bedienbar zu halten.

Die Anzeige der verschiedenen Bildschirme wird durch den zuvor in den Rahmen eingebauten Taster gesteuert. Bei jedem Tastendruck wird erst ein Script aufgerufen, das die Daten ermittelt (z.B. holen der aktuellen Wetterdaten) und diese Daten in einem fertigen Bild speichert. Danach wird dieses Bild in den Framebuffer geschrieben. Da das Holen der Daten auch mal ein paar Sekunden dauern kann, wird direkt nach dem Tastendruck ein Overlay mit „Bitte warten…“ eingeblendet.

Ein zweiter Taster löst einen Neustart aus. Das war beim Testen sehr bequem, ist aber nicht zwingend für den normalen Betrieb nötig.

Die Steuerung ist in der Datei kiosk_mainloop.py realisiert:

#!/usr/bin/env python
# -*- coding: latin-1 -*-

import time,sys
import RPi.GPIO as GPIO
import os,signal
from time import sleep

# set screenwidth
if (len(sys.argv) > 1):
	screenwidth=sys.argv[1]
else:
	screenwidth=640


GPIO.setwarnings(False)
# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)


GPIO.setup(7 , GPIO.IN)
GPIO.setup(11 , GPIO.IN)

# script for killing running scripts
kill_script="/home/pi/kiosk/kill_script.sh"

# array of scripts
scripts = {
	1:"/home/pi/kiosk/show_slideshow.sh",
	2:"/home/pi/kiosk/show_calendar.sh",
	3:"/home/pi/kiosk/show_weather.sh",
	4:"/home/pi/kiosk/show_serverstatus.sh"
}

prescripts = {
	1:"",
        2:"/home/pi/kiosk/get_cal1.py",
        3:"/home/pi/kiosk/get_weather1.py",
	4:"/home/pi/kiosk/get_serverstatus.py"
}

curr_script=1

# start first script initially
print "Starting: " + scripts[1]
os.system(kill_script + " fbi")
os.system(scripts[1])
# Dauersschleife
taster1_curr = 0
taster2_curr = 0
taster1_prev = 0
taster2_prev = 0

while 1:
	# set current state of taster1
	#
	if GPIO.input(7) == GPIO.HIGH:
		taster1_curr = 1
		print "Taster 1 gedrückt"
	else:
		taster1_curr = 0

	# set current state of taster 2
	#
	if GPIO.input(11) == GPIO.HIGH:
		taster2_curr = 1
                print "Taster 2 gedrückt"
	else:
		taster2_curr = 0

	# it state changed switch to the next service
	#
	if taster1_curr == 1 and taster1_curr != taster1_prev:
		curr_script = curr_script + 1
		if curr_script > len(scripts):
			curr_script = 1
		
		print "Stopping fbi "
                os.system(kill_script + " fbi")

		# zeige bitte warten hinweis an
		os.system("/home/pi/kiosk/pleasewait");

		if prescripts[curr_script] != "":	
			print "Starting Prescript: " + prescripts[curr_script]
                	os.system(prescripts[curr_script] + " " + str(screenwidth) )

		print "Starting: " + scripts[curr_script]
		os.system(scripts[curr_script])

	if taster2_curr == 1 and taster2_curr != taster2_prev:
		print "rebooting system"
		os.system("sudo shutdown -r now")

	# remember previous taster state
	taster1_prev = taster1_curr
	taster2_prev = taster2_curr

	# sleep a bit to avoid high load
	time.sleep(0.5)Code-Sprache: PHP (php)

Die Steuerung ist leicht anzupassen oder zu erweitern, indem die Arrays scripts und prescripts entsprechend verändert werden. Dabei muss das unter prescripts eingetragene Script ein Bild bereitstellen, das durch das unter scripts angegebene Script in den Framebuffer geladen wird.

Umschalten zwischen den Bildschirmen

Die im Code verwendeten Scripte werden in den jeweiligen Artikeln detaillierte beschrieben. Das Script kill_script.sh beendet den aktuell angezeigten Bildschirm. In der Steuerung wird zuerst das Script ausgeführt, das den anzuzeigenden Bildschirm aufbaut, dann das kill_script.sh, um den laufenden Bildschirm zu beenden und dann wird der neue Bildschirm angezeigt.

kill_script.sh:

#!/bin/bash

scriptname=$1

# zuerst alle PIDs suchen und in einer Shell-Variablen speichern:
PIDS=$(ps -C $scriptname -o pid=)
   
# falls gefunden killen:
if [ -n "$PIDS" ]; then
	# Signal senden: bitte beenden
	sudo kill -HUP $PIDS > /dev/null 2>&1
fi
exit 0
Code-Sprache: PHP (php)

Bitte warten …, so einfach war das nicht

Das Programm pleasewait, lädt ein Overlay in der Bildschirmmitte, das „Bitte warten…“ einblendet, damit der Anwender erkennt, dass sein Tastendruck angenommen wurde. Das Einblenden dieses Textes hat mir einiges an Kopfzerbrechen bereitet, da das Laden eines Overlays über Python einfach zu langsam war. Daher habe ich die Umsetzung dann doch in C vorgenommen auf Basis eines einfachen Programms, das direkt in den Framebuffer schreibt. Zum herunterladen der Sourcen hier klicken.

Die Artikelserie besteht aus acht Teilen. Dem Überblick „Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi“ und den sieben Artikeln zum Bau des digitalen Bilderrahmens mit dem Raspberry Pi.

  1. Einbau der Teile in den IKEA-Rahmen
  2. Grundlegende Einstellungen für den Raspberry Pi
  3. Steuerung der Anzeige
  4. Automatische Dia-Show
  5. Erstellen der Kalenderanzeige
  6. Generieren der Wetteranzeige
  7. Ermitteln und Anzeigen des Server-Status
Teile diesen Beitrag

3 Kommentare zu „Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi – Steuerung der Anzeige“

  1. Pingback: Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi - Erstellen der Kalenderanzeige

  2. Pingback: Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi und LS-7 Display

  3. Pingback: Einbau der Teile in den IKEA-Rahmen - Digitaler IKEA-Bilderrahmen mit dem Raspberry Pi

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

:bye: 
:good: 
:negative: 
:scratch: 
:wacko: 
:yahoo: 
B-) 
mehr...
 


Diese Seite verwendet Cookies. Mit der Nutzung von tuxlog erklärst Du Dich mit der Verwendung von Cookies einverstanden. Detaillierte Informationen über die Verwendung von Cookies auf dieser Website findest Du in der Datenschutzerklärung.

Nach oben scrollen