🚀 Nie wieder schief mit ESP32! Die smarte Lösung mit Home Assistant & ESPHome

👉 Direkt auf YouTube schauen und abonnieren:
Smart Home & More auf YouTube

Einleitung

Möchtest du die Neigung deines Wohnwagens oder anderer Geräte präzise messen – ganz ohne klassische Wasserwaage? In diesem Beitrag zeige ich dir, wie du mit einem MPU6050-Sensor, einem ESP32 (z. B. M5 Atom Lite) und ESPHome ein smartes Messsystem aufbaust. Egal, ob für Wohnwagen-Nivellierung, Solaranlagen, Kameraausrichtung – dieses Setup ist vielseitig einsetzbar.

Ein klein wenig Löten gehört dazu, aber keine Sorge: Ich erkläre dir Schritt für Schritt, wie du den Sensor anschließt, die Software einrichtest und die Daten in Home Assistant auswertest. Damit kannst du dein Smart Home noch präziser steuern!

MPU 6050


Was du brauchst*

  • MPU6050 (Gyroskop + Beschleunigungssensor)
  • ESP32 / M5 Atom Lite oder Wemos D1 Mini
  • Jumperkabel
  • ggf. 3D-gedrucktes Gehäuse
  • Lötkolben und Lötzinn (für die Stiftleiste)
  • optional: DC-DC-Wandler für Wohnwagen-Stromversorgung
Angebot
M5Stack Atom Lite ESP32 IoT Entwicklungsboards und Kits | Development Kit C008
M5Stack Atom Lite ESP32 IoT Entwicklungsboards und Kits | Development Kit C008
M5Stack SKU: C008; ESP32-basiert, RGB-LED (SK6812); Eingebaute Infrarot; Erweiterbare Pins & Löcher
17,50 EUR Amazon Prime
elegoo Dupont-Kabel-Set, 40-polige Buchse auf Stecker, 40-polige Stecker auf Stecker, 40-polige Buchse auf Buchse, breite Überbrückungskabel für Arduino-Boards, Mehrfarbig, 3 Breitbandkabel mit je 40 Polen
elegoo Dupont-Kabel-Set, 40-polige Buchse auf Stecker, 40-polige Stecker auf Stecker, 40-polige Buchse auf Buchse, breite Überbrückungskabel für Arduino-Boards, Mehrfarbig, 3 Breitbandkabel mit je 40 Polen
√Lieferumfang: 1×40 Female – Female; 1×40 Male – Female; 1×40 Male – Male;; √ Wir sind stets bemüht die Funktion unserer Produkte zu verbessern.
6,99 EUR Amazon Prime
sourcingmap® 100Stk M2,5x6mm Edelstahl Metall Kreuzschlitz Flachkopf Blechschraube Schraube de
sourcingmap® 100Stk M2,5x6mm Edelstahl Metall Kreuzschlitz Flachkopf Blechschraube Schraube de
Herstellungsland: CHINA; Material: Edelstahl Metall; Reingewicht: 23g; Kopfsart: Flachkopf; Produktname: Blechschraube
8,39 EUR Amazon Prime

Schritt-für-Schritt-Anleitung

1. Sensor verstehen & Ziel definieren

Der MPU6050 misst Beschleunigung und Drehung auf drei Achsen. Damit lassen sich Pitch und Roll berechnen – ideal, um die Neigung eines Wohnwagens zu visualisieren. Der Berechnung liegt folgende Formel zugrunde.

📏 Pitch-Berechnung (Neigung nach vorne/hinten):

⚙️ Roll-Berechnung (Neigung seitlich):

Ziel: Ich will im Wohnwagen die Ausrichtung sehen, ohne externe Wasserwaage – einfach direkt auf dem Smartphone oder im Home Assistant.


2. Gehäuse vorbereiten und löten

Ich nutze ein 3D-gedrucktes Gehäuse, das mir ein Kollege netterweise konstruiert hat.

STL File:

🔧 Lötarbeiten

  • Abgewinkelte Stiftleiste unten anlöten
  • Platine flach auf Tisch legen, Lötkolben sauber ansetzen
  • Keine Sorge: auch als Lötanfänger bekommst du das hin

3. 3D-Druck vorbereiten

Ich verwende PETG als Material, schwarz, mit Stützstruktur – Druckzeit: ca. 14 Minuten.

Nach dem Druck:

  • Sensor einsetzen
  • Deckel mit zwei M2,5 x 6,5 DIN 7981 Schrauben befestigen


4. Elektronik verbinden

🧩 Verdrahtung

MPU6050 PinESP32 (M5 Atom Lite)
VCC3.3 V
GNDGND
SDAGPIO26
SCLGPIO32

Für den Betrieb im Wohnwagen empfehle ich einen DC-DC-Wandler, um aus 12 V → 5 V zu erzeugen.


5. ESPHome konfigurieren

📋 YAML-Konfiguration

  1. Neues Gerät in ESPHome erstellen: Camper Video
  2. Plattform auswählen: ESP32 oder M5 Atom
  3. i2c: Schnittstelle konfigurieren (GPIO26 und GPIO32)
  4. Sensor anlegen (MPU6050, Adresse: 0x68)
  5. Template-Sensoren für Pitch und Roll erstellen
  6. Button zur Kalibrierung hinzufügen

💡 Tipp: Kalibriere auf einer ebenen Fläche, z. B. mit einer Wasserwaage

#####--Dieser Teil wird automatisch generiert --######
esphome:
  name: camper-video
  friendly_name: Camper_Video

esp32:
  board: m5stack-atom
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "eKFfU/O1Bk+XdekfHvXhGIsniLzxDfkQNbtqox78GPQ="

ota:
  - platform: esphome
    password: "2c3c0ff4307677331abdaa79a3be80ee"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Camper-Video Fallback Hotspot"
    password: "9bnmbqdXxG3s"

captive_portal:
#####--Ende automatischer Teil, ab hier kopieren! --######

i2c:
  - id: grove
    sda: 26
    scl: 32

globals:
  - id: pitch_offset
    type: float
    initial_value: '0.0'
    restore_value: true
  - id: roll_offset
    type: float
    initial_value: '0.0'
    restore_value: true

sensor:
  - platform: mpu6050
    address: 0x68
    update_interval: 0.1s
    accel_x:
      name: "MPU6050 Accel X"
      id: accel_x
      internal: true
    accel_y:
      name: "MPU6050 Accel Y"
      id: accel_y
      internal: true
    accel_z:
      name: "MPU6050 Accel Z"
      id: accel_z
      internal: true
    temperature:
      name: "MPU6050 Temperature"
      internal: true
    gyro_x:
      name: "MPU6050 Gyro X"
      internal: true
    gyro_y:
      name: "MPU6050 Gyro Y"
      internal: true
    gyro_z:
      name: "MPU6050 Gyro Z"
      internal: true

  - platform: template
    name: "Neigung Pitch"
    id: pitch
    icon: mdi:caravan
    unit_of_measurement: "°"
    accuracy_decimals: 1
    update_interval: 0.1s
    lambda: |-
      if (isnan(id(accel_x).state) || isnan(id(accel_y).state) || isnan(id(accel_z).state)) {
        return NAN;
      }
      float raw = atan2(id(accel_y).state, sqrt(pow(id(accel_x).state, 2) + pow(id(accel_z).state, 2))) * (180.0 / 3.14159265);
      return raw - id(pitch_offset);
    filters:
      - sliding_window_moving_average:
          window_size: 8
          send_every: 1
      - exponential_moving_average:
          alpha: 0.2

  - platform: template
    name: "Neigung Roll"
    id: roll
    icon: mdi:axis-x-rotate-clockwise
    unit_of_measurement: "°"
    accuracy_decimals: 1
    update_interval: 0.1s
    lambda: |-
      if (isnan(id(accel_x).state) || isnan(id(accel_z).state)) {
        return NAN;
      }
      float raw = atan2(-id(accel_x).state, id(accel_z).state) * (180.0 / 3.14159265);
      return raw - id(roll_offset);
    filters:
      - sliding_window_moving_average:
          window_size: 8
          send_every: 1
      - exponential_moving_average:
          alpha: 0.2

button:
  - platform: template
    name: "Kalibriere Neigung"
    id: calib_button
    on_press:
      then:
        - lambda: |-
            id(pitch_offset) = atan2(id(accel_y).state, sqrt(pow(id(accel_x).state, 2) + pow(id(accel_z).state, 2))) * (180.0 / 3.14159265);
            id(roll_offset) = atan2(-id(accel_x).state, id(accel_z).state) * (180.0 / 3.14159265);
            ESP_LOGI("main", "Kalibrierung durchgeführt: pitch_offset=%.2f, roll_offset=%.2f", id(pitch_offset), id(roll_offset));

6. Sensor kalibrieren

Durch einen Button in ESPHome kannst du mit einem Klick den Sensor nullen. Die aktuellen Werte werden als Offset gespeichert und dauerhaft berücksichtigt.

7. Integration in Home Assistant

Verwende HACS + Bar Card, um die Neigungsdaten stilvoll anzuzeigen:

Pitch

type: custom:bar-card
title: Pitch
min: -40
max: 40
height: 40px
icon: mdi:caravan
animation:
  state: "off"
  speed: 1
severity:
  - from: -180
    to: -10
    color: red
  - from: -10
    to: -1
    color: yellow
  - from: -1
    to: 1
    color: green
  - from: 1
    to: 10
    color: yellow
  - from: 10
    to: 180
    color: red
positions:
  icon: outside
  indicator: "off"
  name: "off"
  value: inside
entities:
  - entity: sensor.fuellstand_frischwasser_neigung_pitch #hier durch eigenen Sensornamen ersetzen


Roll
type: custom:bar-card
title: Roll
min: -40
max: 40
height: 40px
icon: mdi:axis-x-rotate-clockwise
animation:
  state: "off"
  speed: 1
severity:
  - from: -180
    to: -10
    color: red
  - from: -10
    to: -1
    color: yellow
  - from: -1
    to: 1
    color: green
  - from: 1
    to: 10
    color: yellow
  - from: 10
    to: 180
    color: red
positions:
  icon: outside
  indicator: "off"
  name: "off"
  value: inside
entities:
  - entity: sensor.fuellstand_frischwasser_neigung_roll  #hier durch eigenen Sensornamen ersetzen !

8. Einbau im Wohnwagen

In meinem Wohnwagen war bereits ein Atom M5 Lite für die Füllstandsanzeige installiert – ideal zum Nachrüsten. Die Stromversorgung hole ich vom vorhandenen DC-DC-Wandler ab.


Fazit

Mit wenigen Komponenten und etwas Bastelarbeit bekommst du ein richtig cooles Feature für deinen Camper oder Wohnwagen: digitale Neigungsmessung mit Liveanzeige im Smart Home. Ideal, um sich die Nivellierung zu erleichtern – besonders auf unebenen Stellplätzen.


Komplette Playlist: Home Assistant im Camper