Die folgende Schaltung besteht aus vier Komponenten (wenn man Verdrahtungsmaterial außer Acht lässt). Neben Raspberry
Pi (3B) müssen ein Display, I2C-Interface-Modul und ein Level-Konverter miteinander verdrahtet werden.
Raspberry Pi
Mit dem Display stehen für Anzeigezwecke insgesamt 80 Plätze für einzelne Zeichen zur Verfügung. Sie sind in vier
Zeilen mit je 20 Plätzen unterteilt. Das Display gehört zu der Familie, die mit dem Controller HD44780 (oder kompatibel) ausgestattet ist.
Der Controller leistet bei der Umsetzung der externen Befehle in lesbare Zeichen auf dem Display die meiste Arbeit. Die Displays mit
diesem Controller sind weit verbreitet und in unterschiedlichsten Ausführungen erhältlich.
Display 4x20 Frontansicht
Das Display kann nicht direkt an den I2C-Bus angeschlossen werden. Doch das stellt kein besonders großes Problem dar. Es
gibt auf dem Markt viele Schnittstelle-Module, die das Problem erledigen. Die Einbindung eines solchen Moduls erfolgt ganz problemlos.
Das Display verfügt über 16 Anschlüsse. Die Interface-Module, die extra dafür entwickelt wurden, ebenfalls. Das Modul wird problemlos
direkt an das Display angelötet. Auf dem Modul sitzt der Chip PCF8574T, der das Display steuert und I2C-Schnittstelle zur Verfügung stellt,
ein Jumper für Hintergrundbeleuchtung und ein Poti, mit dem der Kontrast des Displays eingestellt werden kann. Ein fertiges Gespann,
bestehend aus dem Display und dem Modul, sieht man am folgenden Bild:
Display mit angelötetem Interface Modul FC-113
Der Aufwand lohnt sich. Mit dem kleinen Modul werden lediglich zwei Verbindungen benötigt, um eine Kommunikation
zwischen Display und Raspberry Pi herzustellen. Sonst muss man sechs GPIOs aufopfern: eine ganze Menge.
Zwischen Raspberry Pi und dem Interface-Modul findet zusätzlich noch eine Pegelanpassung statt. Raspberry Pi arbeitet mit 3,3V,
Display mit dem Modul mit 5V. Damit es zu keiner Beschädigung des kleinen Computers kommt, ist eine Pegelanpassung immer empfehlenswert.
Level Konverter 4-Kanal
Die Verdrahtung, da nur wenige Verbindungen nötig sind, ist schnell gemacht. Der dazugehörige Schaltplan ist auf der
folgenden Abbildung zu sehen:
Schaltplan
Testschaltung auf einem Steckbrett:
Testschaltung
Das Programm
Die Aufgabe der Schaltung ist es, auf dem Display das aktuelle Datum, Uhrzeit und die CPU-Temperatur anzuzeigen.
Bevor man mit Erstellung eines passenden Programms beginnt, müssen bestimmte Voraussetzungen erfüllt werden:
1. Auf dem Raspberry Pi muss der I2C-Bus aktiviert werden.
2. Im Programm wird die Bibliothek RPLCD verwendet. Sie muss installiert werden.
Infos unter https://pypi.org/project/RPLCD/
3. Mit "sudo apt install python-smbus" und "sudo pip install smbus2" können die smbus-Pakete installiert werden.
Das Programm besteht grundsätzlich aus drei Schritten. Im ersten Schritt wird das aktuelle Systemdatum ermittelt, im zweiten
Schritt die Uhrzeit. Beides geschieht mit dem Befehl "time.strftime". Im dritten Schritt wir die aktuelle CPU Temperatur ausgelesen. Hier
wird Datei "/sys/class/thermal/thermal_zone0/temp" zum Lesen geöffnet und anschließend wieder geschlossen. Es werden dabei drei
erste Zeichen ausgelesen. Damit steht uns, gespeichert in der Variable "Temperatur", die aktuelle Temperatur mit einer Stelle nach
Komma zur Verfügung. Nach jedem Schritt wird die Funktion "Anzeige" aufgerufen. Beim Aufruf wird der Funktion die gewünschte Zeile,
Startposition des ersten Zeichens und der Text, der ausgegeben werden soll, übergeben. Nachdem alle Werte im Display auf dem richtigen
Platz stehen, wiederholt sich der Vorgang.
Das Programm:
# ------------------------------------------------------------
# Raspi - Intern
# Anzeige von Datum, Uhrzeit und CPU-Temp.
# Mit Lcd_Display 4x20, I2C-Bus
# Raspberry Pi 3B, Python 3
# ------------------------------------------------------------
from RPLCD.i2c import CharLCD
import time
lcd=CharLCD('PCF8574',0x27)
# UUNTERPROGRAMM ANZEIGE ---------------------
def Anzeige(Zeile, PosStart, Text):
for CharNr in range (0, len(Text)):
Ausgabe = Text [CharNr:CharNr + 1] + ' '
Pos = PosStart + CharNr - 2
for PosAkt in range (19, Pos, -1):
lcd.cursor_pos =(Zeile, PosAkt)
lcd.write_string(Ausgabe)
if Ausgabe [0:1] == '*':
lcd.cursor_pos =(Zeile, PosAkt)
lcd.write(0xDF)
time.sleep(0.2)
# HAUPTPROGRAMM ------------------------------
lcd.clear()
lcd.cursor_pos =(0,0)
lcd.write_string('--- Raspi Intern ---')
tempData = "/sys/class/thermal/thermal_zone0/temp"
while True:
time.sleep(2)
for i in range(3):
if i == 0: # DATUM
Text=time.strftime("%d.%b.%y")
PosStart = 6
Anzeige (i+1, PosStart, Text)
if i == 1: # UHRZEIT
Text=time.strftime("%H:%M")
PosStart = 8
Anzeige (i+1, PosStart, Text)
if i == 2: # CPU Temperatur
Datei = open(tempData, "r")
Temperatur = Datei.readline(3)
Datei.close()
Text = Temperatur[0:2] + ',' + Temperatur[2:3] + ' *C'
PosStart = 7
Anzeige (i+1, PosStart, Text)
# ----------------------------------------------------------