Startseite>Der intelligente Drei-Zeilen-Bildschirm Display-O-Tron
Aus Raspberry Pi Geek 06/2016

Der intelligente Drei-Zeilen-Bildschirm Display-O-Tron

© Jacek Dudzinski, 123RF

Weniger ist mehr

Bernhard Bablok

Der ebenso pfiffige wie preiswerte RasPi-HAT Display-O-Tron eignet sich mit seinem dreizeiligen LC-Display perfekt für Projekte, die zwar eine Anzeige erfordern, jedoch keinen sperrigen Monitor.

Den zwergenhaften Raspberry Pi an einen ausgewachsenen Monitor anzuschließen, erscheint für viele Anwendungsfälle als Overkill. Selbst das offizielle TFT-Display für den RasPi baut recht groß und verhindert kompakte, mobile Lösungen. Die kleinen TFTs in Pi-Größe dagegen tragen kaum auf, aber da es kein passendes X-Toolkit für den Formfaktor gibt, macht die Arbeit damit nicht wirklich Spaß [1].

Seit der Standardisierung von Hardware-Erweiterungen für den Pi in Form der sogenannten HATs (Hardware Attached on Top, also sinngemäß “oben angestöpselte Hardware”), gibt es viele interessante Komponenten, die quasi nach dem Plug-and-Play-Prinzip funktionieren (sollen). Der Hersteller Pimoroni [2] aus Großbritannien tut sich hier mit vielen interessanten Projekten hervor. Aus dieser Quelle stammt auch der 18 Pfund (ca. 22 Euro) teure Display-O-Tron-HAT (Abbildung 1).

Der Aufsatz findet sich auch bei verschiedenen Versendern in Deutschland, aufgrund des gesunkenen Wechselkurses erscheint jedoch eine Direktbestellung beim Hersteller attraktiv. Die Komponente füllt genau die Lücke zwischen Headless-Systemen und ordentlichen Bildschirmen. Da sowohl Software-Unterstützung als auch der Preis stimmen, inspiriert der Display-Aufsatz zu vielen interessanten Projektideen.

Abbildung 1: Der Display-O-Tron-HAT auf einem Raspberry Pi 3. Der Deckel des offiziellen RasPi-Gehäuses passt in der Kombination jedoch nicht mehr.

Abbildung 1: Der Display-O-Tron-HAT auf einem Raspberry Pi 3. Der Deckel des offiziellen RasPi-Gehäuses passt in der Kombination jedoch nicht mehr.

Die Hardware

Über sein dreizeiliges Display (jeweils 16 Zeichen) und sechs kapazitive Tasten erlaubt das Display sowohl Meldungen an den Nutzer als auch Eingaben. Der einfarbig weiße LED-Streifen an der Seite mit sechs LEDs lässt sich genauso steuern wie die sechs RGB-LEDs der Hintergrundbeleuchtung.

Mechanisch gibt es am HAT nichts auszusetzen – außer vielleicht, dass die Abstandsbolzen im Lieferumfang fehlen. Die Spezifikation sieht hier 10 bis 12 Millimeter Distanz vor, beim O-Tron-HAT sollte ein Zentimeter genügen. Da die Tasten allerdings auf Berührung reagieren und nicht auf Druck, braucht es die Bolzen nicht zwingend. Es verwundert allerdings, dass das “offizielle” RasPi-3-Gehäuse trotz seines Ausschnitts für HATs über dem Display-O-Tron nicht mehr schließt.

Der HAT ist der Nachfolger des sehr ähnlichen O-Tron-3000-HATs, der nun mehr Funktionen bereithält. Bei Bestellungen müssen Sie also auf die genaue Produktbezeichnung achten. Auf der Produktseite von Pimoroni finden Sie Links zu einem Github-Projekt mit einer passenden Python-Bibliothek [3] für den HAT, außerdem gibt es ein Support-Forum.

Installation

Die Installation ist schnell erledigt. Als Basis dient sinnigerweise ein “Jessie”-Lite-Image, dass Sie beim ersten Booten nach eigenen Bedürfnissen konfigurieren. Der folgende Befehl lädt ein Installationsskript von Pimoroni herunter und führt es anschließend aus:

$ sudo curl get.pimoroni.com/dot3k | bash

Pimoroni weist ausdrücklich darauf hin, dass Benutzer eigentlich aus Sicherheitsgründen nie eine Installation auf diese Art vornehmen sollten. Besser wäre es, das Skript abzuspeichern, es akribisch zu untersuchen und erst dann auszuführen. Allerdings ändert das nichts Prinzipielles am Risiko, denn auch so könnten bei Bedarf weitere Skripte nachgeladen werden. Dass das Skript sehr generisch ausfällt, erleichtert die Analyse zudem nicht gerade. Es braucht also Vertrauen in den Hersteller und das Internet. Wer lieber manuell installiert, findet Hinweise dazu im Kasten “Manuelle Installation”.

Manuelle Installation

Führen Sie ungern Skripte aus dem Internet als Root aus, dann installieren Sie die Dot3k-Bibliothek von Pimoroni von Hand. Dazu laden Sie die notwendigen Pakete aus der Raspbian-Paketverwaltung (Listing 1, Zeile 1 und 2) und installieren anschließend die Dot3k-Bibliothek (Zeile 3).

Damit ist die Software an Bord; nun gilt es, das SPI- und I2C-Interface des RasPi zu aktivieren. Dazu editieren Sie die Datei /boot/config.txt und sorgen dafür, dass die Zeilen aus Listing 2 dort vorhanden sind. In einem frisch installierten “Jessie” Lite gibt es beide Zeilen von Haus aus, Sie müssen nur das Kommentarzeichen (#) entfernen und den Wert off durch on ersetzen. Im letzten Schritt fügen Sie noch die Zeile i2c-dev an die Datei /etc/modules an: Damit lädt das System das entsprechende Kernel-Modul beim Start automatisch.

Nach einem Neustart kontrollieren Sie, ob Raspbian nun wie gewünscht die Gerätedateien /dev/spi* und /dev/i2c* anlegt. Zudem sollten Sie sich, wie im Haupttext beschrieben, die Beispielprogramme zur Dot3k-Lib von Github holen und ausprobieren.

Listing 1

 

$ sudo apt-get update
$ sudo apt-get install python-pip git i2c-tools python-rpi.gpio python-dev python-smbus python-gpiozero
$ pip install dot3k

Listing 2

 

dtparam=spi=on
dtparam=i2c_arm=on

Die Installationsroutine arbeitet interaktiv und holt vor dem endgültigen Einspielen der Software noch die Zustimmung des Benutzers ein. Außerdem bietet das Skript die Installation von Beispielen an. Letzteres sollten Sie allerdings ablehnen, da dadurch eine komplette X-Umgebung auf dem System landet (ein Beispiel nutzt den VLC-Player). Die Beispiele holen Sie sich am einfachsten direkt über das Github-Projekt.

Das Display kommt ohne exotische Kernel oder Kernel-Module aus. Es gibt jedoch ein optionales Kernel-Modul [4], dessen Vorteil darin liegt, dass es die Schnittstelle zum System auf Pseudodateien im /sys-Dateisystem abbildet. Damit lässt sich das Display unabhängig von der Programmiersprache über Lese- und Schreiboperationen ansprechen. Da es sich beim Kompilieren eines Kernel-Moduls aber um ein fortgeschrittenes Thema handelt, beschränkt sich dieser Artikel auf die Schnittstelle zu Python.

Grundfunktionen

Das Programm in Listing 3 zeigt einige Grundfunktionen des Displays. Die Zeilen 28 bis 31 schreiben einen Text auf das Display. Die Adressierung erfolgt über Spalte und Zeile, wobei die Nummerierung jeweils bei null anfängt. Das Display bricht den langen Text aus Zeile 29 automatisch in die nächste Zeile um.

Listing 3

 

#!/usr/bin/python
# notwendige Libs ---------------------------
import time
import dothat.lcd as lcd
import dothat.backlight as backlight
import dothat.touch as touch
# Callbacks Buttons -------------------------
@touch.on(touch.LEFT)
def dialog_ja(channel, event):
  lcd.clear()
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(0,255,0)
  lcd.write("Starte Reboot")
@touch.on(touch.RIGHT)
def dialog_nein(channel, event):
  lcd.clear()
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(0,255,0)
  lcd.write("Kein Reboot")
# LCD loeschen und schreiben ----------------
def lcdwrite():
  lcd.clear()
  backlight.rgb(0,255,0)        # RGB, also gruen
  lcd.set_cursor_position(0,0)  # Spalte,Zeile ab 0
  lcd.write("Ein Text zu lang - viel zu lang")
  lcd.set_cursor_position(0,2)  # Spalte,Zeile ab 0
  lcd.write("Die 3.Zeile")
# LED-Leiste ---------------------------------
def graph():
  lcd.clear()
  lcd.set_cursor_position(0,0)  # 1.Zeile
  lcd.write("LED-Leiste ...")
  lcd.set_cursor_position(0,1)  # 2.Zeile
  lcd.write("1. und 6. LED")
  backlight.graph_off()
  backlight.graph_set_led_duty(0,1)
  backlight.graph_set_led_state(0,1)  # 1. LED
  backlight.graph_set_led_state(5,1)  # 6. LED
  time.sleep(3)
  lcd.set_cursor_position(0,1)  # 2.Zeile
  lcd.write("Zeige 50% LCDs")
  backlight.graph_off()
  backlight.set_graph(0.5)
# Hintergrund --------------------------------
def meldungen():
  lcd.clear()
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(0,255,0)
  lcd.set_contrast(50)
  lcd.write("Infomeldung")
  time.sleep(3)
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(255,180,0)
  lcd.write("Warnmeldung")
  time.sleep(3)
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(255,0,0)
  lcd.write("Fehlermeldung")
  time.sleep(3)
# Dialog -------------------------------------
def dialog():
  # callbacks
  lcd.clear()
  lcd.set_cursor_position(0,0)  # 1.Zeile
  backlight.rgb(255,0,0)
  lcd.set_contrast(50)
  lcd.write("Reboot?")
  lcd.set_cursor_position(0,2)  # 3.Zeile
  lcd.write("  Ja       Nein")
  time.sleep(5)    # eigentlich Endlosschleife
# ausschalten ---------------------------------
def off():
  backlight.off()
  backlight.graph_off()
  lcd.set_display_mode(False)
# Hauptprogramm ------------------------------
lcdwrite()
time.sleep(3)
graph()
time.sleep(3)
meldungen()
time.sleep(3)
dialog()
off()
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland