Skip to content

BME680-Sensor auf ESP32 mit esphomelib konfigurieren

tl;dr

Mit esphomelib lässt sich schnell und einfach ein BME680-Sensor an einem ESP32-Board konfigurieren.

Das Projekt

ESP32-Board (links) und BME680-Sensor (rechts)
ESP32-Board (links) und BME680-Sensor (rechts)

Bei mir läuft seit längerer Zeit sehr zuverlässig Home Assistant für einfache Smart Home-Dinge. Unter anderem lasse ich mir

  • Außentemperatur und relative Luftfeuchte
  • Feinstaubwerte
  • Systemdaten (CPU, RAM, Netzwerk)

anzeigen, steuere ein paar Lampen, und habe auch ein paar Automatisierungen eingerichtet. Beispielsweise wird ein Licht immer dann eingeschaltet, wenn die Sonne untergeht. Das ist nicht wirklich viel im Vergleich zu dem, was möglich wäre, wird aber hin und wieder von mir erweitert, und wäre vielleicht mal einen eigenen Blogpost wert.

Hier soll es um eine Erweiterung gehen, nämlich einen Temperatursensor (kombiniert mit anderen Sensoren, dazu gleich mehr) in einem Zimmer. Dafür habe ich mir den BME680-Sensor von Bosch ausgesucht, weil er neben der Temperatur, der relativen Luftfeuchte und dem atmosphärischen Druck auch einen Luftqualitäts-Sensor integriert.

Der BME680-Sensor auf dem ESP32-Board

Cooles Teil, wenn auch noch relativ neu und daher nicht so umfangreich unterstützt wie ältere Sensoren. Mein Breakout-Board mit diesem Sensor ist das von Watterot, es gibt aber noch eine Reihe anderer Hersteller. Das Board kann per I²C oder SPI angeschlossen werden an einen Arduino, ein NodeMCU/ESP8266, oder eben an dessen Nachfolger, ein Board mit einem ESP32-Microcontroller. So eins hatte ich schon eine Weile rumliegen, und nun sollte es endlich zum Einsatz kommen. Der ESP32 unterstützt I²C, vor allem aber auch WLAN. Da ich die Sensordaten per WLAN übertragen möchte, ist das ideal.

Verwirrt war ich zunächst einmal wegen der PIN-Belegung, weil im Internet verschiedene, darunter auch falsche Belegungen zu finden sind. Am Ende fand ich heraus, dass dieses PIN-Mapping korrekt ist. Zumindest, was die Pins GPIO21 (I²C SDA, Serial Data) und GPIO22 (I²C SCL, Serial Clock) angeht. Entsprechend sind die Drähte vom ESP32 zum Watterot-BME680 also zu ziehen:

  • 3V3 -> VCC (positive Versorgungsspannung)
  • GND -> GND (Masse)
  • GPIO21 -> SDA
  • GPIO22 -> SCL

Die Programmierung

Ich hatte zwar Lust, aber keinesfalls die Zeit, meinen Temperatursensor mit allen Features selbst zu programmieren. Mittels der Arduino IDE habe ich probeweise den BME680-Sketch von Adafruit geflasht, der auch auf Anhieb funktionierte, allerdings die Sensorwerte nur über die serielle Konsole ausspuckte.

Beim Suchen nach Anleitung für NodeMCU-Firmware (für den ESP8266) bin ich vor einer Weile auf die NodeMCU custom builds gestoßen, ein Webfrontend, mit dessen Hilfe man sich aus einer vielfältigen Auswahl von Modulen (u.a. auch für den BME680) eine maßgeschneiderte Firmware bauen lassen kann. Sieht ziemlich genial aus, aber leider wird der ESP32 dort (noch) nicht unterstützt.

Also ging die Suche weiter, und irgendwann bin ich auf esphomelib gestoßen, a comprehensive solution for using ESPs with Home Assistant. Im Prinzip ist das ein Tool, welches anhand einer übersichtlichen YAML-Konfiguration (siehe esphomeyaml) eine maßgeschneiderte Firmware für ESP8266- und ESP32-basierte Boards kompiliert und aus diesen Gründen einfach großartig ist:

  • Vollständige und klare Dokumentation aller Funktionen und Optionen.
  • Tutorials und Getting-Started-Guides, FAQs und Migrationsanleitungen.
  • Großer Umfang an unterstützten Komponenten.
  • Einfache Konfiguration über YAML-Dateien.
  • Web-Oberfläche mit Zugriff auf lokale Boards über WLAN.
  • Ausgefeilte Logging-Mechanismen.
  • Open Source :-)

Installiert und vorbereitet habe ich das so:

$ sudo apt install python-dev
$ pip install esphomeyaml tornado esptool
$ mkdir esphomelib && cd esphomelib
$ esphomeyaml meinsensor.yaml wizard # startet den Wizard
$ esphomeyaml meinsensor.yaml run # baut und flasht die Firmware
$ esphomeyaml ./ dashboard # startet die Weboberfläche

Der Wizard fragt einige Basisdaten ab und generiert daraus die Konfigurationsdatei meinsensor.yaml, die später noch angepasst werden kann. Danach kann bereits die Firmware gebaut und geflasht werden. Das lief bei mir alles super simpel, schnell und ohne Probleme. Innerhalb von Minuten begann mein Sensor also, Daten an meinen MQTT-Server zu schicken. Da dieser bereits in meiner Home Assistant-Installation registriert war, wurden die Werte dort auch direkt angezeigt. Über die Weboberfläche von esphomeyaml habe ich zusätzlich auch noch direkten Zugriff auf die Logs meines Sensors.

Visualisierung einer Temperatur und einer Luftfeuchte-Anzeige
Temperatur und Luftfeuchte in der Home Assistant-Oberfläche (Lovelace UI)

Kleinere Probleme

Auf dem ESP32 sind, anders als auf dem ESP8266 keine SSL-Verbindungen zum MQTT-Server möglich, weil die genutzte Bibliothek AsyncTCP noch kein SSL unterstützt. Zähneknirschend musste ich also den Port für unverschlüsselte Verbindungen auf meinem MQTT-Server öffnen.

Die Sensor-Werte des Barometers und für die Luftqualität sind erstmal nicht brauchbar. Der Luftdruck müsste korrigiert werden, und den Index for Air Quality (IAQ) kann bisher nur eine proprietäre Software von Bosch Sensortec berechnen.

Fazit

Abgesehen davon kann ich jedem/r, der/die schnell und einfach Sensoren an einem ESP2866- oder ESP32-Board auslesen möchte, empfehlen, sich zunächst einmal esphomelib anzuschauen - viel besser wird es wahrscheinlich nicht mehr. Natürlich werden bei weitem nicht alle Sensoren unterstützt, aber viele gängige sind dabei.

Meine Konfigurationsdatei

esphomeyaml:
  name: meinsensor
  platform: ESP32
  board: esp32dev

wifi:
  ssid: 'foobar'
  password: 'foobar'

mqtt:
  broker: 'mqtt.foobar.de'
  username: 'mattsches'
  password: 'foobar'

# Enable logging
logger:

ota:
  password: 'foobar'

i2c:
  sda: 21
  scl: 22
  scan: False

sensor:
  - platform: bme680
    temperature:
      name: "Temperatur"
      oversampling: 16x
    pressure:
      name: "Barometer"
    humidity:
      name: "rel. Luftfeuchte"
    gas_resistance:
      name: "Luftqualität"
    address: 0x76
    update_interval: 15s

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Markdown-Formatierung erlaubt
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!