Картинка: freepik.com - vecstock
Картинка: freepik.com - vecstock

При построении разнообразных автоматизированных систем часто возникает потребность, чтобы эта система предоставляла какую-то обратную связь. 

В этой связи большинство идут самым простым путём: мигающие лампочки, светодиоды, мониторы разных мастей с выведением на них текстовой/графической информации…

Однако есть одна очень интересная тема, которую почему-то незаслуженно самодельщики обходят стороной — речь о микроконтроллерах!

Потому что, согласитесь, «мигание лампочек» — это, конечно, прекрасно и даже в некотором роде волшебно (особенно когда это происходит в первый раз в жизни и твоя программа наконец начинает работать :-) ). Но куда веселее, когда машина отвечает тебе голосом! :-) 

Поэтому посмотрим, какие здесь возможности имеются... 

Сразу хотел сказать, что этот вопрос сейчас передо мной стоит во весь рост, и я довольно плотно изучаю всё, что есть доступного на эту тему, с целью встраивания в своё решение*. Поэтому, если у вас будет что добавить к тому, что будет сказано ниже, думаю, это будет полезно для всех!

Итак...

*Будет одна мелкая серийная девайсина, общающаяся с владельцем :-) Может быть, если хорошо сложатся звёзды, об этом как-то даже и напишу позже... :-)

В истории техники и электроники есть, пожалуй, несколько тем, которые долгое время являлись мечтой, неким идеалом, к которому стремились. Многие из них уже в том или ином виде реализованы: компьютер в кармане (он уже есть — это смартфоны), компьютерная генерация фотореалистичных изображений — тоже в изобилии.

Причём, что интересно, последняя прошла через этап CG (Computer Generated), под которым раньше зачастую подразумевалось построение фотореалистичных изображений с помощью рендеринга — трассировки лучей с учётом свойств среды и материалов (над описанием моделей которых работали целые научные институты), — и перешла в следующую фазу: AI Generated, когда изображение получается уже даже без использования прежних подходов…

Летающие электродвигатели (о чём в начале девяностых ещё не было и речи), — и всё кардинально поменялось с появлением и широким распространением компактных, мощных редкоземельных магнитов, повсеместно внедрившихся в двигатели, — что позволило строить высокоэффективные летающие аппараты малого веса…

И среди подобных тем, к которым научно-техническое сообщество относится с повышенным интересом, безусловно, особое место занимают способы реализации голосового взаимодействия с компьютером — потому что это, по сути, квинтэссенция технического прогресса: общаться голосом с компьютером! :-) 

Радует, что к нашим дням эта проблема во многом решена, причём многими способами.

Где при этом, если не ставить себе цель отдачи голосовых команд (что, очевидно, существенно усложняет задачу), а ограничиться только генерацией речи, то задача многократно упрощается!

Благодаря этому подобные решения могут легко исполняться даже на маломощных микроконтроллерах.

Это, впрочем, не отрицает того, что задача распознавания голосовых команд может быть легко решена даже на микроконтроллерах — например, вот здесь вы можете найти «родное» решение от компании Espressif (ESP-Skainet) для локального распознавания голоса без какой-либо отсылки данных на сервер. 

Такой подход особенно интересен тем, что позволяет создать автономное решение с низким энергопотреблением, не требующее никакой связи с серверами: голосовой дверной звонок или «умный замок для двери», срабатывающие от команд владельца, становятся вполне реальными...

Однако вернёмся к нашему вопросу... 

Очевидно, что самым простым вариантом является воспроизведение предзаписанных фраз, которые хранятся в энергонезависимой памяти. 

Предварительные расчёты показывают, что во встроенную flash-память ESP32 может поместиться звуковой файл продолжительностью в районе 20-30 сек (16 бит, 22 кГц). Подробный мануал по работе с таким файлом можно найти здесь

Однако эту проблему можно в корне устранить, если использовать внешнюю SD-карту: при таком подходе фактический объём записанного звука может быть весьма произвольным (в практическом смысле — многократно превышающим то, что действительно нужно). Например, энтузиасты реализуют варианты решений с множеством доступных фраз или даже фрагментов музыки. Мануал, также пошаговый, есть тут.

Но это самый простой и очевидный вариант. 

Если хочется чего-то посложнее, то можно обратиться к уже готовым решениям, предоставляющим возможности синтеза речи. Одним из таких является библиотека Talkie, применяющая линейное предиктивное кодирование — способ хранения данных, который позволяет оперировать их небольшим объёмом за счёт того, что не запоминается каждый короткий фрагмент. Вместо этого каждый последующий фрагмент звука предсказывается исходя из того, какой звук воспроизводится в данный момент. Для воспроизведения речи используется модуляция изначального «гудения» с помощью фильтра, имеющего возможность быстро перестраиваться. Это похоже на то, как голосовые связки человека воспроизводят некий базовый звук, а уже остальной речевой аппарат (гортань, рот, язык и т. д.) модулирует это «гудение», превращая его в речь.

Такой способ позволяет генерировать машинную речь, данные для генерации которой требуют в десятки раз меньше места (килобайты), чем требовала бы настоящая записанная речь. Такой подход был широко распространён в 1970-1980-х годах. Так что использование подобного подхода сегодня, это некий «взгляд в прошлое». 

Кроме того, для микроконтроллеров это весьма простая задача, с которой справляются даже относительно слабые системы. 

Очевидным минусом такого подхода является «механический» голос, как у роботов, ввиду того что он не передаёт всех нюансов настоящего голоса.

С другой стороны, это может быть даже некой «фишкой»! ;-)

Насколько можно понять со слов поддерживающих проект, библиотека не позволяет воспроизводить произвольные слова и содержит лишь набор преднастроенных (более 1000) — только на американском и британском английском, произносимых мужским или женским голосом.
Поддержка русского языка не заявлена.

Пример такого голоса можно услышать ниже:

Было бы неправильно сказать, что эта технология — пережиток прошлого, не имеющего места в современном мире, полном ИИ и прочих странных вещей.  

Например, строитель самодельного 3-кВт моноколёсного мотоцикла, построивший его на базе микроконтроллера Arduino, сделал, на мой взгляд, потрясающую вещь: встроил в него компьютерный голос на базе как раз этой библиотеки Talkie!

Смысл затеи был в том, что управлять моноколёсным мотоциклом и так-то непросто (он там рассказывает, как «втыкался лицом» во время тестов :-)), поэтому он сразу отказался от использования каких-либо графических дисплеев, чтобы не отвлекать внимание, и решил встроить систему информирования на основе голоса. Получилось органично и даже, пожалуй, футуристично:

Есть и более приземлённые примеры использования подобной говорилки: например, подробный мануал, как заставить говорить ESP32 или мануал по постройке комнатного термометра (тоже на ESP32).

Понятно, что роботизированный голос на английском языке — это, возможно, и хорошо, но где же русский?! :-)

Для поддержки же русского языка придётся обратиться к другой библиотеке — eSpeak NG, которая тоже использует синтез голоса, и, если не вдаваться в подробности, содержит сценарии (последовательность воспроизведения частот с резонансами в определённых местах) для создания каждого гласного или согласного звука. Однако желающие более глубоко «вдаться» в подробности могут глянуть, например, здесь

Что касается поддержки языков, то здесь всё весьма богато — более 100 языков и акцентов, где поддержка русского языка есть

Речь на английском, генерируемая с её помощью, звучит примерно так:

При этом надо иметь в виду, что библиотека довольно тяжёлая, и прошивка, созданная с её помощью, занимает у ESP32 больше половины доступной памяти.

Было бы странно не использовать возможности подключения по Wi-Fi, раз уж мы говорим о ESP32.

Сетевое направление генерации голоса обычно носит название (в одном из вариантов, хотя, это более правильно назвать целым направлением методов, не только онлайн) text-to-speech и позволяет отослать текстовый запрос на нейросетевой сервис крупных компаний, например, Google (Google Cloud Text To Speech) и т.д., получая в ответ звуковой файл для воспроизведения. Качество воспроизводимой речи является весьма высоким.

Проблема лишь в том, что, с одной стороны, реализовать алгоритм такого взаимодействия не совсем просто, а с другой — подобные сервисы всё равно имеют квоты на количество запросов, после которых необходимо переходить на платную версию.

Как альтернативный вариант (более простой технически, но также с квотами) — слать http-запросы с текстом, который нужно перевести в речь, на сервисы наподобие этого и этого, в ответ получая аудиофайл для воспроизведения. Готового варианта для такого решения найти не удалось — нужно писать самостоятельно.

Однако при любом варианте остаётся потребность в стабильном интернет-соединении для передачи трафика, что не совсем удобно в целом ряде случаев… 

Как было уже выше сказано, комплекс методов text-to-speech не ограничивается только онлайн-методами. Хотя самые мощные из них всё равно требуют соединения с сервером, только уже в пределах локальной сети — и примером такой системы является нейросетевой движок Piper, в который интегрирован модуль речи eSpeak NG (который мы рассматривали выше). 

Качество речи довольно высокое — можно убедиться самостоятельно прямо в браузере: на странице предпрослушивания образцов фраз (можно выбрать разные голоса и разные языки; сейчас выбран русский). 

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

Схема работы с движком построена по принципу отправки на сервер post-запроса с фразой для озвучивания, после чего сервер присылает ответ в виде аудиофайла для воспроизведения.

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

  • Локально на смартфон (например, под Android) устанавливается нейросетевой движок распознавания голоса Vosk.

  • ESP32 шлёт аудиоданные на смартфон, где они передаются для распознавания Vosk, который переводит их в текст.

  • Распознанный текст передаётся для воспроизведения голосом встроенному модулю Google TTS.

  • Аудиопоток от Google TTS захватывается и пересылается на esp32.

Можно, по идее, использовать и встроенный на смартфоне модуль распознавания речи от Google…В общем, есть варианты.

Готовые решения такого плана, на первый взгляд, отсутствуют, так что нужно будет писать самостоятельно.

Таким образом, мы видим, что проблема генерации голоса (и его распознавания, если это действительно нужно) поднимает огромный пласт вопросов. Тем не менее в данный момент существует множество путей их решения, что существенно облегчает задачу…

В любом случае у вас сейчас есть масса способов воспроизвести голос, используя микроконтроллер. А учитывая, что сейчас самый разгар новогодних праздников, пожалуй, самое время заставить «железку» спеть какую-нибудь новогоднюю песню… :-) 

© 2025 ООО «МТ ФИНАНС»

Комментарии (31)


  1. iliasam
    01.01.2026 13:14

    "Предварительные расчёты показывают, что во встроенную flash-память ESP32 может поместиться звуковой файл продолжительностью в районе 20-30 сек (16 бит, 22 кГц)."
    А если Speex использовать?
    Я на stm32f100 запускал: https://we.easyelectronics.ru/STM32/vosproizvedenie-zvuka-na-stm32-discovery-pri-pomoschi-speex.html


    1. serafims
      01.01.2026 13:14

      Более того, 8 бит и 8кГц дадут прирост эффективности хранения, но качество, схожее с телефонной линией, но при этом вполне разборчивую речь.


      1. sim31r
        01.01.2026 13:14

        У современных микроконтроллеров мощности вычислительные больше, чем у первых Пентиумов, можно компрессию применять, интерполировать например данные, должны лучше звучать без металлического тембра. Или mp3 кодек сразу использовать.


    1. shiru8bit
      01.01.2026 13:14

      Как-то маловато получилось. 30 секунд умножить на 44 килобайта будет 1.3 мегабайта, а у ESP32 четыре. Да и зачем голосу 16 бит-то? 4 бита в элементарном ADPCM хватит, это уже 2 минуты в том же объёме. Или, если с памятью совсем плохо, можно применить LPC из примеров выше, но без складывания слов из отдельных фонем, а просто кодирование целиковых сообщений.


  1. little-brother
    01.01.2026 13:14

    Посмотрите на проект xiaozhi-esp32. На али продаются уже готовые платы с распаянными микрофоном и аудио-выходом (поиск по xiaozhi). Самая большая проблема - это оплатить DeepSeek API из России.


  1. inkelyad
    01.01.2026 13:14

    Диктофон-автооответчик сделайте. Который подключается к телефону по bluetooth в качестве гарнитуры, поднимает трубку и выдает голосовое меню. Записанное - заливается обратно в телефон по тому же bluetooth.

    Ну или хотя бы SIP гейт-bluetooth 'гарнитуру' - тогда можно уже руками к Asterisk и подобным телефон подключить. А то родной mod_chan у него, увы, так себе работает.


    1. jorgvonfrundsberg
      01.01.2026 13:14

      А лучше - bluetooth диктофон, прикидывающийся гарнитурой и позволяющий без проблем писать голос хоть с линии, хоть из Zoom/Teams/WhatsApp без оглядки на попытки авторов Android помешать этому.


      1. inkelyad
        01.01.2026 13:14

        Просто диктофон делается без всяких bluetooth и вообще микроконтроллеров. Нужен просто аттенюатор с аудиовыхода одного смарта на микрофонный уровень другого. А вот автоответчик с голосовым меню, когда нужно как-то реагировать на голосовой вход и выдавать что-то в обратную сторону - так уже не совсем получается. Особенно если хочешь еще и слышать/вмешиваться в то что происходит.


  1. JBFW
    01.01.2026 13:14

    Никогда не понимал этой тяги к голосовым интерфейсам )

    Неудобно же.


    1. Moog_Prodigy
      01.01.2026 13:14

      Когда комп говорит - это еще нормально. Автоинформеры всякие, или например озвучивание системных звуков винды своим голосом. А вот управление компом голосом - ну не, это было еще в начале нулевых реализовано, пусть коряво, но работало. Я уже тогда понял, насколько это неудобно. Пробовал и нынче - не коряво, whisper работает отлично, но суть интерфейса человек-машина при этом ломает.


    1. misha_erementchouk
      01.01.2026 13:14

      Приложений хватает. Например, есть немалое количество людей с пониженной или отсутствующей мобильностью конечностей. Ситуативной или перманентной.


    1. SkylineXXX
      01.01.2026 13:14

      gopro - сделай фото, gopro - снимай видео, gopro - отключись. gopro, ясное дело за несколько метров


  1. yokotoka
    01.01.2026 13:14

    Ещё вариант: Vosk (tts) + whisper (stt) на малине/хомлаб сервере и esp32 как клиент

    Транспорт можно любой взять, хоть mqtt, рекомендую webrtc, в качестве кодека Opus (в webrtc нативно встроен)


  1. GambitOZ
    01.01.2026 13:14

    Можно пойти еще проще. Например установить vosk и piper на raspberry pi. Или вообще для этих целей использовать старый телефон с андроидом (установить на него питон и указанные библиотеки). Я тоже думал на счет того чтобы запихнуть в ESP32 голосовой движок. Но в итоге все равно пришел к тому что ESP32 слабовата для этих целей. Я имею ввиду не просто генерацию каких то еле понятных на слух фраз, букв, слов - а нормальный голос. В общем ESP хорошо подходит для подключения к домашнему серверу на котором будет стоять прожка сервер которая будет переводить голос в текст, а текст загонять в локальную нейросеть, а потом будет переводить ответ в звуковой файл который будет отправлен на ESP для озвучивания.


    1. Samhuawei
      01.01.2026 13:14

      У pi есть 40 пинов которые работают так же как Ардуино. Видимо в вашем примере esp32 становится ненужным. Прикуручиваете к роботу машинку и программируете прямо в Линуксе. Ещё и камеру присоединить можно с распознаванием образов.

      Другое дело что батарейки будет высасывать знатно.


      1. GambitOZ
        01.01.2026 13:14

        Я изначально хотел сделать своего оффлайн Джарвиса по типу Алисы или иной Кортаны. Т.е. задача изначально не слишком простая. Начал копать на эту тему как сделать проще и дешевле. Как я писал ранее на ESP сделать это можно но нужен промежуточный сервер на какой то мощной машине если будут использоваться нейросети. И если нужно именно оффлайн. Для онлайн вон китайцы все уже сделали - подключаешься к их китайскому сайту и там он тебе и звук распознает и ответ при помощи нейросети в виде звука вернет. Для оффлайн один только ESP просто не потянет этих задач. Ну а для чего то простого очень даже - да. Например можно записать отдельные фразы в его память и потом их воспроизводить в нужной комбинации. На ESP я такое не делал но делал на STM32F103, а записанные звуки хранил внешней флеш памяти.
        С Pi я работал, много чего на ней делал и кстати запускал распознавание голоса. С небольшими тормозами но работало. Был забавный случай. Я еще тогда удивился помню. Тестировал на работе только купленный usb микрофон и распознавание голоса. Проектов не было и было немного свободного времени, так что почему бы и нет. Ко мне подошел товарищ и завязался диалог. Pi c микрофоном и запущенной прожкой была запущена. Поговорили разошлись. Потом смотрю, а там целая простыня текста и причем почти весь текст диалога распознался более или менее точно. Я ему потом показал - посмеялись над "шпионским девайсом".

        На счет питания - ESP при включенном WIFI тоже будет садить аккумуляторы очень быстро. Там потребление плавает от 200 мА. А так все конечно зависит от задачи.


  1. Mulfarion
    01.01.2026 13:14

    А я взял Алису и так как она в умному доме, то она и роль говорилки исполняет. Да нужен инет, но очень уж хороший ттс из неё


    1. DYNAMIT-75
      01.01.2026 13:14

      Не стоит напоминать? Всё, что она (Алиса от говнояндекса) слышит , то и транслирует в сеть , не понятно кому и через какие анализаторы РФ проходит.