1
0
Fork 0
This repository has been archived on 2024-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
Umweltdatenmessung/display.py

129 lines
3.8 KiB
Python
Raw Normal View History

2013-12-27 09:33:23 +01:00
#!/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
2013-12-27 09:33:23 +01:00
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
2014-03-10 19:07:52 +01:00
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
2014-02-22 10:51:50 +01:00
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
2014-03-10 19:07:52 +01:00
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
2014-03-10 19:07:52 +01:00
inhalt = datei.readlines() # alle Zeilen lesen und in Array "inhalt" speichern
datei.close() # Datei schliessen
2014-03-10 19:07:52 +01:00
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
2014-03-10 19:07:52 +01:00
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()