Das 20 x 4 Zeichen Display mit dem Raspberry Pi

Das 20 x 4 Zeichen Display mit dem Raspberry Pi Titelbild

Mit dem 20 x 4 Display kannst du einfach Text ausgeben. Das Display hat dabei vier verschiedene Zeilen und kann auf jeder Zeile maximal 20 Zeichen darstellen.

Doch bevor wir wirklich damit anfangen durch unendliche Weiten unseres Displays zu reisen, müssen wir dieses erst einmal anschließen! Hört sich einfach an, ist es eigentlich auch, halt nur ein klein wenig komplizierter. Das Display hat insgesamt 16 Pins von denen wir elf über die GPIO Pins an den Raspberry Pi anschließen müssen. Da aber jeder Pin eine Nummer hat, ist das relativ einfach. Wo die Nummerierung anfängt, findet ihr auf der Unterseite des Displays heraus. Dazu stecken wir das Display einfach in das Breadboard und verbinden es über die Kabel mit dem Raspberry Pi. Wenn das Schaltbild zu wuselig ist, dann haben wir unten noch eine Tabelle für dich.

39.png
Anschlüsse am Raspberry Pi Anschlüsse am Display
- 1
5V 2
Widerstand 560 Ohm (Farbcode: Grün, Blau, Braun, Gold) zu GND 3
GPIO 7 4
GND 5
GPIO 8 6
- 7,8,9,10
GPIO 23 11
GPIO 18 12
GPIO 15 13
GPIO 14 14
Widerstand 10Ohm (braun, schwarz, orange, gold) zu 5Volt 15
GND 16

Gerade bei so vielen Anschlüssen kann es leicht mal passieren, den Überblick zu verlieren. Bei uns sah es am Ende auch so aus:

In der nächsten Einheit kümmern wir uns dann darum, die Library für das Display zu installieren.

Jetzt, da wir alles richtig angeschlossen haben, geht es darum, auch wirklich Texte auf dem Display darzustellen. Deswegen müssen wir noch mal mit pip eine weitere Library installieren. (Wenn du pip noch nicht installiert hast, findest du auf der pip Seite mehr Informationen)

sudo pip-3.2 install RPLCD

Wenn du alles richtig gemacht hast, sollte es bei dir so aussehen:

40.png

Das bedeutet, die Library ist installiert und in der nächsten Einheit werden wir dann unser erstes Programm schreiben \o/

Zuerst erstellen wir einen neuen Ordner, damit dein Raspberry Pi nicht rummeckert, dass es ihm zu unordentlich wird. Deswegen erstelle den Ordner display

Lösung

mkdir display

In dem Ordner können wir jetzt die Datei hello-display.py anlegen

nano hello-display.py
import RPi.GPIO as gpio
from RPLCD import CharLCD
gpio.setmode(gpio.BCM) # Pin Belegung festlegen
lcd = CharLCD(pin_rs=7, pin_rw=4, pin_e=8, pins_data=[23, 18, 15, 14], numbering_mode=gpio.BCM, cols=20, rows=4, dotsize=8)
lcd.write_string("Hello Display")
input("Hello Display wird ausgegeben")
lcd.close(clear=True)

Das Programm können wir jetzt einfach ausführen.

sudo python3 hello-display.py

Auf dem Display sollte jetzt “Hello Display” ausgegeben werden. Wenn das nicht der Fall ist, solltest du noch einmal kontrollieren, ob du das Display wirklich richtig angeschlossen hast. Bei den 16 Anschlüssen kann das schon mal schief gehen. Gehe einfach zur anderen Einheit und kontrolliere noch einmal, ob du wirklich alles richtig angeschlossen hast.

In den ersten beiden Zeilen binden wir, wie schon so oft zuvor, die benötigten Bibliotheken in das Programm ein. Die erste kennst du schon und die zweite stellt dir alle nötigen Funktionen zur Verfügung, die das Display zum Laufen bringen. Zeile 4 ist dir auch schon bekannt.

Ab Zeile 4 wird es dann wieder etwas unübersichtlich. Aber eigentlich teilen wir der Funktion CharLCD() nur mit, welche Pins wir gerne benutzen möchten und welche Pin-Belegung wir für den Pi gewählt haben und wie groß das Display ist, das wir nutzen.

Die variable lcd hat nun also genaue Vorstellungen über das Display, das wir nutzen. Sie stellt sozusagen das Display aus der realen Welt als Teil des Programms im Computer dar. Teile eines Computerprogramms, die Gegenstände aus der realen Welt repräsentieren, nennt man Objekte.

In Zeile 5 können wir das lcd Objekt zum ersten Mal benutzen. Hat man ein Objekt und möchte dies mit einer Funktion ansprechen, funktioniert das etwas anders, als wir es sonst gemacht haben. Man nimmt dann nämlich das Objekt, setzt einen Punkt hinten dran und hängt da dann die Funktion dran, die man gerne benutzen möchte. Das sieht dann ungefähr genauso wie in Zeile 5 aus. Wie gewohnt kannst du jetzt deinen gewünschten Text in die Funktion schreiben, dieser wird dann auf dem LCD-Display ausgegeben.

Damit du dir auch ansehen kannst, was du da geschrieben hast, steht in Zeile 6 unser alter Freund die input() Funktion. Sie hält das Programm so lange an, bis du irgendeine Eingabe im Terminal tätigst.

Hast du dein Werk genug betrachtet und eine Eingabe auf der Tastatur getätigt, kann das Programm weiter zu Zeile 7 laufen. Da nutzen wir ein zweites Mal das lcd Objekt. Diesmal mit einer Funktion, die den Inhalt auf dem Display aufräumt, Ordnung muss sein! Jetzt ist das Programm beendet und du bist wieder ein bisschen klüger. Aber natürlich kann das Display auch noch ein wenig mehr!

Helligkeit und Texte erkennen

Die Displays können verschiedene sein, heißt, du hast alles wie erklärt angeschlossen, aber der Text lässt sich doch nicht so toll erkennen. Dazu musst du wissen, dass Pin3 am Display für den Kontrast da ist und 14 für die Hintergrundbeleuchtung. Alternativ kannst du an Pin3 zu GND auch ein 4,7K Ohm Widerstand (Gelb | Lila | Schwarz | Braun | Schwarz) benutzen und Pin 14 direkt an 5V anschließen. Ansonsten hast du auch die Möglichkeit, durch Variationen der Widerstände das perfekte Ergebnis zu schaffen ;)

Noch mehr Display

Mit der Funktion .write_string(“”) haben wir in der vorherigen Einheit diverse Texte auf dem Display dargestellt. Bevor wir uns die weiteren Funktionen ansehen, wollen wir mehr als nur ein “Hello World” ausgeben. Wenn wir einfach den String durch den Satz “Ich lerne viele, viele, viele tolle Dinge mit dem Jugend Programmiert Starterkit!!” ersetzen, können wir sehen, dass es automatisch Zeilenumrbrüche gibt und das dabei auch im Satz die einzelnen Wörter unterbrochen werden. Wenn wir aber unbedingt einen Zeilenumbruch haben wollen, können wir diesen einfach mit einem \n machen. Probier das doch einfach mal selbst aus!

Eine weitere coole Funktion ist die .shift_display() Funktion! Mit dieser lässt sich der gesamte Bildschirminhalt nach Links oder Rechts bewegen. Dazu übergibst du als Parameter der Funktion die Anzahl, inwieweit sich der Text bewegen soll. Mit einem positiven oder negativen Wert kannst du auch die Richtung verändern. Hier ein kleines Beispiel, basierend auf dem hello-display.py Programm

nano display-shift.py</code>
import RPi.GPIO as gpio
from RPLCD import CharLCD
gpio.setmode(gpio.BCM) # Pin Belegung festlegen
lcd = CharLCD(pin_rs=7, pin_rw=4, pin_e=8, pins_data=[23, 18, 15, 14], numbering_mode=gpio.BCM, cols=20, rows=4, dotsize=8)
lcd.write_string("Hello Display")
input("Hello Display wird ausgegeben")
lcd.shift_display(3)
input("Text hat sich bewegt")

Nach dem Starten des Programms wartet dieses wieder solange, bis der Input gefüllt wird. Dazu reicht es, einfach einmal die Enter-Taste zu tätigen. Nun wird das Programm fortgeführt und der Text um drei Zeichen in die rechte Richtung bewegt.

Bevor wir darauf eingehen, mit welchen weiteren Funktionen wir uns das Leben mit dem Display einfacher machen können, gibt es hier noch eine kleine Aufgabe für dich! Also: schreibe ein Programm, mit dem sich der von dir gewählte Text sicher immer weiter und weiter bewegt. Also sich in einer Sekunde um zwei Kästchen nach Rechts bewegt! Sei kreativ und lass dir was schlaues einfallen! Die Lösung gibt es dann in der nächsten Einheit! Wenn du ein wenig Hilfe brauchst, haben wir auch noch ein Tipp für dich. Versuche es aber erstmal alleine!

Tipp: Mithilfe einer While-Schleife kannst du bis in alle Ewigkeiten deinem Raspberry Pi Dinge ausführen lassen. Wäre das nicht eine coole Möglichkeit?

Display Shift

Du hast geschafft? Dann Gratulation! Wenn nicht, haben wir hier noch einmal eine Beispiellösung vorbereitet. Wenn deine Lösung anders aufgebaut ist, aber trotzdem funktioniert, kannst du deine Lösung einfach in den Kommentaren teilen! Hier gibt es aber erstmal unseren Code, wir haben natürlich auch eine While-Schleife benutzt.

import RPi.GPIO as gpio
from RPLCD import CharLCD
import time

gpio.setmode(gpio.BCM) # Pin Belegung festlegen
lcd = CharLCD(pin_rs=7, pin_rw=4, pin_e=8, pins_data=[23, 18, 15, 14], numbering_mode=gpio.BCM, cols=20, rows=4, dotsize=8)
lcd.write_string("Hello Display")

while True:
    lcd.shift_display(2)
    time.sleep(1)</code>

Wie du hier sehen kannst, haben wir eine While-Schleife eingebaut ;) Du findest sie in Zeile 9. Wir haben den Wert True übergeben. Alles was eingerückt ist, wird dann ausgeführt. Also jeweils einmal die Bewegung des Textes und dann wartet das gesamte Programm eine Sekunde bevor die While-Schleife ein weiteres mal durchläuft. für time.sleep(1) müssen wir auch noch die Library in Zeile 3 importieren.

So einfach kann es sein, eine kleine Anwendung zu bauen. In der nächsten Einheit werden wir uns dann mit den übrigen Befehlen für das Display auseinandersetzen.

Weitere Methoden

In den letzten Einheiten haben wir uns vor allem damit beschäftigt, Inhalte auf dem Display darzustellen. Hier soll es aber noch ein wenig mehr um die Position der Inhalte gehen.

lcd.cursor_pos = (1, 1)</code>

Bei dieser Methode handelt es sich um keine Funktion, sondern wir weisen einer Variablen einen Wert zu. Der Wert in den Klammern sollte uns bekannt vorkommen, denn es handelt sich dabei um ein Tuple. Als ersten Wert müssen wir dabei die Reihe angeben, bei dem zweiten Wert handelt es sich um die Spalte. Bedenke dabei, dass wir dabei bei 0 anfangen zu zählen, was bedeutet, dass es sich bei Position (1,1) um die 2 Reihe in der 2. Spalte handelt.

Jetzt bist du dran: Baue die folgende Position in dein Programm ein und lasse so deinen Displaytext hin und her springen.

lcd.text_align_mode = Alignment.right</code>

Hiermit können wir festlegen, ob der Text rechts- oder linksbündig sein soll. Dafür musst du vorher aber noch from RPLCD import Alignment importieren, damit das Programm auch weiß, wovon du redest.

lcd.home()

Mit diesem Befehl findest du immer wieder nach Hause, selbst wenn du dich in diesen unendlichen Weiten verlaufen haben solltest! Also musst du keine Angst haben.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!