Smart głośnik dla każdego ESP32

Cześć!
Bardzo dużo pomysłów i projektów zaczerpnąłem z forum i z internetu dlatego też chciałbym zostawić coś od siebie. Od dłuższego czasu walczyłem ze sterowaniem głosowym w swoim domu, testowałem różne rozwiązania i różnych asystentów ale ciągle mi czegoś brakowało. Oliwy do ognia dolał mój terminal w którym padło gniazdo jack i musiałem zrezygnować z odtwarzacza VLC. Zakupiłem głośnik bluetooth LECKIE DJ Roxx dosłownie za pare groszy i wymyśliłem że go przerobie na głośnik który zagada z HA.
Przejdźmy do konkretów:
Projekt jest bardzo prosty i możesz go zamknąć w kilkudziesięciu złotych a funkcjonalność jak przynajmniej za 200zł :smiley: Nie jestem elektronikiem, tym bardziej programistą więc istnieje prawdopodobieństwo że czegoś w układzie brakuje, dlatego też zostawie tutaj ten projekt jako otwarty (z możliwością nieskończonej rozbudowy). Co potrzebujemy:

  • głośnik 3-5W
  • ESP32 lolin32
  • buzzer
  • moduł MAX98357A
  • mikrofon INMP441 MEMS I2S
  • asystenta głosowego w HA (ja korzystam z Nabu Casy bo wg mnie działa najlepiej)
  • postawionego Wake Worda w HA
  • umiejętność lutowania :slightly_smiling_face:

Swój głośnik wybebeszyłem i dodrukowałem dodatkową część obudowy żeby trochę zwiększyć głośnik i miejsce na kable. Mój układ zbudowałem na płytce prototypowej bo akurat w obudowie miałem miejsce gdzie się idealnie wkomponowała.

Schemat prezentuje się tak:

YAML:

  name: esp-remote
  friendly_name: esp-remote

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

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

ota:
  password: "XXXXXXXXX"


wifi:
  ssid: "XXXXXXx"
  password: "XXXXXXXX"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Remote Fallback Hotspot"
    password: "XXXXX"

captive_portal:


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

rtttl:
  output: rtttl_out
  id: my_rtttl

i2s_audio:
  - id: i2s_mic
    i2s_lrclk_pin: GPIO25  #LRCLK,WS
    i2s_bclk_pin: GPIO33   #BLCK,SCK
  - id: i2s_out
    i2s_lrclk_pin: GPIO14 #LRCLK,WS
    i2s_bclk_pin: GPIO12  #BLCK,SCK

microphone:
  - platform: i2s_audio
    id: mikrofon
    adc_type: external 
    i2s_audio_id: i2s_mic 
    i2s_din_pin: GPIO32   #DIN,SDIN,SD,SDATA
    pdm: false

        
voice_assistant:
  id: va
  microphone: mikrofon
  use_wake_word: true
  on_listening:
      - rtttl.play: 'two_short:d=4,o=5,b=100:16e6,16e6'

media_player:
  - platform: i2s_audio
    id: player
    name: ESP Media Player
    dac_type: external
    i2s_audio_id: i2s_out
    i2s_dout_pin: GPIO18 #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); 

Projekt nie jest doskonały ale działa. Generalnie głośnik służy mi jako radio z możliwością głosowego sterowania domem i to stwarza największy problem którego nie pokonałem. Asystent działa poprawnie gdy media player jest w stanie IDLE a stan PLAY wyłącza Wake Worda. Przy działającym ciągle nadsłuchiwaniu głośnik trzeszczy (możecie to sprawdzić usuwając daną linijkę kodu). Zachęcam was do zabawy i rozwijania projektu! POWODZENIA

7 polubień

Super projekt.
Tylko dodać panel LED aby wyświetlać godzinę i jakieś inne informacje i więcej nie potrzeba.

Fajnie było by gdyby zrobić taką dostawne ale z wyjściem Jack na głośnik wtedy można by podpiąć coś większego :grinning::grinning:

Wersja V2 będzie już na jack i w drewnianej obudowie jak się uda coś upolować ładnego :wink:

1 polubienie

Bardzo fajny projekt! Może by sie udało ogarnąć jakoś by robił za bramkę przez złącze minijack do ampli tunera do odtwarzania np. spotyfi?

Myślę że dało by się to ogarnąć ale trzeba przy tym przysiąść. Samo audio przez Jacka z esp nie będzie problemem ale nie wiem jak z zasilaniem większych głośników. Będę jeszcze rozbudowywał projekt to może uda się zrobić nawet skrzynkę która podepniesz pod każdy głośnik czy kino domowe :wink:

Gratuluję projektu!!!
Może zamiast modułu MAX98357A można wykorzystać VS1003B który ma wbudowane wyjście jack.
Kiedyś bawiłem się projektem budowy radia internetowego z tej stronki działało to ok, dźwięk też był dobry.

1 polubienie
1 polubienie

Kiedyś był chromcast audio, teraz nie ma więc taka. Opcja była by super rozwiązaniem. Z jednej strony głośnik do komend a z drugiej wyjście Jack z opcją podłączenia amplitunera

No i to jest jakiś pomysł :grin: trzeba kupić i sprawdzić jak to śmiga

Czekam na wersję V2 :smiley:
Fajnie by było gdyby udało się to spiąć z Ai-Speaker. Wtedy ten projekt dużo by zyskał. :slightly_smiling_face::slightly_smiling_face::slightly_smiling_face:

1 polubienie

Fajna sprawa!

Czy wiecie może jak do głośnika i mikrofonu zrobionego na esp32 można włączyć opcję wake word (żeby działało jak w atom echo)?

Jeśli się powołujesz na coś to linkuj do zasobów z opisem.

Na 99,9% da się to zrobić identycznie jeśli do tego ES32 podepniesz odpowiednie peryferia i zrobisz resztę tak samo

Musisz sobie zainstalować openWakeWord i będzie działać

Lepiej od razu zapytać zamiast poszukać na forum a wystarczyło poszukać po “atom” i wszystko jest opisane - M5Stack Atom Echo.

widząc odpowiedzi - doprecyzuję pytanie:
Próbuję zrobić asystenta w oparciu o płytkę esp32 wrover.
Czy do konfiguracji ESPHome w sekcji voice_assistant:
wystarczy dodać use_wake_word: true czy jest jeszcze coś co należy uwzględnić w konfiguracji ESPHome?

Kolejna wersja smart głośnika ze schematem obudowy do wydrukowania:

Przeglądając różne projekty trafiłem na taki poradnik.
Wykorzystuje moduł audio z Jack stereo więc już coś.
Wtedy można podpiąć do każdego większego sprzętu.

Jak coś jestem chętny w pomocy nad projektem obudowy :slightly_smiling_face::slightly_smiling_face:
Można zrobić wersję z głośnikami i dostawne do innych głośników.

Wersja v1.5 poszła nieco w innym kierunku niż zakładałem. Jak rozwiąże problem niedziałającego mikrofonu to jeszcze przed świętami wrzucę co z tego wyszło :wink:

Napisz jaki masz problem może ktoś pomoże :slightly_smiling_face::slightly_smiling_face:

Problem z mikrofonem takim samym jak w tym projekcie ale na płytce ESP32 deckitc v4. Mam za małego skilla żeby dogrywać te wszystkie bit rate na i2s. Oczywiście już przyzwyczajony jestem że cały internet nie ma takich głupich problemów jak ja więc nie mam nawet punktu odniesienia jak to pozmieniać żeby zaczął działać. Postanowiłem wrócić do sprawdzonego już lolina32 który zawsze mi działał plug and Play :wink: