Skip to content

Latest commit

 

History

History
48 lines (36 loc) · 4.35 KB

README.md

File metadata and controls

48 lines (36 loc) · 4.35 KB

Клиент на ESP32

⚠️ Данный проект работает только с оригинальными ESP32.

ESP32S2 и ESP32S3 не поддерживаются.

Мотивация

Цель данного подпроекта - обеспечение дешёвого решения в первую очередь для сценариев, когда нужно разместить несколько интерфейсов голосового ассистента в разных помещениях. Это достигается за счёт использования достаточно дешёвых устройств на контроллере ESP32 и переноса наиболее трудоёмких операций (распознание и синтез голоса, разбор команд и взаимодействие с другими системами для их выполнения) на один общий сервер.

Соединение модулей

В оригинальной конструкции используется модуль с микрофоном INMP441 для ввода звука и модуль с усилителем MAX98357A для вывода, однако, скорее всего, подойдут любые другие I2S микрофоны и DAC.

На следующей иллюстрации изображено соединение модулей:

Схема соединения модулей

Питание осуществляется через micro-USB порт на плате с контроллером.

К выходу модуля MAX98357A необходимо подключить динамик (не отмечен на схеме).

Пунктиром отмечены соединения для подключения дополнительного микрофона (на момент написания документа, поддержка в прошивке не реализована).

TODOs

  • доделать поддержку аналоговых микрофонов через встроенный АЦП. Это сделало бы изготовление клиентского устройства дешевле и доступнее. В текущей версии она почти работает, за исключением отсутствия возможности установить адекватную частоту дискретизации.
  • распознавать триггерную фразу на клиенте
  • добавить веб-интерфейс для настроек вместо настройки через config.h. Скорее всего, работать должно примерно так: добавляется отдельная аппаратная кнопка, если она нажата при загрузке, то устройство переходит в режим WiFi точки доступа и HTTP-сервера
  • добавить поддержку второго микрофона (для расширения диаграммы направленности)
  • добавить автоматическую подстройку чувствительности микрофона. INMP441 передаёт 24х битные семплы, но текущая прошивка использует только 16 бит, в итоге часть потенциально полезных данных теряется. Можно получать все 24 бита и если сигнал достаточно тихий, то домножать их на некоторое значение перед тем, как взять старшие 16 бит.
  • использовать сжатие при передаче аудио-данных с клиента на сервер
  • добавить поддержку какого-нибудь индикатора и/или дисплея (с возможностью передавать изображения для него с сервера) на клиенте
  • переписать прошивку на чём-нибудь более серьёзном, чем Arduino. Скорее всего, на Rust.
  • разработать дизайн корпуса для 3d-печати