Okos hangszóró fejlesztése LED ring beépítésével

1. Hardver Bekötési Rajz (Pinout)

A stabil működéshez 5V-os (vagy 5.2V-os) tápegység javasolt, közös testtel.

  • I2S Hangszóró (PCM5102 / MAX98357):
    • BCK (BCLK) -> GPIO25
    • LCK (LRCK) -> GPIO26
    • DIN (DOUT) -> GPIO27
    • GND -> ESP32 GND
    • VIN -> 5V / 5.2V (külső táp)
  • WS2812B LED Gyűrű (12 LED):
    • DI (Data In) -> GPIO13
    • GND -> ESP32 GND (Közös test elengedhetetlen!)
    • 5V -> 5.2V (külső táp)

2. ESPHome YAML Konfiguráció

Ez a fájl tartalmazza a hardvervezérlést, de az automatizmust már a Home Assistantra bízzuk a rugalmasság miatt.

YAML

esphome:
  name: okos-hangszoro
  friendly_name: Okos Hangszoro

esp32:
  board: esp32dev
  framework:
    type: arduino

wifi:
  ssid: "XXXXXX" # Álcázott SSID
  password: "XXXXX" # Álcázott jelszó

ota:
  - platform: esphome

logger:
  level: DEBUG

api:
  reboot_timeout: 0s

# --- HANGSZÓRÓ ---
i2s_audio:
  - id: i2s_bus
    i2s_lrclk_pin: GPIO26
    i2s_bclk_pin: GPIO25

media_player:
  - platform: i2s_audio
    name: "Okos Hangszoro"
    id: okos_media_player
    i2s_audio_id: i2s_bus
    i2s_dout_pin: GPIO27
    dac_type: external

# --- LED GYŰRŰ (Stabil NeopixelBus platform) ---
light:
  - platform: neopixelbus
    type: GRB
    variant: WS2812
    pin: GPIO13
    num_leds: 12
    name: "Hangszóró LED Gyűrű"
    id: led_ring
    method: bitbang # A hang és LED ütközés elkerülése végett
    effects:
      - pulse:
          name: "Lélegző Fény"
      - addressable_rainbow:
          name: "Szivárvány"
      - addressable_flicker:
          name: "Gyertyafény"

3. Home Assistant Scriptek (Effekt gyűjtemény)

A scriptekkel hozhatod létre a bonyolultabb villogásokat. (A HA scripts.yaml fájljába vagy a kezelőfelületen):

YAML

# Kéken lüktető effekt zenéhez
speaker_music_active:
  alias: "Zene Aktivitás Fény"
  sequence:
    - service: light.turn_on
      target:
        entity_id: light.hangszoro_led_gyuru
      data:
        effect: "Lélegző Fény"
        rgb_color: [0, 0, 255]
        brightness_pct: 80

# Gyors piros villogás hiba vagy riasztás esetén
speaker_alarm:
  alias: "Riasztás Effekt"
  sequence:
    - repeat:
        count: 10
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.hangszoro_led_gyuru
            data:
              rgb_color: [255, 0, 0]
              brightness_pct: 100
          - delay: "00:00:00.3"
          - service: light.turn_off
            target:
              entity_id: light.hangszoro_led_gyuru
          - delay: "00:00:00.3"

4. Hol keress további effekteket?

Ha újabb trükköket szeretnél, ezeket a kulcsszavakat és helyeket használd:

  • HA Blueprints: A Home Assistant felületén: Beállítások -> Automatizmusok -> Blueprints -> Explore. Keress rá: Media player light sync.
  • Google/GitHub kulcsszavak: * Home Assistant LED ring script examples
    • ESPHome addressable light effects library
    • WLED effect patterns for ESPHome
  • Fórumok: Home Assistant Community – Scripts exchange

    3. Összetett effekt: Szivárvány és lüktetés kombinálva

    A HA-ból is hivatkozhatsz az ESP-ben megírt effektekre (pl. Szivárvány), de paraméterezheted is:

    alias: "Party_Mode"
    sequence:
      - service: light.turn_on
        target:
          entity_id: light.hangszoro_led_gyuru
        data:
          effect: "Szivárvány"
          brightness_pct: 100
      - delay: "00:00:10"
      - service: light.turn_off
        target:
          entity_id: light.hangszoro_led_gyuru

    2. Script: „Bejelentés előtt” (Lágy felúszás)

    Ezt érdemes a TTS (beszéd) elé tenni:

    alias: "TTS_Pre_Effect"
    sequence:
      - service: light.turn_on
        target:
          entity_id: light.hangszoro_led_gyuru
        data:
          rgb_color: [0, 255, 0]
          brightness_pct: 100
          transition: 2  # 2 másodperc alatt úszik fel a fény
      - delay: "00:00:02"

    1. Script: „Riasztás” (Piros-kék villogás)

    Ez a script addig fut, amíg le nem állítod, és váltogatja a színeket.

    alias: "Speaker_Alarm_Effect"
    sequence:
      - repeat:
          while:
            - condition: state
              entity_id: script.speaker_alarm_effect
              state: "on"
          sequence:
            - service: light.turn_on
              target:
                entity_id: light.hangszoro_led_gyuru
              data:
                rgb_color: [255, 0, 0]
                brightness_pct: 100
            - delay: "00:00:00.5"
            - service: light.turn_on
              target:
                entity_id: light.hangszoro_led_gyuru
              data:
                rgb_color: [0, 0, 255]
                brightness_pct: 100
            - delay: "00:00:00.5"

    Hogyan tedd bele az automatizmusba?

    Ha megvannak a scriptek, az automatizmusod pofonegyszerű lesz:

    • Trigger: Hangszóró állapota playing-re vált.
    • Action: script.turn_on -> Speaker_Alarm_Effect.

    Szólj hozzá!