Dźwięk w urządzeniach z ESPHome to dotąd przeważnie magistrala I2S: płytka ze wzmacniaczem albo przetwornikiem cyfrowo-analogowym na wyjściu i mikrofon MEMS na wejściu, podłączone do właściwych pinów. Nowy komponent usb_audio otwiera drugą drogę. ESP32 z portem USB OTG może działać jako host USB dla urządzeń zgodnych z klasą USB Audio, czyli kart dźwiękowych, przetworników USB, mikrofonów USB i zestawów głośnomówiących. Zgłoszenie zmian otworzył w listopadzie 2025 roku użytkownik GitHuba ab-tools, a J. Nick Koston (bdraco) scalił je do gałęzi rozwojowej 19 października o 5:45 czasu polskiego. Zamyka ono prośbę o tę funkcję z sierpnia 2024 roku i jest przewidziane na ESPHome 2026.11. Zgłoszenie z dokumentacją wciąż czeka na scalenie.
Na jakich układach i co potrafi
Potrzebny jest układ z USB OTG: ESP32-S2, ESP32-S3, ESP32-S31, ESP32-P4 albo ESP32-H4. Komponent korzysta ze sterownika usb_host_uac od Espressifa i sam ładuje komponent usb_host, więc port można dzielić z innymi komponentami hosta USB, na przykład z usb_uart.
Są dwie platformy. Głośnik usb_audio odtwarza dźwięk na podłączonym urządzeniu i przekazuje mu głośność oraz wyciszenie, jeśli urządzenie ma takie regulacje. Jeśli ich nie ma, ESPHome zapisze ostrzeżenie w dzienniku, a ustawienie nic nie zmieni. Mikrofon usb_audio nagrywa z urządzenia. Jeden blok usb_audio obsługuje jeden głośnik i jeden mikrofon.
usb_audio:
speaker:
- platform: usb_audio
id: usb_speaker
sample_rate: 48000
bits_per_sample: 16bit
num_channels: 2
microphone:
- platform: usb_audio
id: usb_mic
sample_rate: 16000
bits_per_sample: 16bit
num_channels: 1
Do muzyki i komunikatów dokumentacja łączy głośnik USB z istniejącym odtwarzaczem multimediów (speaker media player) i mikserem. Asystent głosowy i wykrywanie słowa wybudzającego (micro_wake_word) wymagają dźwięku 16 kHz. Jeśli mikrofon USB nie obsługuje tej częstotliwości, nagrywasz w takiej, którą obsługuje, a przed komponentami głosowymi wstawiasz mikrofon resampler, który przelicza próbkowanie.
Jeden format na strumień
Każdy strumień działa w jednym, stałym formacie: częstotliwość próbkowania od 8000 do 96 000 Hz, 8, 16, 24 albo 32 bity, mono albo stereo. Głośnik domyślnie pracuje w 48 kHz, 16 bitach i stereo, a mikrofon w 16 kHz, 16 bitach i mono. Jeśli urządzenie nie obsługuje ustawionego formatu, strumień się nie uruchomi, a w dzienniku pojawi się lista formatów, które obsługuje. Urządzenia, które zapisują 24-bitowe próbki w 4 bajtach, w tym formacie nie zadziałają.
W ESP32-S2 i ESP32-S3 kontroler USB ma do dyspozycji 800 bajtów pamięci FIFO na wszystkie pakiety. Już głośnik 48 kHz, 16 bitów, stereo wymaga ESP-IDF 5.5 lub nowszego. Zestaw, który w ogóle się nie mieści, na przykład głośnik i mikrofon jednocześnie w formacie 96 kHz, 32 bity, stereo, ESPHome odrzuci już przy sprawdzaniu konfiguracji.
Przerwy i ograniczenia
- Zapis do pamięci flash wstrzymuje zadanie, które na bieżąco uzupełnia kolejkę dźwięku na magistrali, więc słychać krótką przerwę. Dokumentacja wymienia licznik uruchomień komponentu
safe_mode, zapisywany mniej więcej minutę po każdym starcie, zapisywanie ustawień i aktualizacje OTA. - Uruchomienie strumienia na urządzeniu USB trwa około sekundy.
- Urządzenie można podłączać i odłączać w trakcie pracy. Po odłączeniu głośnik przestaje grać, a mikrofon po ponownym podłączeniu sam wznawia nagrywanie.
- Dokumentacja powtarza zwykłe ostrzeżenie, że komponenty audio zużywają dużo pamięci RAM i mocy procesora, a komponenty Bluetooth potrafią sprawiać przy nich kłopoty.
Zmiana ma testy automatyczne, ale na liście kontrolnej zgłoszenia nie zaznaczono pola, że autor sprawdził ją lokalnie. Lepiej traktować ją jako pierwszą wersję i poczekać na doświadczenia testerów wersji beta.