diff --git a/code/display.py b/code/display.py new file mode 100755 index 0000000..d880ef9 --- /dev/null +++ b/code/display.py @@ -0,0 +1,127 @@ +#!/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() \ No newline at end of file diff --git a/einleitung.tex b/einleitung.tex index 1c7302d..b62c4af 100644 --- a/einleitung.tex +++ b/einleitung.tex @@ -1,11 +1,10 @@ \chapter{Einleitung} Im letzten Jahr habe ich mich damit beschäftigt, wie man mithilfe eines Raspberry Pi Umweltdaten messen, aufzeichnen und auswerten kann. Hierzu verwende ich mehrere Sensoren, die die Lufttemperatur (sowohl im Klassenraum, als auch außen), Luftfeuchtigkeit, Luftdruck und die relative Luftqualität. Diese Daten werden als \gls{CSV} gespeichert und können grafisch und rechnerisch ausgewertet werden. -\todo[inline]{genauere Beschreibung des Projekts} -%\begin{figure}[h] -% \centering -% \includegraphics[width=0.9\textwidth]{figures/gesamt.jpg} -% \caption{PLATZHALTER (eigenes Werk)} -% \label{fig:gesamt} -% \todo[inline]{schönes Bild von gesamten Teil} -%\end{figure} \ No newline at end of file +\todo{genauere Beschreibung des Projekts} +\begin{figure}[h] + \centering + \includegraphics[width=0.9\textwidth]{figures/gesamt.png} + \caption{Messstation (eigenes Werk)} + \label{fig:gesamt} +\end{figure} \ No newline at end of file diff --git a/figures/gesamt.png b/figures/gesamt.png new file mode 100644 index 0000000..9b4703f Binary files /dev/null and b/figures/gesamt.png differ diff --git a/hardware.tex b/hardware.tex index e7d41c6..933bc65 100644 --- a/hardware.tex +++ b/hardware.tex @@ -116,7 +116,6 @@ Der Sensor wird über USB an den Raspberry Pi angeschlossen. Um die Daten unter \includegraphics[width=0.9\textwidth]{figures/erstes_display.jpg} \caption{Erstes Display (eigenes Werk)} \label{fig:erstes_display} - \todo[inline]{evtl Bild mit Steckverbindung/löschen/zu Software verschieben} \end{figure} Damit nicht immer ein Computer benötigt wird, um die aktuellen Messwerte zu erfahren, verwende ich ein Display, welches diese anzeigt. Ursprünglich habe ich ein 16x2 Zeichen Display von \emph{Conrad Electronic} verwendet.\footcite{conrad_datenblatt} diff --git a/main.pdf b/main.pdf index c168bdb..ce2cb3b 100644 Binary files a/main.pdf and b/main.pdf differ