OLED Display mit SSD1306 Controller in Verbindung mit einem DHT22 Sensor am Raspberry Pi mit Python verwenden

Veröffenticht am 12.10.2016    von     in der Kategorie Displays, Raspberry Pi, Sensoren     bisher 41 Reaktionen    Zuletzt überarbeitet am 18.10.2023


In 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.

 

OLED Display mit DHT22 Sensor
 

Aktualisierung am 06.08.2023

Dieser Beitrag wurde am 06.08.2023 von mir aktualisiert bzw. soweit notwendig, für das zum Zeitpunkt der Beitragsüberarbeitung aktuelle Raspberry Pi OS (Stand 03. Mai 2023) angepasst. Der Programmcode wurde für Python 3 aktualisiert.

Anmerkung vom 18.10.2023

Wie in meinem Beitrag “Ein Blick auf das Raspberry Pi OS “Bookworm”” zur neuen Version des Raspberry Pi OS Bookworm (Stand 10.10.2023) angemerkt, funktioniert die Einbindung von Python-Bibliotheken nicht mehr wie gewohnt und führt zu einem Fehler. Daher schon jetzt der Hinweis: Solltest du eine neuere Version des Raspberry Pi OS als Bullseye (Stand 03.05.2023) verwenden, musst du die hier verwendeten Adafruit-Bibliotheken anders einbinden.

 

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 (GPIO02 – SDA1) und 5 (GPIO03 SCL1) der GPIO-Leiste des Raspberry Pi.

In den Kommentaren meldeten manche User von Problemen mit dem Display. Deshalb möchte ich den Hinweis von Steffen hier im Beitrag einbinden.

“ich hatte heute exakt dasselbe Problem. Schlussendlich bin ich auf einen Beitrag gestoßen, in dem eine Person anmerkte, Probleme mit langen Leitungswegen an diesem Display zu haben. Habe es dann mal testweise einfach mit vier Kabeln angeschlossen (vorher hatte ich es etwas umständlicher auf dem Breadboard verdrahtet). Das Display funktionierte damit auf Anhieb und wird nun auch von “i2cdetect -y 1” korrekt erkannt (was vorher nicht der Fall war)”.

 

Steckplatinenaufbau Anschluss OLED Display

Aktivierung der I2C Schnittstelle

In der Grundkonfiguration des Raspberry Pi mit dem Raspberry Pi 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.

Anmerkung: Über die Konfigurationsdatei (raspi-config) kannst du die I2C-Schnittstelle aktivieren. Allerdings fehlt dann die Angabe zum Low-Level-Treiber i2c-bcm2708.

 

Eine Übersicht über wichtige und häufig verwendete Befehle stelle ich dir auf einem kleinen Spickzettel für Raspberry Pi OS Befehle zur Verfügung.

 

Einsatz der I2C-Tools

Für die Installation und das Betreiben des Displays sind die I2C-Tools nicht notwendig. Allerdings empfiehlt sich die Installation, da das kleine Tool das testen des I2C-Bus ermöglich.

Testen ob das Bauteil, in unserem Fall das Display am I2C-Bus ansprechbar ist, kannst du durch Eingabe folgenden Befehls:

Die Ausgabe zeigt bei dem ersten Abruf das Bauteil (3c) auf der Adresse c30, beim zweiten Abruf habe ich das Display nicht angeschlossen und es wird kein Bauteil angezeigt.

 

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.

Sollte bei die eine Fehlermeldung erscheinen mit folgender Angabe: ModuleNotFoundError: No module named ‘setuptools’, benötigst du noch die Python Setuptools. Um diese mit PIP zu installieren, benötigst du zuerst das Paketinstallationsprogramm PIP für Python. Mit folgenden Befehlen kannst du PIP und die Setuptools installieren.

Installation der Adafruit DHT Bibliothek

Die DHT Bibliothek von Adafruit bindest du mit folgenden Befehl in Python3 ein.

 

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.

 

Fehlermeldung: oserror errno 121 remote i/o error

Wenn du das Programm über ssh startest, kann es sein, dass du den Fehler oserror errno 121 remote i/o error bekommst. Aktiviere in diesem Fall über das Konfigurations-Tool (sudo raspi-config) unter 3 Interface Options den Punkt I8 Remote GPIO.

 

Bereitgestellte Dateien

Die fritzing Projektdatei steht auch auf meiner fritzing Projektseite auf diesem Blog zum Download zur Verfügung.

Die Datei arial.ttf habe ich hier als arial.zip auf meinen Blog hochgeladen. In meinem Code liegt es im Ordner font im gleichen Verzeichnis wie die Programmdatei.

Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.

Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.

 

 


Transparenz-Hinweis:

Die auf dieser Seite verwendeten Produktlinks sind sogenannte Affiliate-Links zu einem Partnerprogramm. Für dich entstehen dadurch keine Mehrkosten, ich erhalte durch deinen Kauf über den Link eine kleine Provision.


Wolfgang Raab – Betreiber von webnist.de

Mein Name ist Wolfgang, ich beschäftige mich nun schon seit 1985 mit der EDV und im Besonderen mit der Software- und Webentwicklung.

Auf diesem Blog schreibe ich über Dinge, die mich begeistern, beschäftigen und ich der Meinung bin, es könnte für andere interessant und hilfreich sein.

Als großer Fan des Raspberry Pi finde ich es spannend, wie man den kleinen Computer in Verbindung mit dem IoT und Smart Home nutzen kann. Deshalb behandeln viele Beiträge auch genau dieses Thema.

Ich bin ein leidenschaftlicher Leser und Fotograf. Wenn ich nicht gerade in einem spannenden Roman versinke, bin ich oft unterwegs, um die Schönheit der Welt mit meiner Kamera einzufangen und zu teilen.

Weitere Infos und Fotos findest du auf einem der folgenden Plattformen.






Mehr erfahren?

Besuche die "About"-Seite meines Blogs und finde heraus, wie du mit mir in den Bereichen Web- und Mobile-Programmierung und Raspberry Pi zusammenarbeiten kannst. Hier beginnt deine digitale Reise.


Unterstützen

Dieser Beitrag hat dir gefallen und konnte dir bei deinem Projekt oder Problem behilflich sein? Dann würde ich mich sehr freuen, wenn du dich mit einer noch so kleinen Spende erkenntlich zeigen möchtest.




  • Fritz Schmalzbauer schrieb am 26. Juli 2022:

    Hallo Wolfgang, habe da offensichtlich ein Problem mit den ttf-Fonts. Wo würden die, zb. font/arial.ttf, liegen?
    Beim Ausführen des Programms bleibt das OLED schwarz und im Terminal kommen auch keine Werte des DHT11, und kommen unten stehende Fehlermeldungen.
    Wenn ich die Zeilen 205-208 und die mit DRAW mit # “ausklammere”, bleibt das Display auch schwarz, aber ich bekomme die Werte vom DHT 11 im Terminal.

    ??
    Danke und Gruß Fritz

    Python 3.9.2 (/usr/bin/python3)
    >>> %Run display.py
    Traceback (most recent call last):
    File “/home/raspberry/Adafruit_Python_SSD1306/examples/display.py”, line 206, in
    font = ImageFont.truetype(“font/arial.ttf”, 12) # Schriftart, Schriftgröße
    File “/usr/lib/python3/dist-packages/PIL/ImageFont.py”, line 852, in truetype
    return freetype(font)
    File “/usr/lib/python3/dist-packages/PIL/ImageFont.py”, line 849, in freetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
    File “/usr/lib/python3/dist-packages/PIL/ImageFont.py”, line 209, in __init__
    self.font = core.getfont(
    OSError: cannot open resource

    • Wolfgang schrieb am 27. Juli 2022:

      Hallo Fritz, die arial.ttf liegt laut Beispiel im Ordner fonts. Schaue Dir bitte einmal den Kommentar vom 20. Juni 2017 bzw. meine Antwort darauf an. Es dürfte sich um die gleiche Problematik handeln.
      Viele Grüße
      Wolfgang

  • Michael Schneider schrieb am 27. Mai 2018:

    Den DHT 22 Muss ich ja ganz anderst angehen
    Verkabelung GPIO21 Pin
    Dann muss ich erst mal ein Script anlegen wo der Sensor hinterlegt wird
    Dann die Befehle zum Sensordaten Auslesen ?
    Dann der P=ython Script Schreiben.?
    Das sind die installierten Dateien derzeit auf dem Py
    pi@raspberrypi:~ $ ls
    adafruit lol_dht22 sevensegment_demo.py.1
    Adafruit_Python_DHT messprogramm.py sevensegment_demo.py.2
    Adafruit_Python_SSD1306 Music Templates
    Desktop Pictures Videos
    dht22.c Public wiringPi
    Documents python_games
    Downloads sevensegment_demo.py

    Hierzu Fehlt mir der Zusammenhang wie ich anfangen muss um den Sensor Zu Configurieren einzurichten.

    Es ist anderst alleine schon von der GPIO Pin Angabe wie heist der befehl zum dht 22 anzusprechen?
    Gruß Michael

    • Wolfgang schrieb am 28. Mai 2018:

      Hallo Michael,
      ich kann gut verstehen, dass dir als Anfänger der Zusammenhang fehlt. Als erstes musst du den Sensor am Raspberry Pi anschließen. Damit du ihn über Python auslesen kannst, benötigst du die Python-Bibliothek. Dann kannst du dein Skript schreiben, oder du verwendest / erweiterst eines der Installierten Dateien von Adafruit.
      In meinem obigen Programm findest du die Einbindung der Bibliothek unter dem entsprechenden Kommentar. Die Einrichtung des Sensors unter dem entsprechenden Kommentar. Die Messwerterfassung erfolgt unter sensorenAbfrage().
      # Abfrage Luftfeuchtigkeit und Temperatur
      luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(dhtSensorTyp, dhtSensorGpio)
      dhtSensorLuftfeuchtigkeit = ‘%6.2f’ % luftfeuchtigkeit #Sensorwert auf 2 Dezimalstellen formatiert
      dhtSensorTemperatur = ‘%6.2f’ % temperatur #Sensorwert auf 2 Dezimalstellen formatiert
      Die Wertausgabe erfolgt mit: print “Werte DHT22 – Luftfeuchtigkeit = “, dhtSensorLuftfeuchtigkeit, ” Temperatur = “, dhtSensorTemperatur
      Viele Grüße
      Wolfgang

  • Michael Schneider schrieb am 27. Mai 2018:

    Es gibt dinge von dnen mann meint es wären einfach.
    Leider habe ich es nicht gesachaft den dht 22 zum laufen zubekommen.
    Ivh habe ihn am gpio21 angeschlossen es ist ja kein Onowire bus der DHT22 nicht wie beim DS18 Temperaturfühler. Gruß Michael

    Geplant war mit dem übrigen Raspberry Pi Eine Wetterstation zubauen da meine alte TFA Station kaput ging. Darum dachte ich mir den PI Haste und kaufst dir von codingworld den bausatz wetterstation. Abber so als anfänger ist das schon ne Ziehmliche Herausforderung.

    • Wolfgang schrieb am 28. Mai 2018:

      Ist den bei dem Bausatz keine Beschreibung dabei?

  • Michael Schneider schrieb am 27. Mai 2018:

    Danke für deinen link den du mir zukommen liest.
    leider bekomme ich folgenden fehler ausgegeben.
    Traceback (most recent call last):
    File “/home/pi/Desktop/DHT22.Python3.py”, line 62, in
    while Display_aktiv:
    NameError: name ‘Display_aktiv’ is not defined

    das Script habe ich etwas abgeändert
    wie folgt #!/usr/bin/python
    # coding=utf-8
    # Python Version 2.7
    # display.py
    #————————————————————

    # Einbindung der notwendigen Grundbibliotheken
    import os, sys, time, threading

    # Einbindung DHT22 Feuchtigkeits- und Temperatursensor
    import Adafruit_DHT

    # DHT22 Sensor einrichten
    dhtSensorTyp = 22 # Typ 22 (weiß) – Typ 11 (blau)
    dhtSensorGpio = 13 # an Pin 33 – GPIO 13 angeschlossen
    dhtSensor_aktiv = True # angeschlossenen Sensor für Display aktivieren
    dhtSensorTemperatur = “” # Temperaturwert
    dhtSensorLuftfeuchtigkeit = “” # Luftfeuchtigkeitwert

    # Funktionen
    #—————————–

    def aktuelleZeit(werta, wertb):
    zeitpunktMessung = time.localtime()
    jahr, monat, tag = zeitpunktMessung[0:3]
    stunde, minute, sekunde = zeitpunktMessung[3:6]
    systemUhrzeit = str(stunde).zfill(2) + “:” + str(minute).zfill(2) + “:” + str(sekunde).zfill(2)
    systemDatum = str(tag).zfill(2) + “.” + str(monat).zfill(2) + “.” + str(jahr)
    if werta == “time” and wertb == “date”:
    ermittelteZeit = systemUhrzeit + ” ” + systemDatum
    elif werta == “date” and wertb == “time”:
    ermittelteZeit = systemDatum + ” ” + systemUhrzeit
    elif werta == “time” and wertb == “”:
    ermittelteZeit = systemUhrzeit
    elif werta == “date” and wertb == “”:
    ermittelteZeit = systemDatum
    else:
    ermittelteZeit = zeitpunktMessung
    return ermittelteZeit

    def sensorenAbfrage():
    # Thread zum Auslesen der Sensoren
    global dhtSensor_aktiv, dhtSensorGpio, dhtSensorTyp, dhtSensorTemperatur, dhtSensorLuftfeuchtigkeit
    print “Thread zur Sensorenabfrage gestartet.”
    while dhtSensor_aktiv:
    # Abfrage Luftfeuchtigkeit und Temperatur
    luftfeuchtigkeit, temperatur = Adafruit_DHT.read_retry(dhtSensorTyp, dhtSensorGpio)
    dhtSensorLuftfeuchtigkeit = ‘%6.2f’ % luftfeuchtigkeit #Sensorwert auf 2 Dezimalstellen formatiert
    dhtSensorTemperatur = ‘%6.2f’ % temperatur #Sensorwert auf 2 Dezimalstellen formatiert
    print “Werte DHT22 – Luftfeuchtigkeit = “, dhtSensorLuftfeuchtigkeit, ” Temperatur = “, dhtSensorTemperatur
    displaySensorwertAusgabe()
    time.sleep(5) # notwendige Pause von mindestens 2 Sekunden – siehe Spezifikation des verwendeten Sensors

    # Abfrage des DHT Sendor in eigenem Thread starten
    sensorenAbfrageThread = threading.Thread(target=sensorenAbfrage) #Sensorenabfrage
    sensorenAbfrageThread.start()
    time.sleep(5) #damit alle Sensorwerte zum Start eingelesen sind

    # Hauptroutine

    while Display_aktiv:
    draw.rectangle((0,0,width,height), outline=0, fill=0) #Display leeren
    displayTime = aktuelleZeit(“time”, “date”) # bei Abfrage “date”,”time” ändert die Reihenfolge der Ausgabe
    draw.text((x, top), displaySensorBezeichnung , font=font, fill=255)
    draw.text((x, top+20), displayTempWert, font=font_c, fill=255)
    draw.line((x, top+45, x+width, top+45), fill=255)
    draw.text((x, top+50), displayTime, font=font, fill=255)
    disp.image(image)
    disp.display()

    Gruß Michael

    • Wolfgang schrieb am 27. Mai 2018:

      Hallo Michael,
      in deiner Abwandlung hast du “Display_aktiv” nicht definiert. In meinem Programmcode findest du es in Zeile 32.
      Da du wahrscheinlich kein OLED-Display verwendest, solltest du die Hauptroutine entsprechend umschreiben oder die von dir gesuchten DHT Sensor abfragen in ein eigenständiges Skript schreiben.
      Viele Grüße
      Wolfgang

  • Peter schrieb am 10. Februar 2018:

    Hallo Wolfgang,

    das Display ist da, nach den Änderungen auf Python 3 hat es sofort funktioniert.
    Danke dafür !

    Eine weitere Frage habe ich noch:
    Ich möchte eine einfache Pixelgrafik (jpg) ausgeben, finde aber die Befehle zur Ausgabe auf dem Display nicht,
    das holen der Grafik aus dem Speicher ist nicht das Thema.

    Hast Du da vielleicht eine Lösung ?

    Gruß
    Peter

    • Wolfgang schrieb am 11. Februar 2018:

      Hallo Peter,
      vielen Dank für die positive Rückmeldung.
      Eine direkte Lösung habe ich nicht. Allerdings ist unter den Beispielen von Adafruit auf github folgendes Demo Image-Ausgabe dabei. Laut dem Quellcode wird eine Umwandlung des jpg Formates notwendig sein.
      Viele Grüße
      Wolfgang

      • Peter schrieb am 11. Februar 2018:

        Mit

        bild = Image.open(‘image/testbild.jpg’).resize((disp.width, disp.height), Image.ANTIALIAS).convert(‘1’)

        wird automatisch umgewandelt in ein schwarz/weiß Bild, auch von jpg und png.
        Pixelgrafiken sind natürlich vorzuziehen, da einfacher aufgebaut.

        Danke für den Tipp
        Gruß
        Peter

        • Wolfgang schrieb am 11. Februar 2018:

          Vielen Dank für Deinen Kommentar.

          Viele Grüße
          Wolfgang

  • Peter schrieb am 28. Januar 2018:

    Hallo und vielen Dank für diesen Beitrag.

    Meine Anzeige ist noch auf dem langen Postweg…
    Frage vorab, ist dein Programm und der Adafruittreiber auch unter Python 3.5 lauffähig ?

    Gruß
    Peter

    • Wolfgang schrieb am 29. Januar 2018:

      Hallo Peter,
      die Adafruit Bibliothek ist so weit mir bekannt auch mit Python 3.5 kompatibel. Mein Skript muss angepasst werden. So kommen beim print die notwendigen Klammern hinzu.
      Sonst dürften keine Anpassungen notwendig sein und dem Aufbau steht somit nichts mehr im Wege 😉

      Viele Grüße
      Wolfgang

  • Stefan schrieb am 4. Dezember 2017:

    Hallo Wolfgang!

    ich habe deine Anleitung so gut es ging befolgt, leider bekomme ich immer diesen Fehler angezeigt.
    Vielleicht kannst du mir sagen an was es liegen könnte.

    pi@raspberrypi:~/Adafruit_Python_SSD1306/examples $ python shapes.py
    Traceback (most recent call last):
    File “shapes.py”, line 70, in
    disp.begin()
    File “build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py”, line 148, in begin
    File “build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py”, line 292, in _initialize
    File “build/bdist.linux-armv6l/egg/Adafruit_SSD1306/SSD1306.py”, line 129, in command
    File “build/bdist.linux-armv6l/egg/Adafruit_GPIO/I2C.py”, line 115, in write8
    File “build/bdist.linux-armv6l/egg/Adafruit_PureIO/smbus.py”, line 236, in write_byte_data
    IOError: [Errno 121] Remote I/O error

    Ich danke dir recht Herzlich!

    LG Stefan

    • Steffen schrieb am 30. Dezember 2017:

      Hallo Stefan,

      ich hatte heute exakt dasselbe Problem. Schlussendlich bin ich auf einen Beitrag gestoßen, in dem eine Person anmerkte, Probleme mit langen Leitungswegen an diesem Display zu haben. Habe es dann mal testweise einfach mit vier Kabeln angeschlossen (vorher hatte ich es etwas umständlicher auf dem Breadboard verdrahtet). Das Display funktionierte damit auf Anhieb und wird nun auch von “i2cdetect -y 1” korrekt erkannt (was vorher nicht der Fall war).

      Viele Grüße
      Steffen

      • Wolfgang schrieb am 30. Dezember 2017:

        Hallo Steffen,
        vielen lieben Dank für Deinen hilfreichen Kommentar. Deinen Hinweis zu den langen Leitungswegen werde ich im Beitrag einbinden.
        Viele Grüße
        Wolfgang

    • Wolfgang schrieb am 4. Dezember 2017:

      Hallo Stefan,
      vielen Dank für deinen Kommentar. Leider kann ich dir so aus der Ferne keine Hilfestellung bieten. Mein Ansatz wäre die Überprüfung, ob der I2C Bus über raspi-config aktiviert ist. Wenn er aktiviert ist, über i2cdetect aus dem i2c-tool nachsehen ob bzw. auf welcher Adresse das Display verbunden ist.
      Viele Grüße
      Wolfgang

  • bear schrieb am 23. September 2017:

    Hey Ho!
    Schicke Sache das!

    Eines fehlt mir hier noch, also quasi als eine kleine Verbesserung des Ganzen!
    Es wäre doch klasse wenn die Daten in einer CSV bzw SQL Datei gespeichert werden würden um sie so für eine Auswertung nutzen zu können!

    Hattest du sowas schon mal in Erwägung gezogen?

    Viele Grüße bear

  • Alex schrieb am 25. August 2017:

    Hallo,

    erstmal großes Lob an das übersichtliche Tutorial. Aber irgendetwas mache ich falsch:

    Das Modul Adafruit_SSD1306 konnte ich so nicht einbinden. Erst nachdem ich es zu Adafruit_Python_SSD130 geändert habe, ging es. Das Selbe bei Adafruit_Python_DHT.

    Allerdings meint er jetzt beim Kompilieren, dass das Modul gar kein entsprechendes Attribut habe.
    disp = Adafruit_Python_SSD1306.SSD1306_128_64(rst=RST)
    AttributeError: module ‘Adafruit_Python_SSD1306’ has no attribute ‘SSD1306_128_64’

    Im installierten Modul ist es aber sehr wohl vorhanden. (SSD1306.py … class SSD1306_128_64(SSD1306Base))

    Wo liegt da das Häufchen?

    LG Alex

    • Wolfgang schrieb am 26. September 2017:

      Hallo Alex,
      eine direkte Lösung fällt mir nicht ein. Habe mir nochmal die Bibliothek auf GitHub angesehen und an dieser hat sich nichts verändert? Das Programm habe ich für Python 2.7 geschrieben, ist die Bibliothek auch für diese Version installiert?
      Viele Grüße
      Wolfgang

  • Mario schrieb am 24. August 2017:

    Hy Wolfgang,

    Cooles project. Funktioniert auch soweit, nach ein paar Anfangsschwierigkeiten 🙂
    Verwende den DHT11.
    Das einzige Problem welches ich mit dem Code habe istz in der Senorenabfrage.
    Da bekomme ich jedesmal bei de Formatierung aus Zeile 64 das raus:
    “TypeError: loat argument required, not NoneType”
    ….

    • Wolfgang schrieb am 26. September 2017:

      Hallo Mario,
      eine Diagnose über die Ferne ist nicht einfach. 🙂 Hast du in der Zeile 18 (dhtSensorTyp = 22 # Typ 22 (weiß) – Typ 11 (blau) den Wert auf 11 gesetzt?

      Viele Grüße
      Wolfgang

  • 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


Schreibe einen Kommentar

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

 

Kleiner Hinweis, alle Kommentare werden moderiert.

Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.

Entdecke die Welt von Webnist.de

Erfahre mehr über die Hintergründe meines Blogs und wie ich dich bei deinen digitalen Projekten unterstützen kann.

Aktuelles Video auf YouTube

Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.