OLED Display mit SSD1306 Controller am RaspberryPi und Python verwenden

Veröffenticht am 12.10.2016    von     in der Kategorie Raspberry Pi     bisher 17 Reaktionen


OLED Display mit DHT22 SensorIn diesem Beitrag zeige ich dir die notwendigen Schritte, damit du ein I2C OLED Display mit SSD1306 Displaycontroller am Raspberry Pi mit Python verwenden kannst.
Für die Datenerfassung verwende ich einen DHT22 Sensor zur digitalen Messung der Temperatur und Luftfeuchtigkeit. Die Ausgabe der Messdaten erfolgt über ein 0,96 Zoll AZDelivery OLED Display mit 128×64 Pixel.

Anschluss des Display am Raspberry Pi

Das Display wird neben dem Anschluss zur Spannungsversorgung an 3,3 Volt (Pin 1) und Ground (ein GND z.B. Pin 6, 9, 14 usw.) an die I2C Schnittstelle des Raspberry Pi angeschlossen. Diese befindet sich an Pin 3 (SDA) und 5 (SCL) der GPIO-Leiste des RasPi.

Steckplatinenaufbau Anschluss OLED Display

Aktivierung der I2C Schnittstelle

In der Grundkonfiguration des Raspberry Pi mi dem Raspbian Betriebssystem ist die I2C Schnittstelle nicht aktiviert. Für die Aktivierung sind folgende Schritte notwendig. Hierzu öffnest du das Terminal-Programm und rufst mit dem Texteditor die Datei /etc/modules auf.

In diese fügst du folgende zwei Zeilen am Ende ein.

Danach speicherst du diese mit der Tastenkombination Strg+o und schließt den Editor mit Strg+x.

Danach rufst du die Konfigurationsdatei /boot/config.txt im Terminal auf

und entfernst die Kommentierung (#) bei den folgenden beiden Zeilen.

Danach speicherst du die Änderung mit Strg+o und schließt den Editor mit Strg+x.

Als Nächstes überprüfen und ggf. bearbeiten wir noch die Konfigurationsdatei /etc/modprobe.d/raspi-blacklist.conf. In dieser Datei sollten keine Eintragungen bezüglich der I2C Schnittstelle vorhanden sein. Du kannst diese löschen oder auskommentieren (#).

Danach führst du mit sudo reboot einen Neustart des Raspberry Pi durch.

Installation der notwendigen SSD1306 Python Bibliothek

Da das Display zur Darstellung einen SSD1306 Displaycontroller verwendet, können wir auf die auf GitHub zur Verfügung gestellte SSD1306 Python Bibliothek von Adafruit zurückgreifen. Hierzu öffnest du das Terminal Programm und lädst dir die Bibliothek mit folgendem Befehl von GitHub auf den RasPi.

Sollte es bei der Verwendung des Befehles zu einer Fehlermeldung kommen, musst du ggf. das entsprechende Paket mit sudo apt-get install git installieren.

Danach wechselst du in das Verzeichnis mit der heruntergeladenen Bibliothek und installierst, damit es für Python zur Verfügung steht.

 

Das Python-Programm

Im Programm binde ich mit “font/arial.ttf” eine eigene Schriftart für das Display ein. Adafruit empfiehlt für weitere Schriftarten die Seite http://www.dafont.com/bitmap.php. Ein Blick in die Beispielprogramme von Adafruit und auf die Beschreibung des zur Ausgabe verwendete Image Modul zeigt noch viele weitere Möglichkeiten der Ausgabe.

Die fritzing Projektdatei habe ich auch auf der Fritzing Projektseite veröffentlicht und steht dort zum Download bereit.

 

Share on Facebook2Share on Google+4Tweet about this on Twitter0Pin on Pinterest1Share on LinkedIn0



Servus, ich bin Wolfgang.

Blogger – Maker – web & mobile Developer – Dobermann Besitzer.

Mit meinem über die Jahre gesammelten Wissen als Webworker möchte ich dir Hilfestellungen und Anregungen zur Nutzung der sich aus dem digital Lifestyle ergebenden Möglichkeiten und Notwendigkeiten geben.

Einen aktuellen Schwerpunkt auf meinem Blog bildet das Thema IoT im Zusammenspiel mit dem Raspberry Pi.


Hinterlasse einen Kommentar

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

17 Reaktionen (17 Kommentare)

  • Wolfgang Umlauf schrieb am 20. Juni 2017:

    Hallo Wolfgang,

    vielen Dank für deine unzähligen Beiträge. Sie haben mir beim Einstieg in die Himbeerwelt enorm geholfen.
    Bis jetzt haben deine Beispiele einwandfrei funktioniert und waren auf Anhieb reproduzierbar auf meinem System. Klasse!
    In diesem Beispiel jedoch schaffe ich eine Hürde jedoch nicht:

    ./display_wolfgang.py
    Traceback (most recent call last):
    File “./display_wolfgang.py”, line 114, in
    font = ImageFont.truetype(“font/arial.ttf”, 12) # Schriftart, Schriftgröße
    File “/usr/lib/python2.7/dist-packages/PIL/ImageFont.py”, line 240, in truetype
    return FreeTypeFont(font, size, index, encoding)
    File “/usr/lib/python2.7/dist-packages/PIL/ImageFont.py”, line 137, in __init__
    self.font = core.getfont(font, size, index, encoding)
    IOError: cannot open resource

    Woran könnte das liegen?
    Liebe Grüße (auch) Wolfgang

    • Wolfgang schrieb am 21. Juni 2017:

      Hallo Wolfgang,
      vielen Dank für Deinen Kommentar. Anhand der Fehlermeldung würde ich auf die fehlende Einbindung der Schriftdarstellungsdatei “arial.ttf” tippen.
      Die Datei arial.ttf habe ich hier als arial.zip hochgeladen. Diese musst Du laut Beispiel in einem Verzeichnis “font” entpacken. Ohne diesen Schritt kannst Du auch die Zeilen 114-116 auskommentieren und dafür in 113 die Kommentierung entfernen. Danach wäre noch die Ausgabe in der while-Schleife (Zeile 137 font=font_c in font=font) anzupassen.

      Hoffe ich konnte Dir helfen.
      Viele Grüße
      Wolfgang

  • Markus schrieb am 7. März 2017:

    Klasse Anleitung, hat mir sehr geholfen!! Ich habe vieles davon auf meiner Robotik-Bastel-Website gezeigt/erwähnt: https://direcs.de

    • Wolfgang schrieb am 8. März 2017:

      Hallo Markus,
      vielen Dank für Deinen Kommentar und die Verlinkung auf Deinen Blog mit sehr interessanten Beiträgen.
      Viele Grüße
      Wolfgang

  • Stevo schrieb am 26. Februar 2017:

    geht einfach nicht mehr… grrrr

    Traceback (most recent call last):
    File “cube.py”, line 16, in
    disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, i2c_bus=1)
    File “build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py”, line 240, in __init__
    File “build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py”, line 85, in __init__
    File “build/bdist.linux-armv6l/egg/Adafruit_GPIO/GPIO.py”, line 426, in get_platform_gpio
    RuntimeError: Could not determine platform.

    • Wolfgang schrieb am 27. Februar 2017:

      Hallo Stevo,
      die Aussage “geht einfach nicht mehr” lässt darauf schließen, es hat bei dir schon einmal funktioniert. Daher die Frage, welche Änderungen hast du in der Zwischenzeit vorgenommen?
      Wenn es bei die noch nicht funktioniert hat, würde ich an deiner Stelle zuerst testen ob die Aktivierung der I2C Schnittstelle geklappt hat.
      Viele Grüße
      Wolfgang

  • Werner Wilhelm schrieb am 29. November 2016:

    Hallo Wolfgang,
    entschuldige, dass ich mich nochmal melde – ich war 35 Jahre lang Lehrer (déformation professionnelle?!). In dem besagten Abschnitt sollte es
    3 (SDA) und 5 (SCL)
    heissen, ich denke nur an evtl. etwas unerfahrenere Leser deines sehr interessanten Beitrags, der mir sehr geholfen hat.
    Viele Grüße
    Werner

    • Wolfgang schrieb am 30. November 2016:

      Hallo Werner,
      vielen Dank für die Rückmeldung und den sachlichen Hinweis. Bei der ersten Korrektur hatte ich anscheinend nur halbherzig korrigiert, der Fehler dürfte jetzt behoben sein.
      Viele Grüße
      Wolfgang

  • Werner Wilhelm schrieb am 15. November 2016:

    Hallo,
    ich denke, dass in dem Textabschnitt
    “Das Display wird neben dem Anschluss zur Spannungsversorgung an 3,3 Volt (Pin 1) und Ground (ein GND z.B. Pin 6, 9, 14 usw.) an die I2C Schnittstelle des Raspberry Pi angeschlossen. Diese befindet sich an Pin 3 (SCL) und 5 (SDA) der GPIO-Leiste des RasPi.”
    in der letzten Zeile SCL und SDA vertauscht wurden.
    Viele Grüße
    Werner

    • Wolfgang schrieb am 15. November 2016:

      Hallo Werner,
      vielen Dank für den richtigen Hinweis. Den Beitrag habe ich entsprechend abgeändert.
      Viele Grüße
      Wolfgang

  • Steven Seifried schrieb am 30. Oktober 2016:

    /etc/config.txt sollte glaube ich /boot/config.txt heißen

    • Wolfgang schrieb am 30. Oktober 2016:

      Hallo Steven,
      vielen Dank für die Rückmeldung. Die Konfigurationsdatei ist richtigerweise in /boot/config.txt zu finden, den Beitrag habe ich entsprechend korrigiert.
      Viele Grüße
      Wolfgang

  • Sebastian schrieb am 26. Oktober 2016:

    Moin! Habe das mal probiert und bekomme folgenden Fehler:
    File “test.py”, line 46
    ermittelteZeit = systemUhrzeit + ” ” + systemDatum
    ^
    IndentationError: expected an indented block

    • Wolfgang schrieb am 26. Oktober 2016:

      Hallo Sebastian,
      vielen Dank für die Rückmeldung. Bei dem Einfügen des Programmcodes ist leider die notwendige Formatierung verschwunden. Ich habe den Programmcode in der if bzw. elif und else Abfrage durch einrücken ausgebessert.
      Viele Grüße
      Wolfgang

  • Anoynm schrieb am 23. Oktober 2016:

    Der Anschluss des DHT22 geht bestimmt auch mit weniger Kabeln

    • Wolfgang Raab schrieb am 23. Oktober 2016:

      Hallo,
      wie auf dem Schaubild zu sehen benötigt man zum Anschluss des DHT Sensors 3 Kabel. Die Überfrachtung der auf dem Beitragsbild zu sehenden Steckplatinen gehören zu einem anderen Aufbau… 🙂

      • Anoynm schrieb am 23. Oktober 2016:

        Du legst meiner Meinung nach zu viele Kabel für den DHT22