За допомогою вбудованої в Home Assistant сутності Media Player можна зробити оповіщення, програвач музики чи інтернет радіо. І для цього можна використовувати телевізор, wifi колонки та DLNA пристрої. Подібний пристрій можна також зробити самостійно на платі розробника з мікроконтролером ESP32. Це бюджетний варіант, але якість звука буде хорошою завдяки використанню I2S підсилювача звуку MAX98357A.
Плата розробника на ESP32 — це недорога система з малим енергоспоживанням на мікроконтролерах із вбудованим Wi-Fi та Bluetooth. Також вона має 2 інтерфейси I2S.
Integrated Inter-IC Sound Bus (I2S) – це стандарт інтерфейсу послідовної шини, який використовується для підключення цифрових аудіопристроїв. Його виробляє Philips Semiconductor. Цей інтерфейс найчастіше використовується аудіо компонентами АЦП і ЦАП.
Модуль MAX98357A має цифро-аналоговий перетворювач та цифровий підсилювач класу D, який використовує цифровий аудіоінтерфейс або I 2 S для зв’язку з блоками мікроконтролера.
Переваги модуля MAX98357A I2S перераховані нижче:
- Ефективність 92%.
- Може забезпечити вихідну потужність 3,2 Вт при навантаженні 4 Ом при напрузі 5 В
- Зменшення шуму клацання та спливаючого вікна
- Захист від короткого замикання та термозахист
- Підтримує лівий, правий або (Лівий/2 + Правий/2) вихід (по замовчуванню (L+R)/2)
- Напруга живлення може бути від 2,7 В до 5,5 В.
- Вбудований термоконтроль.
- Подавлення клацання.
Модуль MAX98357A I2S показаний нижче.
Схема з’єднання з esp32.
Опис контактів та з’єднання з esp32.
MAX98357a | ESP32 | Опис |
LRC (WS) | GPIO33 | Left Rigth Clock |
BCLK (SCK) | GPIO22 | Bit Clock Input. Вхід тактової частоти. |
DIN | GPIO19 | Digital Data input. Вхід даних. |
GAIN | Підсилення. Підтягуючи до GND чи VIN за допомогою резистора можна отримати від 3 до 15dB підсилення. | |
SD | Вимкнення. Вибір каналу. | |
GND | GND | земля |
VIN | 5V | Напруга живлення. |
Ці модулі можна придбати на aliexpress- MAX98375A, плата розробника ESP32 та гучномовці.
ESPHOME.
Частина програми, яка відповідає за створення медіа програвача.
i2s_audio:
i2s_lrclk_pin: GPIO33
i2s_bclk_pin: GPIO19
media_player:
- platform: i2s_audio
name: ESPHome I2S Media Player
dac_type: external
i2s_dout_pin: GPIO22
mode: mono
Після додавання цього коду, компіляції та перезапуску в Home Assistant з’явитсся сутність з медіа програвачем, яку можна використовувати в автоматизаціях.
GAIN
GAIN – налаштування підсилення. Ви можете отримати підсилення 3 дБ, 6 дБ, 9 дБ, 12 дБ або 15 дБ.
-15 дБ, якщо між GAIN і GND підключено резистор 100K
-12 дБ, якщо GAIN підключено безпосередньо до GND
– 9 дБ, якщо GAIN ні до чого не підключено (це значення за замовчуванням)
– 6 дБ, якщо GAIN підключено безпосередньо до Vin
– 3 дБ, якщо резистор 100K підключений між GAIN і Vin.
Таким чином, посилення за замовчуванням становить 9 дБ, але ви можете легко змінити його, налаштувавши підключення до контакту GAIN. Зверніть увагу
може знадобитися виконати скидання живлення, щоб відрегулювати посилення.
SD / MODE
Цей контакт використовується для режиму вимкнення, але також використовується для налаштування каналу виведення.
– Якщо SD підключено до GND напряму (напруга нижче 0,16 В), підсилювач вимикається.
– Якщо напруга на SD становить від 0,16 В до 0,77 В, тоді на виході буде (Лівий + Правий)/2, тобто середнє стерео.
– Якщо напруга на SD становить від 0,77 В до 1,4 В, то на виході буде лише правий канал.
– Якщо напруга на SD вища за 1,4 В, то вихід є лівим каналом.
Це доповнюється внутрішнім підтягуючим резистором 100 КБ на SD, тому вам потрібно використовувати підтягуючий резистор на SD, щоб збалансувати
з внутрішнім опором 100K.
В автоматизаціях Home Assistant можна використовувати сервіс tts.google_translate_say для озвучування температури на вулиці. Не забудьте замінити назву сутності media_player на свою.
service: tts.google_translate_say
data:
cache: false
entity_id: media_player.cooler_ble_speaker_esphome_i2s_media_player
message: " Зараз на вулиці {{states.weather.home.state}} та {{state_attr('weather.home','temperature')| round (0)}} градусів Цельсію. Найвища температура {{state_attr('weather.home', 'forecast')[0]['temperature']| round (0)}}, а найнижча {{state_attr('weather.home', 'forecast')[0]['templow']| round (0)}}"
Не забудьте прописати мову в Home Assistant configuration.yaml наступним чином:
tts:
- platform: google_translate
language: "uk"