Temperaturanzeige mit OLED Display


Anleitung

Um eine Temperaturanzeige zu bauen, überlegen wir uns erstmal die Funktion des Projekts.

Ein Sensor misst die Temperatur und evtl. zusatzwerte und gibt diesen Wert an Home Assitant weiter. Dort lesen wir die Daten über einen D1 Mini aus und übertragen diese Werte auf ein OLED Display. So viel zur Theorie.

Alle benötigten Bauteile findet Ihr übrigens hier:

Nun Zur Praxis:

Zuerst schließen wir unseren D1 Mini per USB an das Gerät an wo wir unsere Home Assitant instanz laufen haben. Im meinem Fall ist es ein RaspberryPi3.

Wenn Ihr den D1 Mini wie beschrieben angeschlossen habt, geht es weiter.

  • Geht in Home Assistant in ESPHome und wählt oben rechts bei „Over-The-Air“ „USB Serial“ aus.
  • Klickt unten rechts auf das Grüne +
  • Wählt jetzt den Namen wie Ihr Eure D1 Mini nennen wollte. Im meinem Fall tempoutside.
    ACHTUNG! Es dürfen nur Kleinbuchstaben verwendet werden.
  • Klickt auf Next
  • Wählt jetzt unter Device „Wemos D1 and Wemos D1 mini“ aus.
  • Klickt auf Next
  • Gebt bei „Wifi SSID“ den Namen Eures WLAN Netzwerkes ein. Und bei „Wifi Password“ entsprechend Euer WLAN Passwort.
  • Das Feld OTA Password könnt Ihr frei lassen.
  • Klickt auf „Submit“

Ihr solltet jetzt folgendes Feld sehen:

Fonts in HomeAssistant einbinden:

Ladet Euch das Font Pack runter und kopiert die einzelnen Schriftarten aus dem Zip-Archiv in den Ordner “esphome” Eurer Home Assistant instanz.

Nun Programmieren wir den D1 Mini!

  • Klickt auf „edit“
  • Kopiert den untenstehenden Code und fügt Ihn in ESPHome unterhalb von logger ein und ersetzt Euer API und OTA Passwort. Die Fett markierten Bereiche sind MEINE Sensoren die ich vorher bereits in Home Assitant eingebunden habe. Ihr müsst dort demensprechend Eure eintragen anhand der Entity-id die in Homeassitant für den jeweiligen Sensor steht.
# Enable Home Assistant API
api:
  password: "EUER API PASSWORT"
ota:
  password: "EUER OTA PASSWORT"
time:
  - platform: homeassistant
    id: esptime
sensor:
  - platform: homeassistant
    id: bme280_temperature
    entity_id: sensor.bme280_temperature
    internal: true
  - platform: homeassistant
    id: bme280_relative_humidity
    entity_id: sensor.bme280_relative_humidity
    internal: true
  - platform: homeassistant
    id: bme280_pressure
    entity_id: sensor.bme280_pressure
    internal: true
font:
  - file: 'slkscr.ttf'
    id: font1
    size: 8
  - file: 'BebasNeue-Regular.ttf'
    id: font2
    size: 48
  - file: 'arial.ttf'
    id: font3
    size: 14
    
i2c:
  sda: D1
  scl: D2
  scan: False
display:
  - platform: ssd1306_i2c
    model: "SH1106 128x64"
    reset_pin: D0
    address: 0x3C
    lambda: |-
      // Print "Smart-4u.de" in top center.
      it.printf(64, 0, id(font1), TextAlign::TOP_CENTER, "Smart-4u.de");
      // Print outside temperature (from homeassistant sensor)
      if (id(bme280_temperature).has_state()) {
        it.printf(0, 55, id(font2), TextAlign::BASELINE_LEFT , "%.1f°", id(bme280_temperature).state);
      }
      // Print realtive humidity (from homeassistant sensor)
      if (id(bme280_relative_humidity).has_state()) {
        it.printf(127, 23, id(font3), TextAlign::TOP_RIGHT , "%.1f P", id(bme280_relative_humidity).state);
      }
      // Print outside temperature (from homeassistant sensor)
      if (id(bme280_pressure).has_state()) {
        it.printf(127, 60, id(font3), TextAlign::BASELINE_RIGHT , "%.1f D", id(bme280_pressure).state);
      }

Das ganze sollte nun so aussehen ergänzt mit Euren Daten:

  • Klickt nun auf Upload.

Euer D1 Mini ist nun programmiert!

Zu Erklärung des Codes:
sensor: Bindet Eure bereits vorhandenen Sensoren ein. In meinem Fall:

bme280_temperature
bme280_relative_humidity
bme280_pressure

font: Hier geben wir die Schriftarten und Größen an die wir benötigen. In diesem fall drei Stück. Benannt mit font1, font2 und font3.

i2c: Mit ic2 sagen wir unserem D1 Mini auf welchen PINS die SDA und SCL Pina des Displays angeschlossen wird. Benannt haben wir diese mit D1 und D2. Entsprechend müssen wir unser Display auch so an den D1 Mini anschließen damit die Kommunikation funktioniert. (Siehe Schaltbild)

Schaltbild

Verkabelung

Kommen wir zu Verdrahtung der einzelnen Komponenten. Ich habe die Stromversorgung ausschließlich über den Ground Pin und den 5V Pin vom D1 Mini realisiert und diesen per USB an ein Netzteil angeschlossen. SDA kommt an PIN D1 und SCL an PIN D2. Der Vollständigkleit halber kommt VCC an den 5V PIN und GND an den G PIN

Das war schon der ganze Zauber. Wenn wir den D1 Mini jetzt über ein USB-Kabel mit Strom versorgen, sollte folgendes passieren:

Das Display zeigt Euch wie es soll die Temperatur an. Jetzt packen wir das Ganze noch in Selbs gedrucktes Gehäuse und schon sind wir fertig. Falls das Display gedreht werden muss, ergänzt den code in Zeile 69 um:

 

rotation: 180

Ich hoffe Ihr hatte Spaß mit dieser Anleitung. Wenn Ihr fragen haben solltet, dann schreibt mir eine Mail an info[at]smart-4u.de oder folgt mir dazu doch einfach auf Instagram.

Wenn ich Euch helfen konnte und Ihr mich unterstürtzen wollt, dann würde ich mich freuen, wenn Ihr mal bei meiner Amazon-Wunschliste vorbeischaut.

Alles kann aber nichts muss!

6 KOMMENTARE
  • Sascha
    Antworten

    Hallo, woher bekommt denn der Wemos seine Daten, welche Sensoren werden da noch angeschlossen?

    1. Marvin
      Antworten

      Hallo Sascha,

      der Wemos bezieht die Daten wie beschrieben aus “Home Assistant”.

      Weitere Sensoren sind an dem Gerät nicht angeschlossen. Es wäre aber möglich einen BME280 Sensor mit an den D1 zu klemmen und sich die Daten direkt zu ziehen. Am Samstag gibt es vorrausichtlich ein Tutorial wie man einen BMP280 an einem D1 Mini anschließt und die Daten in Home Assistant überträgt. (Stichwort: Außentemperaturfühler”

      1. Sascha
        Antworten

        Danke für die Info…kann ich den BME280 zur Temperaturaufzeichnung vom Pool nehmen?

        1. Marvin
          Antworten

          Das wird schwierig, weil dieser nicht für den Nassbereich vorgesehen ist. Du könntest aber diesen hier nehmen: //amzn.to/2TDKakj

  • Gerger
    Antworten

    Hallo,
    ich habe es versucht (auch mit eigene BME) aber bei mir kommt nichts auf Display. Etwas ist mit “Fonts”. Woher die Buchstabenvarianten ist ja klar (Windows hat ja einige) aber wohin diese speichern in HASSIO? Für Display selber gibt es auch einige “Font-Dateien”, die man in IDE für Arduino verwenden kann, aber irgendwie passt nichts mit RASPI HASSIO.

    1. Marvin
      Antworten

      Ich habe tatsächlich in meiner Anleitung vergessen zu erwähnen, dass die Fonts welche angegeben werden natürlich als Datei in dem Verzeichnis von ESPHOME gespeichert werden müssen. Ich habe die Fonts zum Download bereitgestellt und die Anleitung angepasst.

      Sorry dafür!

Schreibe einen Kommentar

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