Raspbery Pi LCD Display

GPIO

Raspberry Pi LCD Display: 16×2 Zeichen anzeigen (HD44780)

Der gängigste Controller der mehrzeiligen Zeichen-Displays ist der HD44780. Es gibt verschiedene Raspberry Pi LCD Display Größen (8×2, 16×2, 20×4, etc.), die damit laufen. In diesem Tutorial wird der Aufbau eines 16×2 Zeichen Displays als auch ein Test Skript gezeigt.



Einige Worte vorweg gesagt: In diesem Tutorial werden alle Pins direkt angesprochen, wodurch recht viele GPIOs belegt werden. Eine andere Methode ist die Verbindung via I2C.

 

Zubehör

Folgendes Material wird benötigt:

 

Aufbau

Ich beziehe mich in diesem Fall auf die Pin Numerierung (GPIO.BOARD), nicht auf die GPIO Nummern:

 

Raspbery Pi GPIO Belegung

Raspbery Pi GPIO Belegung

 

LCD Pinan RPi GPIOBeschreibung
 1. VSS Pin 6 (GND) Versorgunsspannung (Masse)
 2. VDD Pin 2 (5V) Versorgunsspannung 5V
 3. V0 Pin 6 (GND) Kontrastspannung
 4. RS Pin 7 (GPIO4) Registerauswahl (0: Befehlsregister, 1: Datenregister)
 5. RW Pin 6 (GND) Read/Write (0: Write Modus, 1: Read Modus)
 6. E Pin 11 (GPIO17) Taktflanke
 7. D0 – Datenleitung 0
 8. D1 – Datenleitung 1
 9. D2 – Datenleitung 2
 10. D3 – Datenleitung 3
 11. D4 Pin 12 (GPIO18) Datenleitung 4
 12. D5 Pin 15 (GPIO22) Datenleitung 5
 13. D6 Pin 16 (GPIO23) Datenleitung 6
 14. D7 Pin 18 (GPIO24) Datenleitung 7
 15. A Pin 2 (5V) (mit Poti) Hintergrundbeleuchtung Anode
 16. K Pin 6 (GND) Hintergrundbeleuchtung Kathode

 

Schematisch sieht das ganze folgendermaßen aus:

Raspbery Pi LCD Display Anschluss

Raspbery Pi LCD Display Anschluss

 

Durch drehen des Potentiometers kann die Hintergrundbeleuchtung geregelt werden. Manche Displays vertragen keine 5V für die Hintergrundbeleuchtung, daher sollte entweder ins Datenblatt geschaut werden, oder immer zumindest ein 470Ω – 510Ω Widerstand zwischen geschaltet werden.

 

Raspberry Pi LCD Display testen

Du kannst das Skript, welches ich verwendet habe, entweder hier ansehen, oder einfach downloaden und ausprobieren.

wget http://www.tutorials-raspberrypi.de/wp-content/uploads/scripts/hd44780_test.py
chmod +x hd44780_test.py
python hd44780_test.py

Solltest du ein anderes Display oder eine andere Pin Belegung gewählt haben,vergiss nicht das Skript anzupassen.

Durch die einfache Ansteuerung kannst du verschiedene Skripte, die bspw. den Status des Pi’s anzeigen, erstellen.



, , , , ,


94 Kommentare

  1. TRBN sagt:

    kann ich statt GPIO Pin 4 auch einen anderen freien benutzen?

  2. Sebastian sagt:

    Hi,
    ich habe das Problem, dass mein Display (und ein weiteres welches ich mir testweise besorgt habe) nur noch weiße Pixel zeigt. Ich habe ein Poti am Kontrast 🙂

    Interessanterweise haben deine Beschreibung und dein Script anfangs wunderbar funktioniert. Ich weiß allerdings nicht mehr, warum es plötzlich nicht mehr läuft.

    Ich hatte auch schon von einer möglichen Überspannung gehört, nachgemessen und nun einen 22R Widerstand am 5V0, so dass die Spannung nun bei 5,03 V liegt. Hilft aber auch nicht.

    Sobald ich Strom drauf gebe ist die 1. Zeile weiß und die 2. Zeile dunkel. Sobald der erste Text kommt, flackert alles und das display ist komplett mit weißen Pixeln gefüllt.

    • Felix sagt:

      Das klingt schwer danach, dass ein Fehler im Display ist. Ob es kaputt gegangen ist, kann ich dir nicht sagen, aber hast du mal alle Bauteile ausgetauscht, ggf. einen 10k Widerstand statt dem Poti genommen? Wenn du am Skript und am Pi nichts verändert hast, muss es nunmal an der Hardware liegen. Wackelkontakte kannst du ausschließen oder?

  3. Björn sagt:

    Hi,

    Tolle Anleitung. Werde versuchen diese mal nachzubauen. Teile sind schon bestellt. Nur eine Frage habe ich noch. Welcher Poti wird denn genau benötigt?

    • Felix sagt:

      Ein Poti ist hier eigentlich nur nice-to-have. Du kannst auch einen normalen Widerstand benutzen, nur den Poti kannst du eben regeln, bis du deine ideale Hintergrundbeleuchtung gefunden hast. Ich habe einen 10k Poti verwendet, soweit ich mich erinnere.

  4. Kelm0x sagt:

    Ist es denn auch möglich das Display ohne Steckkarte, Widerstände und Poti zu verwenden?

    Mit freundlichen Grüßen

    • Felix sagt:

      Ohne Breadboard ist es möglich, wenn du die Kontakte anlötest. Einen Poti oder zumindest einen Widerstand würde ich zur Helligkeitsbegrenzung einbauen, kosten ja kaum etwas mehr.
      LG Felix

  5. Basti sagt:

    Hi,

    super Seite. Ich finde deine Arbeit top.
    Ich musste für die Uni eine Geschwindigkeitsmessanlage basteln und wollte das Ergebnis auf einem Display anzeigen lassen, damit man keinen HDMI Bildschirm zum betreiben braucht.
    Dank deinen Tutorials hat das wunderbar funktioniert. Danke 🙂

    Gruß
    Basti

    • Felix sagt:

      Freut mich 🙂
      Falls du Anregungen/Verbessungsvorschläge oder Ideen für Tutorials hast, immer her damit 😉

  6. Wolfram Esser (derwok) sagt:

    Hi!
    Erstmal danke für das tolle Tutorial!

    Meine Problem war: Nach Verdrahtung und der Ausführung des Python-Skripts stand der korrekte Text auf dem LCD, und auch die Hintergrundbeleuchtung war korrekt. Aber sobald ich mit der Hand in die Nähe(! – keine Berührung!) der Verbindungsdrähte kam, wurde das Display Schritt für Schritt mit schwarzen Quadraten überschrieben. Es lief einfach nicht stabil. Manchmal reichte schon ein andres Kabel, was in die Nähe der Konstruktion kam und schwupps war alles überschrieben. Der Tipp eines Kollegen brachte mich drauf: Im Datenblatt hat das schwarze Rechteck im Zeichnsatz die Position 255 = 0xFF = 11111111.

    So habe ich nach Ausführung des Skriptes mal die Spannungen der Daten-GPIOs gemessen. Alle hatten +5V angelegt!

    Dieses Verhalten scheint vom GPIO.cleanup() am Ende des Skriptes zu kommen. GPIO.cleanup() soll ja alle benutzten Pins in einen „sicheren“ Zustand bringen. Nur „sicher“ heißt in dem Zusammenhang Umschalten von Output => Input. Und das bedeutet es liegt permanent eine Spannung an – wenn auch hochohmig. Aber dadurch scheint schon eine kleine „athmosphärische“ Störung zu reichen und das LCD schreibt alles mit schwarzen Rechtecken voll!

    Ich habe daher die Zeile GPIO.cleanup() aus deinem Skript auskommentiert.
    Und seit dem läuft bei mir alles stabil!

    Danke nochmal für das tolle Tutorial!

    Grüße aus Erlangen. DerWOK.

  7. Panakotta00 sagt:

    Bei mir passiert im Display garnichts. Weiße Felder wie sonst immer. Aber ich hab auch was gelesen das sich dabei irgend was für den RPi B+ geändert hat. Hat jemand eine Idee?

    • Felix sagt:

      Die GPIO Nummerierung hat sich nicht geändert, ich denke, dass es bei dir an etwas anderem liegt.
      PS: Bald kommt ein Tutorial, wie man es über I2C betreiben kann.

  8. Christoph Rumpel sagt:

    Hey,

    danke für das Tutorial. Bei mir hat es leider gar nicht funktioniert. Das Display leuchtet zwar blau aber ich sehe keinen Text oder annähernd irgendwas als die blau Farbe.

    An meinen Display waren keine Kontakte schon dran, ich habe jetzt nur die männlichen Kabel von oben in die Kontaktlöcher des Displays gesteckt und unten in das Breadboard. Einen leichten Wackelkontakt habe aber wenn ich es nicht einfasse leuchtet es schon. Nur der Text erscheint leider nicht. ich weiß es ist jetzt sicher schwer zu sagen woran das liegen kann aber denkst du eher an den Kontakten oder an was anderem?

    Danke und lg
    PS: Ich habe einen Raspberry Pi 2

    • Felix sagt:

      Hallo Christoph,
      dein Display hat aber einen HD44780 Controller oder? Was du beschreibst klingt danach, als ob nur die Hintergrundbeleuchtung (korrekt) angeschlossen ist. Versuch mal die Kontakte stabil zu befestigen, nach einem Wackelkontakt müsste neu initialisiert werden.
      LG Felix

  9. Christoph sagt:

    Hallo Felix,

    danke für die Antwort. Jetzt bin ich mir ehrlich gesagt selber nicht mehr sicher ob der Controller stimmt. Das war auf jeden Fall der den ich wollte (HD44780).
    Diesen hier hab ich: https://www.conrad.at/de/led-baustein-weiss-blau-b-x-h-x-t-80-x-36-x-132-mm-gleichmann-ge-c1602b-tmi-jtr-183045.html

    Jetzt befürchte ich auch, dass ein falsches ist oder?
    Danke und lg

    • Felix sagt:

      Hallo Christoph,
      ich habe eben mal einen Blick ins Datenblatt geworfen und es steht nicht dabei, dass es einen HD44780 Controller verwendet 🙁
      Allerdings findest du diese Displays bereits ab ein paar Euro.
      LG Felix

  10. Christoph sagt:

    Ja dort habe ich auch geschaut =( Dürfte dann vielleicht echt falsch sein. ich hab mir heute von einem Kollegen die Stecker drauflöten lassen und werde es zur Sicherheit noch einmal probieren. Zumindest Wackler sollte jetzt nicht mehr schuld sein. Wenn es wieder nicht geht, werde ich mir ein anderes Display bestellen. Danke dir auf jeden Fall!

    • Christoph sagt:

      Hey Felix,
      es hat sich herausgestellt, dass das Display doch den Controller hat. Es ist in der Beschreibung im Diagramm zu erkennen, aber im Text man ihn nicht gefunden.
      http://www.produktinfo.conrad.com/datenblaetter/175000-199999/183045-da-01-en-LCD_MODUL_16X2_LED_GE_C1602B_TMI_JT_R.pdf

      Hast du vielleicht noch einen Tipp was ich sonst noch kontrollieren könnte?
      Danke und lg

    • Felix sagt:

      Hi Christoph,
      ich habe hier mehrere HD44780 Displays in verschiedenen Größen und hatte dieses Problem immer nur dann, wenn die Datenverbindung nicht richtig angelegt/initialisiert wurde dafür aber Spannung für die Hintergrundsbeleuchtung anliegt.
      Leider ist es aus der Ferne nur schwer zu vermuten woran es liegen könnte – bis eben auf falsche Verkabelung, was du aber bestimmt schon überprüft hast. Tut sich den gar nichts am Display, sobald du testest? Und sind alle benutzen GPIOs in Ordnung (ich hatte mal bei einem meiner Pi’s den Fall, dass ein Pin sich nicht ansteuern ließ).
      Ansonsten habe ich vor bald noch ein Tutorial zu diesen Displays zu machen und zu zeigen, wie man sie mittels I2C ansteuert. Eventuell wäre das noch eine Alternative.
      LG Felix

  11. Christoph sagt:

    Danke Felix, ich werde noch einmal versuchen alles zu kontrollieren.

    Beim ersten Test hat die Hintg. Farbe ganz leicht geflackert wenn ich den Code laufen hatte. Bei den anderen Malen war das glaub ich nicht mehr so. Derzeit ist es auf jeden Fall so, dass das Hintg. Licht extrem stark leuchtet und sich nicht mehr rührt. ( viel heller als zuvor)

    Poti habe ich nicht aber mit Widerständen habe ich versucht ob ich den Kontrast einstellen kann. Das ging aber nicht.

    Ich werde vielleicht mal versuchen alle Pins am Pi durchzugehen ob die funktionieren. Habe aber schon verschieden für das Display getestet. Kann ich irgendwie die Kontakte am Display auch testen? Wenn dort irgendwas kaputt ist komme ich ja nie drauf #endlos #debug =)

    Danke dir und lg

    • Felix sagt:

      Kontrast und Hintergrundfarbe sollten natürlich aufeinander angepasst sein (kein Kontrast würde trotz Zeichen nichts anzeigen lassen). Nur lässt sich der Kontrast schwer einstellen, solange man die Zeichen nicht sieht 😀
      Falls du einen Arduino rum liegen hast, könntest du es damit testen. Oder falls du noch ein zweites Display da hast, kannst du schauen ob es bei gleicher Belegung am Pi funktioniert.

  12. Christoph sagt:

    Hey,

    hab es zum Laufen gebracht!
    Es war die GPIO Belegung. Die Auflistung die ich hatte war falsch, jedoch nicht komplett. Die Pins die ich für Tests mit LEDs verwendet habe, die waren richtig. Aber als ich mehr verwenden musste für das Display, waren immer mind. 3 falsche Belegungen dabei. Bin froh dass es jetzt klappt und danke für das Tutorial und die Hilfe!
    lg

  13. Herbert sagt:

    Hallo Forum
    Klasnse Seiten super g
    Habe durch Zufall eure Seite gefunden und hier noch ein TC1602 A 16*2 Display zum ausprobieren gehabt.
    Also Datei runtergeladen und angeschlossen. Da ich GPIO 17 gerade benutzte diesen mit GPIO 27 getauscht und gleich darauf meine Frau per Text gefragt ob sie mich noch einmal heiraten würde. Für einen Anfänger ein schönes Gefühl wenn es sofort klappt.
    Jetzt werde ich mir erstmal den Code anschauen um es zu verstehen. Danach versuchen
    etwas zu verändern was passiert.

    Gruß aus Dorsten
    NRW
    Herbert

    • Felix sagt:

      Hallo Herbert,
      freut mich, dass es dir gefällt 🙂 Wenn du Fragen zum Skript hast, kannst du sie gerne hier stellen.
      LG Felix

  14. Herbert sagt:

    Hallo Felix
    Warum ich das nochmal geschickt habe weiss ich leider nicht (tmL)
    Danke und sofort eine Frage hinterher.
    Ist die Anordnung der GPIO Pins bis Pin 26 anders zwischen der armv61 Version und der armv71?
    Ich benutze die armv61 Version mit der 26poligen Leiste wo ich das Script von Dir in der Zeile:
    # Zuordnung der GPIO Pins (ggf. anpassen)
    …..
    LCD_E = 17 hier auf LCD_E = 27
    geändert habe.
    Nun steht aber bei Dir oben Pin 13 GPIO 21 bei mir aber in der Liste Pin13 GPIO 27 weshalb ich ja da ich Pin11(GPIO17) für ein anderes Projekt brauche und deshalb das Script auf GPIO 27 . Es soll ja die Taktflanke sein ?

    Danke und Gruß aus Dorsten
    Herbert

  15. Fabian sagt:

    Hallo Felix,
    hat alles super geklappt. Danke dafür. Meine Frage ist wie ich die Abstandsmessung auf dem Display anzeigen lassen kann?

    Gruß Fabian

  16. Christian sagt:

    Hallo Felix,

    erstmal Lob und Anerkennung für das gute Tutorial. Bei mir hat es fast funktioniert. In der ersten Ausgabe steht ja ein einfacher Text („Es scheint zu zu funktionieren“) Das wird auch alles prima angezeigt. Dann wird aber der 2. Text aufgebaut und nach den ersten n Zeichen gibt es nur noch Textsuppe. Keine Ahnung was das sein soll.

    Wie kann das sein?

    VG Christian

  17. ponzelar sagt:

    Die Displays am Raspi frustrieren mich. Es gelingt mir nicht, einen Text darzustellen. Wenn ich das Display über den Raspi ansteuere habe ich in der 1. Zeile Rechtecke, die 2. Zeile zeigt nichts. Also richtig. Wenn ich Dein Script starte kommt:

    pi@raspberrypi ~ $ sudo python hd44780_test.py
    Traceback (most recent call last):
    File „hd44780_test.py“, line 75, in
    GPIO.setwarnings(False)
    AttributeError: ‚module‘ object has no attribute ’setwarnings‘

    Mir fällt dazu nichts ein, hoffentlich Dir.
    Danke und Gruß

  18. ponzelar sagt:

    Danke, jetzt bekomme ich zwar keine Fehlermeldung mehr, aber auch noch keine Anzeige auf dem Display.

    • Felix sagt:

      Sicher, dass du die Kabel alle richtig angeschlossen hast? Könnte auch am zu gerinen Kontrast liegen, sodass du nichts siehst.
      Ansonsten würde ich einfach mal das I2C Tutorial ausprobieren, damit ist es einfacher.

  19. ponzelar sagt:

    Kontrast ist i.O., ich sehe die Rechtecke in der 1. Zeile. Daraus folgt für mich, daß auch die Verkabelung stimmen sollte. Kontrolliert habe ich sie mehrfach.

    • Felix sagt:

      Dass die Rechtecke sichtbar sind, muss nicht zwingend heißen, dass dennoch alles stimmt (lediglich, dass das Display Strom bekommt). Aber wenn du sie kontrolliert hast, sollte es daran nicht liegen.

  20. Hey,

    hab jetzt auch schon mein erstes Projekt mit einem Display. Danke noch einmal für deine Hilfe. http://christoph-rumpel.com/2016/02/tracking-active-visitors-with-googleanalytics-raspberrypi-in-realtime.

    Hast du auch schon Erfahrungen mit mehreren Displays? Ich hab gelesen, dass man für weitere Displays nicht mehr so viele GPIO Pins benötigt aber kann mir das nicht ganz vorstellen. Mein Wunsch wäre 2-3 von diesen Displays anzustecken.

    lg
    Christoph

    • Felix sagt:

      Hi Christoph,
      dein Projekt klingt interessant, werde ich mir bei Zeiten mal ansehen!
      Wenn du mehrere Displays benutzen willst, würde ich das per I2C machen. Zwar könntest du es auch über die GPIOs (und Expander) machen, aber das wird relativ unschön. Mit I2C brauchst du nur wenige Pins: HD44780 LCD Display per I2C mit dem Raspberry Pi ansteuern
      LG Felix

    • Dirk sagt:

      Alternativ kannst Du jedes Display mit PIN6 mit einem anderen freien GPIO verbinden. Diese müsstest Du dann als LCD_E1, LCD_E2, … eingangs zuordnen, dafür LCD_E entfernen.
      Dann def lcd_send_byte(bits, mode): in
      def lcd_send_byte(bits, mode, LCD_E):
      ändern.
      In def display_init():
      muss dann jede (!) Zeile mehrfach ergänzt werden:

      	lcd_send_byte(0x33, LCD_CMD, LCD_E1)
      	lcd_send_byte(0x33, LCD_CMD, LCD_E2)
      	lcd_send_byte(0x33, LCD_CMD, LCD_E3)
      	lcd_send_byte(0x33, LCD_CMD, LCD_E4)

      je nach Anzahl der Displays.
      def lcd_message(message):
      […]
      lcd_send_byte(ord(message[i]),LCD_CHR)
      wird zu:

      def lcd_message(message,display):
      	message = message.ljust(LCD_WIDTH," ")  
      	for i in range(LCD_WIDTH):
      	  lcd_send_byte(ord(message[i]),LCD_CHR,display)

      Im weiteren wird
      GPIO.setup(LCD_E, GPIO.OUT)
      mit GPIO.setup(LCD_E1, GPIO.OUT)
      und GPIO.setup(LCD_E2, GPIO.OUT) … ersetzt, nach Anzahl der Displays

      Das Ende lautet dann:

      	lcd_send_byte(LCD_LINE_1, LCD_CMD,LCD_E1)
      	lcd_message("Es scheint zu")
      	lcd_send_byte(LCD_LINE_2, LCD_CMD,LCD_E1)
      	lcd_message("funktionieren :)")
      	
      	time.sleep(4)
      	
      	msg1 = "Dies ist ein"
      	msg2 = "kleiner Test"
      	for i in range(len(msg1)):
      		lcd_send_byte(LCD_LINE_1, LCD_CMD,LCD_E2)
      		lcd_message(msg1[:i+1],LCD_E2)
      		lcd_send_byte(LCD_LINE_2, LCD_CMD,LCD_E2)
      		lcd_message("",LCD_E2)
      		time.sleep(0.1)	
      	for i in range(len(msg2)):
      		lcd_send_byte(LCD_LINE_1, LCD_CMD,LCD_E2)
      		lcd_message(msg1,LCD_E2)
      		lcd_send_byte(LCD_LINE_2, LCD_CMD,LCD_E2)
      		lcd_message(msg2[:i+1],LCD_E2)
      		time.sleep(0.1)

      Das erste Display zeigt dann an, dass es funktioniert, und das zweite den Testtext.

      LG Dirk

  21. Christoph Rumpel sagt:

    Oh super, vielen Dank Felix. Werde ich mir gleich mal anschauen. Danke und lg

  22. Martin sagt:

    Hallo Felix,

    super tutorial. Dein script funktioniert einwandfrei und lässt sich gut anpassen.
    Leider hat mein Display (4×16) so seine Eigenart. Bei mir ist die 3. und 4. Zeile um
    4 Stellen eingerückt. Hast Du einen Tip wie ich die weg bekomme?

    LG Martin

  23. Martin sagt:

    Hallo Felix,

    die Einrückung liegt nicht an deinem Script eher an meinem Dislpay.
    Nur wie sage ich Ihm das es 4 Stellen weiter rechts anfangen soll zu schreiben?

  24. Eddi sagt:

    Hallo Felix,
    mit Deinem Tutorial bis ich sehr gut zurecht gekommen. Doku ist super, insbesondere für Anfänger. Eine Frage zum Programm habe ich noch.

    	for i in range(len(msg2)):
    		lcd_send_byte(LCD_LINE_1, LCD_CMD)
    		lcd_message(msg1)   #wieso gibst Du hier den Text nochmals aus
    		lcd_send_byte(LCD_LINE_2, LCD_CMD)
    		lcd_message(msg2[:i+1])

    Besten Dank!
    Eddi

    • Felix sagt:

      Hallo Eddi,
      wie du siehst baut sich der Text Buchstabe für Buchstabe auf, also verzögert. Dafür muss erst die 2. Zeile leer sein (lcd_message("")) und in der ersten Zeile immer ein Buchstabe weiter angezeigt werden. Sobald wir in der 2. Zeile sind, soll der Text der ersten Zeile sich nicht verändern, daher schicke ich den ganzen Text nochmals mit. Wenn das Display den Text der ersten Zeile allerdings im Speicher behält, müsste man es nicht nochmal senden.

  25. Eddi sagt:

    Hallo Felix,

    Danke für die schnelle Antwort. Die Antwort brauchte ich um das Programm zu verstehen, da mein Display den Text in der Zeile behält.

    Gruß
    Eddi

  26. Flo sagt:

    Hallo zusammen,

    klasse Skript! Es hat direkt funktioniert…

    ABER: Mein Display ist heller als die Schrift. Ich sehe den Text, aber die hellen Kästchen überlagern ihn. Widerstände habe ich von 220, 330, 470 und 10k OHM getestet. Das Verhältnis von Schrift zu Hintergrundbeleuchtung ändert sich nicht. Was kann ich machen?

    • Ingo sagt:

      Hallo, das Problem habe ich auch. Ich habe einen Poti angeschlossen aber egal ob ich den hoch oder runter drehe, der Text wird überlagert. Entweder ist die Schrift und die Kästchen hell oder Schrift und Kästchen dunkel. Nur wenn man das Display schräg hält, kann man erkennen, dass der Text angezeigt wird.
      Dann habe ich noch das Problem, daß beim erneuten Starten des Scripts nicht mehr der Text angezeigt wird sondern irgendwelche Zeichen.
      Weiß einer Rat?
      Gruß Ingo

  27. Ingo sagt:

    Nun werde ich mal den ersten Teil meiner Frage selbst beantworten:
    Wenn man an den LCD-PIN: 2. VDD einen Widerstand von 800-900 Ohm anschließt (ich habe einen Poti genommen), dann ist die Displayschrift gut zu erkennen. Vermutlich liegt es am Netzteil, welches ca. 5,2 V abgibt. Das ist wohl zu viel für das Display.
    Das Problem mit den Zeichen, die beim 2’ten Starten des Skripts erscheinen, habe ich immer noch. Beim ersten mal aufrufen wird der Text so angezeigt wie er soll. Wenn ich das Skript nochmal aufrufe kommen die wirren Zeichen. Drücke ich allerdings nach dem ersten Aufruf Strg+C, und rufe das Script ein weiteres mal auf, kommt wieder der richtige Text…
    Gruß Ingo

  28. Hauschi sagt:

    Hi Felix,
    Bin etwas unsicher bezüglich des schaltplans, fehlt da nicht noch masse am poti?

    Gruß Hauschi

  29. Ingo sagt:

    Nö, mit dem Poti regelst du die Spannung. Ist wie ein Schalter; der ist in der Regel auch nicht an Masse angeschlossen.

    Gruß Ingo

    • Hauschi sagt:

      Naja, hat ja 3 Anschlüsse, meiner zumindestens, und scheint so zu sein, daß er eigentlich masse, verbraucher, 5v angeschlossen wird. Geht auch ohne masse, habs probiert. Worin der unterschied liegt, versteh ich nur nicht so ganz…

  30. Ingo sagt:

    Hallo Felix,

    wie bekomme ich ein Sonderzeichen in den Text, z.B. :“Dies ist ein großer Test“
    Was muss ich machen, um das ß dazwischen zu schieben?
    Gruß Ingo

    • Ingo sagt:

      Na ja, mal wieder zu früh gefragt und zu kurz gegooglet …

      So geht’s: msg2 = "gro\342er Test"
      \342 ist hierbei der Code für das ß …

      Gruß Ingo

  31. Ingo sagt:

    Hallo Felix,

    ich habe es endlich geschafft, das PIR-Modul mit dem LCD-Display zusammen laufen zu lassen. Bei Bewegung wird auf dem Display eine Nachricht angezeigt.
    (ich hatte mal wieder Probleme richtig einzurücken…
    Kann es sein, daß bei dem LCD-Programm TAB und Leerzeichen- Einrücken vermischt ist, es aber trotzdem läuft?)

    Nun möchte ich noch, daß das Display nach einer time.sleep-Zeit gelöscht wird bzw. in Zeile eins und zwei 16 Leerzeichen reingeschrieben werden. Leider gehen mir hier die Ideen aus. Kannst du mir auf die Sprünge helfen?

    Gruß Ingo

    • Felix sagt:

      Hey Ingo,
      hast du schon versucht einen String mit 16 Leerzeichen zu übergeben?
      Es kann sein, dass Tabs und Leerzeichen – dank WordPress – gemischt sind. Wenn es übereinstimmt (z.B. Einrückung erster Ebene ein Tab, zweiter Ebene vier Leerzeichen, usw.) sollte es keine Probleme geben, auch wenn es nicht sonderlich übersichtlich ist. Ich muss das bei Zeiten mal durchschauen.
      LG Felix

    • Ingo sagt:

      Moment habe ich folgende Code als weiteren (Text) eingefügt:

              lcd_send_byte(LCD_LINE_1, LCD_CMD)
      	lcd_message("                ")
      	time.sleep(2)
      	lcd_send_byte(LCD_LINE_2, LCD_CMD)
      	lcd_message("                ")
      			
      	time.sleep(1)

      damit geht es aber ich dachte, ggf. gibt es einen einzelnen Befehl, der das Display löscht.

      Wenn man sich das Script bei „hier“ ansieht, wird es ohne Enters und Einrücken angezeigt. Der Download ist ok und kann verwendet werden. Wenn man sich das dann auf einen usb kopiert und auf einem Rechner mit Texteditor anschaut, ist es wieder ohne Formatierung. Man kann es in Word öffnen und wieder speichern. Dann ist es auch im Texteditor richtig eingerückt..
      Gruß Ingo

    • Felix sagt:

      Der Windows Texteditor ist (das kann ich aus Erfahrung sagen) totaler Mist 😀
      Ich nutze hauptsächlich Notepad++

  32. Ingo sagt:

    die 16 Leerzeichen in („“) werden hier nicht angezeigt…!

  33. Ingo sagt:
    lcd_send_byte(LCD_LINE_1, LCD_CMD)
    	lcd_message("                ")
    	time.sleep(2)
    	lcd_send_byte(LCD_LINE_2, LCD_CMD)
    	lcd_message("                ")
    			
    	time.sleep(1)
  34. Patrick. sagt:

    Hallo,

    ich habe das Problem, das das, was ich auf dem Display ausgeben möchte, nicht immer in der gewünschten Zeile ausgegeben wird, sondern mal oben, mal unten und auch nicht immer linksbündig. Ich möchte 2 Werte wiederholt ausgegeben und habe dafür erstmal eine Schleife eingebaut, um das auzuprobieren.

    	for i in range(100):
    		humidity, temperature = Adafruit_DHT.read(Adafruit_DHT.DHT22, 26) #Werte aus Sensor auslesen
    		if humidity is not None and temperature is not None:
    			temp=str("%.1f" % temperature) #in String umwandeln, 1 Nachkommastele
    			humid=str("%.1f" % humidity)
    			print "Temperature: " + temp #Ausgabe im Konsolenfenster
    			print "Humidity: " + humid
    		else:
    			temp="XX.X"
    			humid="XX.X"
    			print "Temperature: " + temp
    			print "Humidity: " + humid
    		lcd_send_byte(LCD_LINE_1, LCD_CMD)	
    		lcd_message("Temp.: " + temp)
    		lcd_send_byte(LCD_LINE_2, LCD_CMD)
    		lcd_message("Luftf.: " + humid)
    		time.sleep(6)

    Was kann der Grund sein, dass die Werte nicht immer linksbündig in der ersten, bzw. 2. Zeile angezeigt werden?

    Gruß,
    Patrick

  35. Patrick sagt:

    Hallo,
    es ist ein Standard 16×2 Display. Die I2C Steuerung hatte ich als nächstes auf dem Plan. Bin noch Raspberry Greenhorn.
    Für mich sieht es so aus, dass der Cursor, bzw. der Ausgangspunkt, ab dem geschrieben werden soll, nicht auf den Zeilenanfang und auch nicht auf die richtige Zeile gesetzt wird. Aber das wird im Script ja nur in 2 Zeilen definiert.

    • Felix sagt:

      Das war es, was ich auch vermutet hatte. Nämlich, dass es mehr Zeichen hat (20 statt 16) und dadurch der Text danach nicht korrekt überschrieben wird. An den Funktionen (vor allem das Einrücken mit Leerzeichen) hast du nichts geändert oder?
      Ist etwas schwierig ohne das Modul da zu haben, Hilfe zu leisten 🙁

  36. guru-meditation sagt:

    Hallo.
    Vielen Dank für das tolle Tutorial.
    Hab mein 2×16 Display jetzt auch erfolgreich am Laufen. Leider hatte ich keinen Poti oder Widerstand. Scheint aber trotzdem ohne Probleme zu funktionieren, am 5 und am 3,3V Anschluss (etwas dunkler).
    Ich habe das Script dahingehend mit einer while Schleife erweitert, dass die Uhrzeit angezeigt wird, sowie Datum. Das funktioniert auch. Aber leider versetzt er mit mit jeder Aktualisierung die Position des Textes. Ich komme einfach nicht dahinter, woran das liegt.
    Hat jemand eine Idee? Im Code finde ich keinen Fehler:
    while True:
    lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD)
    lcd_string(datetime.datetime.now().strftime(‚%d/%B/%Y‘))
    lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
    lcd_string(datetime.datetime.now().strftime(‚%H:%M:%S‘))
    time.sleep(1)
    Habe auch alle Verbindungen überprüft und durchgemessen. Das Verhalten ist schon eigenartig, kein Muster zu erkennen. Der Text springt willkürlich. Er hängt sogar noch ein komisches Sonderzeichen an, sieht aus wie eine Neun… verrückt…

  37. guru-meditation sagt:

    Jetzt ist mir aufgefallen, dass die Sprünge verschwinden, wenn ich noch ein display_init einbaue. Aber dann wird mal die eine, dann die andere Zeile beschrieben.
    Nun habe ich mal vom GPIO 4 auf 25 gewechselt und alles super.
    Möglicherweise hängt das damit zusammen, dass noch irgendetwas im Hintergrund läuft. Den GPIO4 hatte ich mal in einem anderen Projekt in Verwendung…

  38. Andi sagt:

    Hallo , ich habe mal eine Frage ich benutze ein Piface2, kann ich an den anderen GPIO die nicht für den SPI Bus genutzt werden das Display ansteuern ?

    Gruß
    Andi

  39. Ben sagt:

    Hallo,
    Cooles Tutorial!
    Allerdings stürzt mein Raspberry immer ab sobald ich das Skript ausführe. Außerdem leuchtet das Display zwar aber es ist keine Schrift drauf. Ich habe bei der Helligkeit einen 470Ohm Wiederstand und beim Kontrast 10kOhm.
    Vielleicht kann mir ja einer helfen. Danke! 🙂

    Gruß Ben

  40. Julian sagt:

    Hi, aktuell spiele ich mit einem T-Cobbler Plus v2.2 von Kuman. Leider läuft mein Display nicht ganz, es ist ein wenig älter, sollte aber noch funktionieren. Sobald ich den Kontrast an die Masse anschließe, erscheinen ganz kurz Kästchen, diese sind aber nach kurzer Zeit wieder weg.

    Mein Aufbau ist der gleiche wie hier.

    Hat jemand ne Idee?

  41. Michel sagt:

    Hallo Felix
    Dank deinem Tutorial konnte ich meinen Raspi Temperatursensor mit einem LCD ausstatten. Dabei habe ich für RS den (noch freien) GPIO Pin 19 statt 4 verwendet und das Skript entsprechend angepasst. Funktioniert einwandfrei. Als Anfänger machen diese Erfolgserlebnisse viel Spass. Danke !

  42. Alex sagt:

    Bei mir funktioniert komischerweise jedes Zeichen bis auf den Buchstaben „O“ (groß und kleingeschrieben) . Versuche ich dennoch ein O zu schreiben, wird die erste Zeile komplett weiß, die zweite zeigt gar nichts mehr an.

    • Alex sagt:

      Nach weiterer Untersuchung scheint es alle Zeichen zu betreffen, dessen Charcode in binär auf 1111 endet.

    • Alex sagt:

      Das Problem wurde gelöst. Die Grounds waren nicht richtig verbunden.

  43. Wolfgang sagt:

    Danke für die Anleitung!

    Eine wichtige Info fehlt mir: wie viel Strom zieht das LCD-Modul? Ohne Beleuchtung dürfte der Strom nicht der Rede wert sein, aber wieviel Ampere muss das Netzteil liefern, um beim Aktivieren der Beleuchtung die Banane nicht schlappmacht?

    • Felix sagt:

      Das sollte im Datenblatt des Moduls stehen. Bei den üblichen (hier verwendeten) LCD Displays reicht die Versorgung des Raspberry Pi’s aus und es ist keine externe Stromquelle nötig.

  44. Bernadetta sagt:

    Hi Felix,

    ich habe an meinen Rpi2 einen RFID MFRC522 angeschlossen und dadurch alle spi-pins belegt.So weit ich weiß sind die SPI bus wichtig zu kommunizieren und ich bin unsicher ob ich die einfach an anderen pins(ohne SPI) anschließen kann , auch wenn ich in Skript Änderung vornehme.

    Danke
    Berni

  45. Lorenz sagt:

    Hallo 🙂
    Erstmal Danke für dsa Tutorial.
    Leider klappt es bei mir nicht so ganz 🙁
    Wenn ich das Display angeschlossen habe und den Pi anmache leuchtet das Display und die obere Zeile ist mit 16 Weißen Feldern gefüllt (alle Pixel aktiv). Die 2. Zeile ist leer. Starte ich nun dein Script so verschwindet die 1. Zeile, es erscheint aber auch kein Text; d.h. das Display kann zwar angesprochen werden (die 1. Zeile verschwindet) aber kein kein Text erscheint. Woran kann das liegen? Welche(r) Pin(s) sind (ist) für den Text zuständig?

  46. tom_there sagt:

    Hi, da ich mit hardware relativ unerfahren bin frage ich einfach mal, die Anleitung funktioniert auch mit dem RPi zero oder?

  47. Grüße, Andreas sagt:

    Statt wie oben angemerkt „cleanup“ zu löschen, kann man einfach das Display mit 0x08 ausschalten…
    So kann man auch einen blinkenden Text erzeugen (durch aus und einschalten), da nur das Display ausgeschaltet aber der Datenspeicher nicht gelöscht wird

    Den den HD44780 Befehlssatz gibt es hier (für LCD1602 und andere kompatible):
    http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Welche_Befehle_versteht_das_LCD.3F

  48. Grüße, Andreas sagt:

    Kleine Ergänzung zum Testskript – erhöht auch das Verständnis:

            lcd_send_byte(0x28, LCD_CMD)    #0b00101000 = 4Bit, 2-zeilig
            lcd_send_byte(0x0C, LCD_CMD)    #0b00001100 = Display ein, Cursor aus, blinken aus
            lcd_send_byte(0x06, LCD_CMD)    #0b00000110 = links nach rechts, kein scrollen
            lcd_send_byte(0x01, LCD_CMD)    #0b00000001 = Display löschen (clear)

    Die ersten beiden Befehle (0x33 und 0x32) sind überflüssig, da sie das Display im 8-Bit-Modus initialisieren und zudem identisch sind (die letzten beiden Bit werden vom Controller ignoriert). Danach wird mit 4-Bit-Modus überschrieben = die ersten beiden Zeilen kann man löschen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!