128 lines
3.8 KiB
Python
Executable file
128 lines
3.8 KiB
Python
Executable file
#!/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()
|
|
|