# ESP32 smart głośnik v1.5

**URL:** <https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195>\
**Category:** ESPHome\
**Tags:** esp32, esphome, i2s\_audio\
**Created:** [29 Grudzień 2023 18:51 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195 "2023-12-29T18:51:07Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Autor:** ![boskikak](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/b/74df32/32.png) [@boskikak](https://forum.arturhome.pl/u/boskikak)\
**Data wpisu:** [29 Grudzień 2023 18:51 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/1 "2023-12-29T18:51:07Z")

</div>

Powstała pierwotna wersja głośnika z asystentem o której wspominałem tutaj: [Smart głośnik dla każdego ESP32](https://forum.arturhome.pl/t/smart-glosnik-dla-kazdego-esp32/10851) i zapowiedziałem wersję poprawioną V2.0 gdzie miało się odbyć wszystko w obudowie retro z mocniejszymi głośnikami.  
Prawdą jest powiedzenie że: “Potrzeba matką wynalazków” i tak powstała wersja V1.5 która obok funkcji porannego radia posiada funkcję nocnej lampki 😃 +update kodu  
Bazą projektu stał się głośnik Esperanza EP131 który posiadał już w sobie diody RGB (niestety dawały zbyt małe światło i zostały wymienione na ring 24 led).

Chcąc zbudować podobny smart głośnik potrzebujesz:

- esp32 devkitc V4
- moduł MAX98357A
- mikrofon INMP441 MEMS I2S
- konwenter poziomów logicznych (zdania mogą być podzielone czy jest wymagany)
- wspomniany głośnik Esperanza EP131
- tact switch 12x12
- led ring 24 RGB
- buzzer
- gniazdo USB + kabelek
- obudowę w której trzeba wywiercić otwór na mikrofon i gniazdo zasilania  
[obudowa.zip](https://forum.arturhome.pl/uploads/short-url/7SceYIsO1EYFkcX6o67Zabf1bBz.zip) (63,4 KB)

Budowa głośnika:

 ![schemat v1.5](https://forum.arturhome.pl/uploads/default/original/3X/c/a/ca21d51daf1e51681ff0ed93190a02887331f58a.jpeg)

Głównym problemem poprzedniego projektu było rozpoczęcie nadsłuchu po ponownym uruchomieniu oraz uśpienie mikrofonu. Wprowadziłem do kodu skrypt który eliminuje ten problem.

YAML do projektu:

```auto
esphome:
  name: "esp-speaker"
  friendly_name: "esp-speaker"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXX"

ota:
  password: "XXXXXXXXXXXX"

wifi:
  ssid: "XXXXXXXX"
  password: "XXXXXXXXXXx"
  fast_connect: on
  on_connect:
    - script.execute: start
    - delay: 5s
    - switch.turn_on: green
    - script.execute: restarter
    - delay: 1s
    - switch.turn_off: green

web_server:
   port: 80

captive_portal:

light:
  - platform: fastled_clockless
    default_transition_length: 0.5s
    id: ring
    chipset: WS2811
    pin: GPIO23
    num_leds: 24
    rgb_order: GRB
    name: "FastLED WS2811 Light"

binary_sensor:
  - platform: gpio
    pin: 
      number: 18
      mode: INPUT_PULLUP
      inverted: false
    name: Button
    on_press:
      then:
       if:
         condition:
           media_player.is_playing: player
         then:
           - media_player.stop: player
         else:
            - switch.toggle: Lampka
  

output:
  - platform: ledc
    pin: GPIO19
    id: rtttl_out

rtttl:
  output: rtttl_out
  id: my_rtttl

i2s_audio:
  - id: i2s_mic
    i2s_lrclk_pin: GPIO22 #WS
    i2s_bclk_pin: GPIO21 #SCK
  - id: i2s_out
    i2s_lrclk_pin: GPIO32 #LRCLK
    i2s_bclk_pin: GPIO27 #BLCK

microphone:
  - platform: i2s_audio
    id: mikrofon
    adc_type: external 
    channel: right
    bits_per_sample: 32bit
    i2s_audio_id: i2s_mic 
    i2s_din_pin: GPIO4 #DIN,SDIN,SD,SDATA
    pdm: false
        
voice_assistant:
  id: va
  microphone: mikrofon
  use_wake_word: true
  #noise_suppression_level: 1
  auto_gain: 31dBFS
  on_listening:
    - rtttl.play: 'two_short:d=4,o=5,b=100:16e6,16e6'
    - switch.turn_on: green
    - delay: 3s
    - switch.turn_off: green

    
media_player:
  - platform: i2s_audio
    id: player
    name: ESP Media Player
    dac_type: external
    i2s_audio_id: i2s_out
    mode: mono
    i2s_dout_pin: GPIO2 #DIN,SDIN,SD,SDATA
    on_play:
      - logger.log: "playing"
      - switch.turn_off: use_wake_word
    on_pause:
      - logger.log: "paused"
      - switch.turn_on: use_wake_word
    on_idle:
      - logger.log: "idle"
      - switch.turn_on: use_wake_word

switch:
  - platform: template
    name: Use wake word
    id: use_wake_word
    optimistic: true
    restore_mode: RESTORE_DEFAULT_ON
    entity_category: config
    on_turn_on:
      - lambda: id(va).set_use_wake_word(true);
      - if:
          condition:
            not:
              - voice_assistant.is_running
          then:
            - voice_assistant.start_continuous
    on_turn_off:
      - voice_assistant.stop
      - lambda: id(va).set_use_wake_word(false);

  - platform: template
    name: Lampka
    id: Lampka
    optimistic: true
    on_turn_on:
      - lambda: id(ring).turn_on().set_rgb(0.99, 1.00, 0.66).perform();    
    on_turn_off:
      - lambda: id(ring).turn_off().perform(); 

  - platform: template
    name: Green
    id: green
    optimistic: true
    on_turn_on:
      - lambda: id(ring).turn_on().set_rgb(0.11, 1.00, 0.08).perform();    
    on_turn_off:
      - lambda: id(ring).turn_off().perform();  

  - platform: template
    name: Blue
    id: blue
    optimistic: true
    on_turn_on:
      - lambda: id(ring).turn_on().set_rgb(0.05, 0.45, 1.00).perform();    
    on_turn_off:
      - lambda: id(ring).turn_off().perform();   

  - platform: template
    name: Red
    id: red
    optimistic: true
    on_turn_on:
      - lambda: id(ring).turn_on().set_rgb(1.00, 0.30, 0.03).perform();    
    on_turn_off:
      - lambda: id(ring).turn_off().perform();  

interval:
  - interval: 300s
    then:
     if:
      condition:
          media_player.is_playing: player
      then:
         - logger.log: "restarter stopped"
      else:
          - script.execute: restarter

script:
  - id: start
    then:
    - wait_until:
       wifi.connected:
    - logger.log: "polaczono"
    - media_player.volume_set: !lambda "return 0.5;"
    - switch.turn_on: blue
    - delay: 3s
    - switch.turn_off: blue

  - id: restarter
    then:
     - switch.turn_off: use_wake_word     
     - delay: 1s
     - switch.turn_on: use_wake_word
     - delay: 1s
     - switch.turn_off: use_wake_word     
     - delay: 1s
     - switch.turn_on: use_wake_word

```

Od nagrania filmu pokazowego został też poprawiona funkcja przycisku który stopuje radio lub wyłącza lampkę.

[![](https://img.youtube.com/vi/eh8nxD479kk/maxresdefault.jpg "ESP32 Smart speaker Home Assistant Voice control") ](https://www.youtube.com/watch?v=eh8nxD479kk)

Na zdjęciu widać gdzie znajduje się przycisk dzięki czemu włączenie/ wyłączenie lampki nocnej odbywa się przez delikatne dotknięcie głośnika.

 ![IMG_20231228_194749](https://forum.arturhome.pl/uploads/default/original/3X/3/1/31672bdfca94b89f50a6560a5a75add4ed5040b5.jpeg)

Podsumowanie:  
Projekt działa u mnie od kilkunastu dni bez większych problemów i myślę że zostanie już w moim salonie na dobre. Wprowadziłem kilka poprawek w stosunku do starszej wersji która zaczynała mnie irytować swoimi niedociągnięciami. Podczas testowania zauważyłem też że najlepszą jakość rozpoznawania dźwięku jest wtedy gdy cały mikrofon MEMS jest odsłonięty dlatego w swojej obudowie wyciągnąłem go na zewnątrz i zasłoniłem wydrukowaną kratką która nie każdemu może przypaść do gustu 😅. Dzięki temu wake word działa mi do 4m. Znaczna część kodu została uproszczona bo wprowadzanie dodatkowych stanów do voice assistant takich jak **on\_stt\_end** , **on\_end** czy **on\_error** wprowadzało niepożądane działanie głośnika. To samo powodowało wgranie biblioteki neopixel więc zdecydowałem się fastled.

Życzę wszystkim dobrej zabawy oraz samych udanych projektów!

---

<div class="post-metadata">

**Autor:** ![Kraszewsky1](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/k/b5ac83/32.png) [@Kraszewsky1](https://forum.arturhome.pl/u/Kraszewsky1)\
**Data wpisu:** [31 Grudzień 2023 07:22 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/2 "2023-12-31T07:22:29Z")

</div>

Pokaż więcej zdjęć 🙂  
Czuję że będziesz miał następców a to ułatwi im życie. 🙂

---

<div class="post-metadata">

**Autor:** ![boskikak](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/b/74df32/32.png) [@boskikak](https://forum.arturhome.pl/u/boskikak)\
**Data wpisu:** [31 Grudzień 2023 08:51 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/3 "2023-12-31T08:51:58Z")

</div>

![IMG_20231231_094805](https://forum.arturhome.pl/uploads/default/original/3X/1/2/12033c7c67b9b35bbed3f0b92cfb776d6bde874b.jpeg)  
 ![IMG_20231231_094744](https://forum.arturhome.pl/uploads/default/original/3X/5/9/59b48e77a94ed8479207123ae686bb4c546eeb71.jpeg)  
 ![IMG_20231231_094710](https://forum.arturhome.pl/uploads/default/original/3X/c/e/ce2759fa99935d0b14ce2849d38b43044d8e9bed.jpeg)  
 ![IMG_20231231_094646](https://forum.arturhome.pl/uploads/default/original/3X/6/7/678434a95c8bba5de20271ce100ebe1d964350ce.jpeg)  
 ![IMG_20231231_094626](https://forum.arturhome.pl/uploads/default/original/3X/5/1/51cff178981203d287416e3f80da8de2790573a1.jpeg)

Miałem jeszcze zdjęcia z rozbiórki głośnika ale po drodze wychodziły nowe przeróbki i pomysły więc nie mają sensu 😉

---

<div class="post-metadata">

**Autor:** ![domex](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/d/cc9497/32.png) [@domex](https://forum.arturhome.pl/u/domex)\
**Data wpisu:** [26 Styczeń 2024 18:17 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/4 "2024-01-26T18:17:00Z")

</div>

Co powinienem doinstalowac do HA żeby działalo to tak jak u Ciebie.

---

<div class="post-metadata">

**Autor:** ![boskikak](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/b/74df32/32.png) [@boskikak](https://forum.arturhome.pl/u/boskikak)\
**Data wpisu:** [26 Styczeń 2024 19:28 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/5 "2024-01-26T19:28:33Z")

</div>

Musisz mieć asystenta od nabu casy (czyli płatna opcja) i zainstalowanego wake worda z addonow. Płatny asystent nie jest konieczny ale ten akurat działa najlepiej i najszybciej

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [24 Lipiec 2024 00:38 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/7 "2024-07-24T00:38:12Z")

</div>

Jeśli zbudujesz sobie wersję z 2 przetwornikami i2s z których jeden będzie skonfigurowany dla lewego kanału a drugi dla prawego lub lepiej używając DAC i2s stereo (oraz zbudujesz totalnie inną obudowę aby zapewniała jakąś choćby minimalną bazę stereo), to czemu nie?

[https://community.home-assistant.io/t/i2s-esp32-stereo-output-two-max98357a/573741/3](https://community.home-assistant.io/t/i2s-esp32-stereo-output-two-max98357a/573741/3?u=szopen)

---

<div class="post-metadata">

**Autor:** ![macek](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/macek/32/1647_2.png) [@macek](https://forum.arturhome.pl/u/macek)\
**Data wpisu:** [27 Lipiec 2024 18:56 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/8 "2024-07-27T18:56:19Z")

</div>

Dzięki tej integracji: [GitHub - jn3va/ESPHomeXTronicalWAVPlayer: How to use XTronical's wav player from ESPHome](https://github.com/jn3va/ESPHomeXTronicalWAVPlayer) można odtworzyć lokalnie (bezpośrednio z ESPHome) pliki typu wav, zastanawiam się czy istnieje taka możliwość na smart głośniku w konfiguracji przygotowanej przez @boskikak.

---

<div class="post-metadata">

**Autor:** ![boskikak](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/b/74df32/32.png) [@boskikak](https://forum.arturhome.pl/u/boskikak)\
**Data wpisu:** [27 Lipiec 2024 19:31 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/9 "2024-07-27T19:31:42Z")

</div>

Aktualnie drukuje się obudowa do wersji v2.0 gdzie zrezygnowałem już z głośnika 😉 w praktyce trochę ta konfiguracja była męcząca a odtwarzanie radia stało się losowe (działa albo nie). Jak znajdę chwilę czasu to mogę sprawdzić to repo na starym głośniku 😀

---

<div class="post-metadata">

**Autor:** ![macek](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/macek/32/1647_2.png) [@macek](https://forum.arturhome.pl/u/macek)\
**Data wpisu:** [28 Lipiec 2024 06:56 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/10 "2024-07-28T06:56:32Z")

</div>

Jeszcze w ten sposób można odtworzyć plik lokalnie z ESPHome: [Create audio clip files for use with I²S Speakers — ESPHome](https://esphome.io/guides/audio_clips_for_i2s.html).

---

<div class="post-metadata">

**Autor:** ![Kraszewsky1](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/k/b5ac83/32.png) [@Kraszewsky1](https://forum.arturhome.pl/u/Kraszewsky1)\
**Data wpisu:** [12 Październik 2024 19:04 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/11 "2024-10-12T19:04:20Z")

</div>

Z racji tego że przechodzę na czyste HA to pytanie.  
Próbował ktoś rozwinąć projekt i zrobić coś w stylu dostawki do głośników z Jack 3.5mm?  
Bez mikrofonu, tylko odtwarzacz. 🙂

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [12 Październik 2024 19:12 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/12 "2024-10-12T19:12:26Z")

</div>

> [@Kraszewsky1](#):
>
> Z racji tego że przechodzę na czyste HA  
> […]  
> Bez mikrofonu, tylko odtwarzacz

To nie potrzeba do tego ESP, wystarcza karta audio hosta #local-vlc #vlc  
 ![vlc-2024-10-12_21-11](https://forum.arturhome.pl/uploads/default/original/3X/7/4/7481d41ca18d01fc2ad265ae2a48bc742d82efe0.png)

> **[VLC media player via Telnet](https://www.home-assistant.io/integrations/vlc_telnet)**
>
> Instructions on how to integrate VLC media player into Home Assistant using the telnet interface.

---

<div class="post-metadata">

**Autor:** ![boskikak](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/b/74df32/32.png) [@boskikak](https://forum.arturhome.pl/u/boskikak)\
**Data wpisu:** [12 Październik 2024 19:27 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/13 "2024-10-12T19:27:50Z")

</div>

Wystarczyło by zastąpić moduł MAX modułem PCM5102A. Chciałbym go wypróbować razem z mikrofonami w trybie stereo ale na razie nie dysponuje wolnym czasem 😜  
Czekamy na długie zimowe wieczory 😀

---

<div class="post-metadata">

**Autor:** ![szopen](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/szopen/32/1093_2.png) [@szopen](https://forum.arturhome.pl/u/szopen)\
**Data wpisu:** [12 Październik 2024 19:30 UTC](https://forum.arturhome.pl/t/esp32-smart-glosnik-v1-5/11195/14 "2024-10-12T19:30:28Z")

</div>

A tak z innej beczki w nadchodzącym (w środę) wydaniu ESPHome 2024.10.0 wejdzie obsługa DAC Texas Instruments TLV320AIC3204 (w skrócie AIC3204), ale nie znam żadnej gotowej płytki, która by go miała zamontowanego.

> **[slaa557.pdf](https://www.ti.com/lit/ml/slaa557/slaa557.pdf)**
>
> 1116.47 KB
