Hallo zusammen,
folgendes Problem möchte ich lösen:
Ich habe den Raspberry Pi und an dem HDMI-Ausgang ist ein TFT-Bildschirm verbunden und zusätzlich habe ich noch ein Display 1,8" von Sainsmart an der GPIO Leiste angeschlossen. Es ist alles installiert (Treiber usw.) und ich habe auch ein Programm am laufen was die aktuelle CPU-Temp sowie Datum und Uhrzeit auf dem Display anzeigt.
Python
#!/usr/bin/python
# -*- coding: iso8859-1 -*-
#
# CPU-Temperaturanzeige auf TFT Display
# Used to display text to the screen. displayText is only configured to display
# two lines on the TFT. Only clear screen when writing the first line
# 2013-04-22 V0.1 by Thomas Hoeser
# http://www.hoeser-medien.de
# based on Martin's Hobby Projects:
# http://harizanov.com/2013/02/using-my-1-8-tft-as-a-raspberry-pi-status-display/
# angepasst für eigene Zwecke: Andreas
#
# Module importieren.
import pygame
import sys
import os
import time
import signal
time_stamp_prev=0
# FRAMEBUFFER auf das TFT-Display setzen
os.environ["SDL_FBDEV"] = "/dev/fb1"
# os.environ["SDL_FBDEV"] = "/dev/fb0" <= geht nicht
# don't have X11 running when you start it
# could be "fbcon", "directfb", try "aalib" for extra fun
os.environ['SDL_VIDEODRIVER']="fbcon"
# mögliche Schriftarten
# dejavuserif
# droidsans
# freemono
# robotocondensed
# droidsansmono
# freeserif
# roboto
# dejavusansmono
# droidserif
# dejavusans
# freesans
#------------------------------------------------------------------------------------------------------
def displayText(text, size, posv, posh, bld, itc, udl, color, clearScreen):
# screen-Surface mit Schwarz (RGB = 0, 0, 0) füllen.
if clearScreen:
screen.fill((0, 0, 0))
#font = pygame.font.Font(None, size)
font = pygame.font.SysFont("dejavusans", size)
font.set_bold(bld)
font.set_italic(itc)
font.set_underline(udl)
text = font.render(text, 0, color)
textRotated = pygame.transform.rotate(text, 0)
textpos = textRotated.get_rect()
textpos.centerx = posh
textpos.centery = posv
screen.blit(textRotated,textpos)
#------------------------------------------------------------------------------------------------------
def main():
global screen
# Initialisieren aller Pygame-Module und
pygame.init()
# Fenster erstellen (wir bekommen eine Surface, die den Bildschirm repräsentiert).
size = width, height = 160, 128
screen = pygame.display.set_mode(size)
# Mauszeiger einschalten und Tastedrücke wiederholt senden
pygame.mouse.set_visible(0)
pygame.key.set_repeat(1, 30)
# Clock-Objekt erstellen, wird benötigt und Framerate zur begrenzen).
clock = pygame.time.Clock()
# Wartezeit für die Aktualisierung der Anzeige
sleep_time = 0.2
# Schleife damit das Programm läuft solange runnning == True ist
running = True
while running:
# Framerate auf 30 Frames pro Sekunde beschränken
# Pygame wartet, falls das Programm schneller läuft
clock.tick(30)
# Alle aufgelaufenden Events holen und abarbeiten.
for event in pygame.event.get():
# Programm beenden, wenn wir ein Quit-Event finden.
if event.type == pygame.QUIT:
running = False
# Wir interessieren uns auch für "Taste gedrückt"-Event
if event.type == pygame.KEYDOWN:
# Wenn ESCAPE gedrückt wird, posten wir ein QUIT-Event in Pygames Event-Warteschlange.
if event.key == pygame.K_ESCAPE:
pygame.event.post(pygame.event.Event(pygame.QUIT))
# das eigentliche Programm
# Messdaten holen
with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f:
CPUtemp = int(float(f.readline().split()[0]))
CPUtemp = round((CPUtemp/1000.0), 2)
# Text ausgeben
# displayText(text, size, posv, posh, bold, italic, underl, color, clearScreen)
displayText('Chip-Temp.', 24, 15, 84, 0, 0, 0, (0,0,255), True )
# prüfen ob CPU-Temp =>45°C ist dann in "rot" ausgeben ansonsten in "grün"
if CPUtemp>=45:
displayText( str(CPUtemp) + "°C" , 32, 64, 84, 0, 0, 0, (255, 0, 0), False )
else:
displayText( str(CPUtemp) + "°C" , 32, 64, 84, 0, 0, 0, (0, 255, 0), False )
# Datum ausgeben
displayText(time.strftime("%d.%m.%Y",time.gmtime()), 10, 120, 30, 0, 0, 0, (255, 255, 0), False)
# Uhrzeit ausgeben
displayText(time.strftime("%H:%M:%S",time.gmtime()), 10, 120, 135, 0, 0, 0, (255, 255, 0), False)
#Update the full display Surface to the screen
pygame.display.flip()
time.sleep(sleep_time)
# sys.exit(0)
# Überprüfen, ob dieses Modul als Programm läuft und nicht in einem anderen Modul importiert wird.
if __name__ == '__main__':
# Unsere Main-Funktion aufrufen
main()
Alles anzeigen
Das läuft soweit gut. Da das Display mit seinen 1,8" nicht wirklich groß ist würde ich gern (z.B. eine Grafik des Temperaturverlaufes über die Zeit) auf dem TFT- Bildschirm ausgeben. Bis jetzt ist mir noch keine Lösung eingefallen wie ich bei den Ausgaben zwischen den zwei Anzeigen umschalten kann.
Habt ihr hier eine Idee für mich? Geht das überhaupt?
Gruß Andreas