Startseite>Via I<+>2<+>C ein Mini-Display ansteuern
Aus Raspberry Pi Geek 12/2018

Via I<+>2<+>C ein Mini-Display ansteuern

© Vasyl Hedzun, 123RF

Klein, aber fein

Martin Mohr

Ein kleines OLED-Display geht preislich kaum ins Geld. Über den I2C-Bus steuern Sie diese Hardware mit wenigen Befehlen an.

Das ermöglicht es, kleine Geräte wie den RasPi mit einer Anzeige auszustatten oder Informationen von Mikrocontrollern ohne viel Aufwand auszugeben. Zum Ansteuern des Displays kommt im Beispiel ein Treiber aus dem GoBot-Projekt zum Zug.

Display

Mit einer Diagonale von nur 1,24 Zentimetern wirkt das Display wie eine Briefmarke. Dementsprechend fällt die Auflösung mit 64×32 Pixel niedrig aus. Die Betriebsspannung liegt im Bereich von 3 Volt bis 5,5 Volt. Am I2C-Bus meldet es sich unter der Adresse 0x3c.

Bestellen Sie das Display direkt in China [1], kostet es weniger als 4 Euro. Allerdings muss man dann eine lange Lieferzeit in Kauf nehmen. Der Mini-Monitor enthält einen SSD1306-Controller, der sich für unterschiedliche Display-Typen eignet. Dessen Datenblatt finden Sie online [2]. Verwenden Sie zum Ansteuern einen GoBot-Treiber [3], brauchen Sie sich um die technischen Details jedoch keine Gedanken zu machen.

Testaufbau

Im Testaufbau für das Display verbinden Sie das Modul, wie es die Tabelle “Verbindungen” zeigt. Es ist quasi eine Eins-zu-eins-Verbindung mit der I2C-Schnittstelle des RasPi (Abbildung 1). Auf der Seite der Software kommt die in Teil 18 beschriebene Testumgebung [4] zum Einsatz. Sie finden diesen Artikel als PDF im Download-Bereich.

Verbindungen

GPIO Pin

Display

1

(+3,3 Volt)

VIN

3

(SDA)

SDA

5

(SCL)

SCL

9

(0 Volt)

GND

Abbildung 1: Der Testaufbau des Displays am RasPi fällt vergleichsweise einfach aus.

Abbildung 1: Der Testaufbau des Displays am RasPi fällt vergleichsweise einfach aus.

Um den Aufbau zu überprüfen, nutzen Sie das Tool I2cdetect. Läuft der Aufbau fehlerfrei, erzeugt es eine Ausgabe wie in Listing 1.

Listing 1

 

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Testprogramm

Das kleine Testprogramm (Listing 2) sorgt dafür, dass ein sehr kleiner Pacman über das Display wandert. Dabei kommen die Funktionen des GoBot intensiv zum Einsatz. Die Bibliotheken dienen normalerweise, wie der Name andeutet, zum Ansteuern von Robotern. Beachten Sie, dass es sich bei Listing 2 um eine gekürzte Variante handelt. Das Original finden Sie im Download-Bereich des Artikels.

Listing 2

 

package main
import ("time"
        "gobot.io/x/gobot"
        "gobot.io/x/gobot/drivers/i2c"
        "gobot.io/x/gobot/platforms/raspi")
func main() {
    image :=[][][]int{{{0,0,1,1,1,1,0,0},
                       {0,1,1,1,0,1,1,0},
                       {1,1,1,1,1,1,1,1},
                       {1,1,1,1,1,1,1,1},
[...]
                       {1,1,1,1,0,0,0,0},
                       {0,1,1,1,1,0,0,0},
                       {0,0,1,1,1,1,0,0}}}
    raspberry := raspi.NewAdaptor()
    display := i2c.NewSSD1306Driver(raspberry)
    dir := true
    i:=0
    pos := 0
    work := func() {
        gobot.Every(100*time.Millisecond, func() {
            display.Clear()
            for x := 0; x < 8; x++ {
               for y := 0; y < 8; y++ {
                  display.Set(x+32+pos, y+32, image[i][y][x])
               }
            }
            if dir == true { i++ } else {i--}
            if i == 3 { dir = false}
            if i == 0 { dir = true}
            pos++
            if pos==56 {pos=0}
            display.Display()
        })}
     robot := gobot.NewRobot("Raspberry Pi",
         []gobot.Connection{raspberry},
         []gobot.Device{display},
         work,)
       robot.Start()
}

Als Erstes definieren Sie alle Funktionen des Roboters. Danach binden Sie diese an den Roboter, den Sie über das Kommando robot.start() (Zeile 39) starten.

Über image := definieren Sie die einzelnen Bitmaps des Pacman. Hier dürfen Sie nach Belieben etwas vollkommen anderes oder Größeres für den Test einsetzen. Die nächsten zwei Zeilen definieren dann den Adapter für den RasPi und laden den Treiber für das Display. Die darauffolgenden Variablen benötigen Sie, um den Pacman zu animieren.

Anschließend folgt die Funktion, die den Roboter ausmacht – ist er aktiv, führt die Software diese alle 100 Millisekunden aus. Sie löscht als Erstes das Display, danach lädt sie die einzelnen Bilder nacheinander in den Buffer des Displays – bei jedem Aufruf der Funktion ein neues Bild.

Die Funktion display.Display() zeigt dann den Buffer an. Die Variable pos schiebt die Bilder immer um ein Pixel weiter. So entsteht der Eindruck, als bewegte sich das Bild über das Display [5].

Die Zeile display.Set(x+32+pos, y+32, image[i][y][x]) enthält Konstanten, die einen Offset im Buffer des Displays erzeugen. Das ist nötig, weil die Bibliothek davon ausgeht, das Sie ein Display mit der maximalen Auflösung des SSD1306 verwenden. Da es aber das Mini-Display ansteuert, brauchen Sie den Offset.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 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