16 października 2026 w ESPHome pojawiła się obsługa pełnego dupleksu w komponencie i2s_audio. Mikrofon i głośnik, które dzielą jeden port I2S, mogą działać naraz, gdy na tej magistrali ustawisz full_duplex: true. Dotąd uruchomienie jednej strony blokowało drugą, więc urządzenie głosowe z jednym zewnętrznym kodekiem audio nie mogło jednocześnie nagrywać i odtwarzać odpowiedzi.
Zmiana weszła do gałęzi dev (wersja 2026.11.0-dev) jako pull request #19959 Remco van Essena, a tego samego dnia dołączono dokumentację. 17 października poprawka usunęła pętlę ponownych startów, przez którą na części płytek głośnik milczał.
Co zmienia się w oprogramowaniu
ESP-IDF dzieli zegar bitowy i zegar słowa między kanałem nadawczym a odbiorczym tylko wtedy, gdy oba kanały powstają w jednym wywołaniu. Magistrala I2S tworzy teraz te dwa kanały raz podczas uruchamiania i trzyma je przez cały czas pracy urządzenia. Mikrofon i głośnik biorą kanał RX albo TX na czas pracy i oddają go po zatrzymaniu. Strona odbiorcza utrzymuje wspólne zegary, gdy któraś ze stron jest aktywna, więc odtwarzanie działa także przy wyłączonym mikrofonie i na odwrót.
Ponieważ kanał konfiguruje się tylko raz, głośnik musi dostać dźwięk dokładnie w skonfigurowanej częstotliwości próbkowania, głębi bitowej i układzie kanałów. Strumień w innym formacie jest odrzucany z czytelnym wpisem w dzienniku. Przed głośnikiem warto postawić głośnik resampler, który dopasuje media do tego stałego formatu. To samo dotyczy przechwytywania dla słowa wybudzania i asystenta głosowego: mikrofon resampler może zejść z 48 kHz do 16 kHz mono, podczas gdy ścieżka odtwarzania zostaje na częstotliwości magistrali.
Walidacja odrzuca niebezpieczne kombinacje. Magistrala w pełnym dupleksie wymaga dokładnie jednego standardowego (nie-PDM) mikrofonu i2s_audio, co najmniej jednego głośnika z zewnętrznym DAC, zgodnych wartości sample_rate, bits_per_sample, i2s_mode, use_apll i mclk_multiple po obu stronach oraz zgodnego pinu wyjścia, kanału i formatu komunikacji na wszystkich głośnikach, które dzielą jeden kanał TX. Bez full_duplex zostaje stary, wyłączający się wzajemnie tryb; nowego kodu wtedy w ogóle się nie kompiluje.
Dla kogo to ma znaczenie
Najwięcej zyskają budowniczowie satelit głosowych i małych paneli ściennych na ESP32, w których jeden kodek I2S obsługuje i mikrofon, i głośnik. Takie płytki potrafiły już odtwarzać odpowiedzi Assist albo media, ale ciągłe słuchanie albo przerwanie odpowiedzi wymagało drugiej ścieżki audio albo drugiego układu. Pełny dupleks usuwa ten podział sprzętowy w kompilacjach ESP-IDF. Płytki ESP32 na frameworku Arduino zostają poza tą ścieżką.
Funkcja jest w drzewie rozwojowym pod wydanie 2026.11. Żeby sprawdzić ją przed stabilnym tagiem, zainstaluj kanał dev ESPHome albo poczekaj na miesięczną betę, dodaj full_duplex: true na wspólnej magistrali i2s_audio i, gdy częstotliwości się różnią, przepuść mikrofon i głośnik przez resamplery.