#!/usr/bin/python # -*- coding: utf-8 -*- # Originales Programm von http://www.schnatterente.net/technik/raspberry-pi-32-zeichen-hitachi-hd44780-display # von mir modifiziert (Anzeige ausgelagert, ergänzt, um Text aus einer Datei anzuzeigen) import time import sys import RPi.GPIO as GPIO # Zuordnung der GPIO Pins (ggf. anpassen) DISPLAY_RS = 7 DISPLAY_E = 8 DISPLAY_DATA4 = 25 DISPLAY_DATA5 = 24 DISPLAY_DATA6 = 23 DISPLAY_DATA7 = 18 DISPLAY_WIDTH = 16 # Zeichen je Zeile DISPLAY_LINE_1 = 0x80 # Adresse der ersten Display Zeile DISPLAY_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile DISPLAY_CHR = True DISPLAY_CMD = False E_PULSE = 0.00005 E_DELAY = 0.00005 def anzeige(): # Anzeige auslagern, um es wiederholt anzuzeigen lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD) lcd_string(oben) lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD) lcd_string(unten) def main(): GPIO.setmode(GPIO.BCM) GPIO.setup(DISPLAY_E, GPIO.OUT) GPIO.setup(DISPLAY_RS, GPIO.OUT) GPIO.setup(DISPLAY_DATA4, GPIO.OUT) GPIO.setup(DISPLAY_DATA5, GPIO.OUT) GPIO.setup(DISPLAY_DATA6, GPIO.OUT) GPIO.setup(DISPLAY_DATA7, GPIO.OUT) display_init() # GPIO.cleanup() def display_init(): lcd_byte(0x33,DISPLAY_CMD) lcd_byte(0x32,DISPLAY_CMD) lcd_byte(0x28,DISPLAY_CMD) lcd_byte(0x0C,DISPLAY_CMD) lcd_byte(0x06,DISPLAY_CMD) lcd_byte(0x01,DISPLAY_CMD) def lcd_string(message): message = message.ljust(DISPLAY_WIDTH," ") for i in range(DISPLAY_WIDTH): lcd_byte(ord(message[i]),DISPLAY_CHR) def lcd_byte(bits, mode): GPIO.output(DISPLAY_RS, mode) GPIO.output(DISPLAY_DATA4, False) GPIO.output(DISPLAY_DATA5, False) GPIO.output(DISPLAY_DATA6, False) GPIO.output(DISPLAY_DATA7, False) if bits&0x10==0x10: GPIO.output(DISPLAY_DATA4, True) if bits&0x20==0x20: GPIO.output(DISPLAY_DATA5, True) if bits&0x40==0x40: GPIO.output(DISPLAY_DATA6, True) if bits&0x80==0x80: GPIO.output(DISPLAY_DATA7, True) time.sleep(E_DELAY) GPIO.output(DISPLAY_E, True) time.sleep(E_PULSE) GPIO.output(DISPLAY_E, False) time.sleep(E_DELAY) GPIO.output(DISPLAY_DATA4, False) GPIO.output(DISPLAY_DATA5, False) GPIO.output(DISPLAY_DATA6, False) GPIO.output(DISPLAY_DATA7, False) if bits&0x01==0x01: GPIO.output(DISPLAY_DATA4, True) if bits&0x02==0x02: GPIO.output(DISPLAY_DATA5, True) if bits&0x04==0x04: GPIO.output(DISPLAY_DATA6, True) if bits&0x08==0x08: GPIO.output(DISPLAY_DATA7, True) time.sleep(E_DELAY) GPIO.output(DISPLAY_E, True) time.sleep(E_PULSE) GPIO.output(DISPLAY_E, False) time.sleep(E_DELAY) #Beginn der Ergaenzung beschreibungen = ["Uhrzeit:","Innentemperatur","Ger\xe1tetemp 1","Bodentemperatur","Ger\xe1tetemp 2","Temperatur/Luft","Luftfeuchte","Au\xe2entemperatur","Luftdruck","Prozessor","Luftqualit\xe1t"] einheiten = ["","\xdfC","\xdfC","\xdfC","\xdfC","\xdfC","% rF","\xdfC","(hPa)","\xdfC",""] try: main() # Initialisierung Seiten = 11 # hier kann man die Anzahl der Seiten ändern while True: # endlos wiederholen Seite = 1 # von Vorne zu zählen beginnen while Seite <= Seiten: # so lange durchlaufen bis man bei der letzten Seite angekommen ist -> dann von vorne beginnen zeile = (Seite) - 1 # Seitenname fängt bei 1 an <-> Array bei 0 datei = open("/home/pi/Temperaturmessung/text.txt", "r") # Datei text.txt zum Lesen oeffnen inhalt = datei.readlines() # alle Zeilen lesen und in Array "inhalt" speichern datei.close() # Datei schliessen oben = beschreibungen[Seite-1] # Beschreibung holen unten = inhalt[zeile] # Wert holen unten = unten[:-1] + " " + einheiten[Seite-1] # Steuerzeichen am Ende loeschen und Einheit hinzufügen anzeige() # oben und unten anzeigen print(Seite,unten,oben) time.sleep(3) # 2 Sekunden warten Seite += 1 # Seite um 1 erhöhen except KeyboardInterrupt: oben = "" unten = "" anzeige() GPIO.cleanup() print "Programm beendet" sys.exit()