Okos Tesztmodell: ESP32-C3 Szenzorállomás Home Assistant alá

Ez a bejegyzés egy kompakt és sokoldalú tesztvezérlőt mutat be, amely egy ESP32-C3 SuperMini lapkára épül. A cél egy olyan eszköz létrehozása volt, amely képes a fényerő, a hőmérséklet és a vízszint monitorozására, valamint vizuális riasztásra.

Felhasznált alkatrészek

  • Mikrokontroller: ESP32-C3 SuperMini (a kompakt méret és az USB-C miatt).
  • Fényérzékelő: BH1750 digitális fényérzékelő (I2C busz).
  • Hőmérséklet érzékelő: NTC termisztor (analóg bemeneten, feszültségosztóval).
  • Vízszint érzékelő: Digitális érintkező (lebegőpontos vagy úszókapcsoló).
  • Jelzőfény: Piros LED + 220-470 Ohm ellenállás.

Lábkiosztás (Pinout)

A projekt a lapka gyári feliratait követi a maximális átláthatóság érdekében:

AlkatrészESP32-C3 PinFunkció
BH1750 SDAGPIO6 (D4)I2C Adatvonal
BH1750 SCLGPIO7 (D5)I2C Órajel
Hőmérséklet (NTC)GPIO2 (A0)ADC Bemenet
Vízszint érzékelőGPIO3 (A1)Digitális bemenet (GND-re zár)
Riasztó LEDGPIO4 (A2)Digitális kimenet

ESPHome Konfiguráció (YAML)

A kód tartalmazza a szenzorértékek simítását (moving average) és egy automatizált villogó riasztást, amely közvetlenül a vezérlőn fut, így hálózati hiba esetén is működik.

YAML

esphome:
  name: teszt-vezerlo
  friendly_name: Teszt Vezérlő

esp32:
  board: esp32-c3-devkitm-1
  variant: esp32c3
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_WPA3_SAE: "n"

wifi:
  networks:
    - ssid: "Saját wifi name"
      password: "Saját jelszó"
  fast_connect: true
  power_save_mode: NONE
  reboot_timeout: 0s

captive_portal:

api:
  reboot_timeout: 0s

ota:
  - platform: esphome

logger:
  level: DEBUG

web_server:
  port: 80

# I2C Busz beállítása a gyári feliratok alapján
i2c:
  sda: GPIO6
  scl: GPIO7
  scan: true

# Kimenet a figyelmeztető LED-nek
switch:
  - platform: gpio
    pin: GPIO4
    name: "Figyelmeztető LED"
    id: alert_led

sensor:
  # BH1750 Fényérzékelő mozgóátlag szűrővel
  - platform: bh1750
    name: "Fényerősség"
    address: 0x23
    update_interval: 5s
    filters:
      - sliding_window_moving_average:
          window_size: 10
          send_every: 1
    unit_of_measurement: "lx"

  # NTC Hőmérséklet mérés
  - platform: adc
    pin: GPIO2
    id: ntc_voltage
    attenuation: 11db
    update_interval: 10s

  - platform: resistance
    sensor: ntc_voltage
    id: ntc_resistance
    configuration: DOWNSTREAM
    resistor: 5.0kOhm
    reference_voltage: 3.3V

  - platform: ntc
    sensor: ntc_resistance
    name: "Hőmérséklet"
    calibration:
      - 10.0kOhm -> 25°C
      - 4.1kOhm -> 45°C
      - 25.0kOhm -> 5°C
    filters:
      - sliding_window_moving_average:
          window_size: 15
          send_every: 1

# Vízszint érzékelő és helyi villogó automatika
binary_sensor:  
  - platform: gpio
    pin:
      number: GPIO3
      mode: INPUT_PULLUP
      # Ha most inverted: true van és riaszt, akkor ezt állítsd FALSE-ra.
      # Ha most inverted: false van és riaszt, akkor ezt állítsd TRUE-ra.
      inverted: false  
    name: "Tartály Megtelés Riasztás"
    id: water_level
    filters:
      - delayed_on: 200ms
      - delayed_off: 200ms
    on_press: 
      - while:
          condition:
            binary_sensor.is_on: water_level
          then:
            - switch.turn_on: alert_led
            - delay: 200ms
            - switch.turn_off: alert_led
            - delay: 200ms
    on_release: 
      - switch.turn_off: alert_led

Főbb funkciók

  1. Szenzor simítás: Mind a fényerő, mind a hőmérséklet mérése „sliding window” átlagolást használ, így megszűnnek a zavaró kiugrások a Home Assistant grafikonokon.
  2. Hardveres biztonság: A vízszint riasztás nem vár a szerver válaszára; az ESP32-C3 belső logikája azonnal elindítja a LED villogtatását, ha vizet érzékel.
  3. Kompakt felépítés: Az I2C busz használatával kevés lábbal is több érzékelőt tudunk kezelni.
  4. OTA frissítés: Fissítési lehetőség Wifin vagy OTA.

A tartály állapot jelzés automatizálás YAML kódja:

YAML

alias: "Vízszint Riasztás - Sziréna vezérlés"
description: "Ha megtelik a tartály, bekapcsolja a központi szirénát, ha kiürül, kikapcsolja."
mode: restart

trigger:
  - platform: state
    entity_id: binary_sensor.haloszoba_vizszint_riasztas
    from: "off"
    to: "on"
    id: "megtelt"
  - platform: state
    entity_id: binary_sensor.haloszoba_vizszint_riasztas
    from: "on"
    to: "off"
    id: "kiurult"

action:
  - choose:
      # ELSŐ ESET: Megtelt a tartály - Bekapcsolás
      - conditions:
          - condition: trigger
            id: "megtelt"
        sequence:
          - action: siren.turn_on
            target:
              entity_id: siren.okos_kozponti_hub_egyseg
            # Ha nem akarsz extra paramétereket, a data részt el is hagyhatod:
            data: {}

      # MÁSODIK ESET: Kiürült a tartály - Kikapcsolás
      - conditions:
          - condition: trigger
            id: "kiurult"
        sequence:
          - action: siren.turn_off
            target:
              entity_id: siren.okos_kozponti_hub_egyseg

Szólj hozzá!