Передавать аудио с Arduino на устройство по Wi-Fi

Я только недавно начал изучать Arduino. Это мой первый проект.

Итак, идея проекта заключается в том, что будет плата Arduino (в идеале Uno, но я не знаю, была бы лучше другая плата), и когда вы удерживаете кнопку, она будет передавать то, что вы говорите, на устройство на Wi-Fi. Я знаю, что мне нужно будет получить модуль Wi-Fi, а также микрофон и кнопку, так что не могли бы вы помочь мне понять суть того, как будет проходить проект, и какие части я должен получить.

Спасибо!

, 👍0

Обсуждение

Вы должны бросить Uno здесь. Модуль Wi-Fi (который, вероятно, является ESP) уже будет более мощным микроконтроллером, чем Uno. Так что просто перейдите на лодку со встроенным Wi-Fi, например ESP32 или аналогичный. У них также есть интерфейс I2S, к которому вы сможете подключить хороший АЦП для семплирования звука., @chrisl


2 ответа


4

Ардуино может сделать это, но это очень сложная проблема для Ардуино. Похоже, возможно, вам нужно что-то более готовое к работе. В этом случае купите стартовый комплект Raspberry Pi 4 и USB микрофон и начните решать проблему оттуда. Raspberry Pi 4 — это компьютер с Linux, поэтому все, что вы будете делать, — это писать скрипты или программы (на любом языке: это обычный компьютер, так что используйте Python, C, C++, Java, bash, что угодно) для запуска на нем. ОС Raspberry Pi (ранее называвшаяся Raspbian) Операционная система Linux.

Если вы пойдете по этому пути, вы также захотите задать свои вопросы на бирже стека Raspberry Pi.

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

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

По сути, для маршрута Arduino Uno вам нужно будет сделать какую-то причудливую высокоскоростную выборку АЦП с измененной тактовой частотой АЦП в специальном режиме АЦП, который делает повторные выборки, а затем прерывает ваш код, когда выборка готова, а не чем просто выполнение обычного analogRead(), так как это основано на блокировке/опросе, что приводит к трате тактовых циклов и создает дрожание выборки, вызывающее искажение звука, а затем вам нужно будет отправить эти данные через какой-нибудь экран Wi-Fi. (дополнительная плата) или ESP8266 или что-то в этом роде, или через какую-либо другую технологию (проводную или беспроводную) на компьютер для передачи в Интернет. Это может включать бинарное пакетирование/упаковку битов, проверку ошибок, буферизацию и т. д., и все это требует особых навыков.

На некоторые из моих проектов у меня ушло более 3 лет, так как я начал сложные проекты как новичок. Это один из тех многолетних типовых проектов для новичка точно.

(Черт возьми, если вы дадите мне два светодиода, два резистора и Arduino Nano, с этими элементами только, я могу отправить вас на работу по 8 часов в день в течение 3 месяцев подряд. проекты. Легко недооценить сложность чего-либо, пока вы не погрузитесь в него по шею.)

Обновление: если вы хотите пойти по пути Arduino, вот несколько советов, которые помогут вам быстрее найти решение. Опять же, несомненно, Arduino Uno может сделать это. Это точно может. Но более быстрый Arduino может сделать это проще и лучше. Итак:

  1. Google ищет проекты на Adafruit, которые могут это сделать. Пример: Поиск в Google "аудио потока adafruit". Их учебные пособия не имеют себе равных – лучшие в мире, а их продукты – первоклассные.
  2. Поищите проекты на Sparkfun, которые могут это сделать. Ex: Поиск "sparkfun stream audio" в Google. Они также превосходны и имеют учебные пособия мирового уровня.
  3. Поиск проектов, которые делают это с помощью Teensy, Zero, Due или другой высокоскоростной 32-битный микроконтроллер, вместо Уно. Обработка звука более сложна для более медленного 8-битного Uno, чем для любого из этих трех устройств, совместимых с Arduino/Arduino.
  4. Также посетите сайт Instructables.com, где можно найти руководства и помощь.
  5. Еще одна мысль: Поищите в Google "atmega328 stream audio to wifi" (в Uno используется микроконтроллер ATmega328, так что это хороший поисковый запрос)

Обновление: также взгляните на это руководство от GreatScott (он тоже очень классный) (https://www.instructables.com/id/Make-Your-Own-Spy-Bug-Arduino-Voice-Recorder/), который использует этот AVR-основанный (для ATmega328 : Arduino Uno, Nano, Pro Mini и т. д. или ATmega2560: Mega) расширенная аудиобиблиотека для записи и воспроизведения звука. См.:

  1. https://github.com/TMRh20/TMRpcm
    1. Запись аудио
    2. Потоковая передача аудио по радиоканалу NRF24L01+< /li>
,

Было бы проще, если бы вы просто отправили аудиофайл. Поэтому, если вы нажмете кнопку, он просто отправит аудиофайл., @Epicmania

Да. Это устраняет всю сложность дискретизации звука с помощью АЦП., @Gabriel Staples

Вам нужно будет сохранить файл на SD-карте или в энергонезависимой FRAM., @Gabriel Staples

Итак, идея состоит в том, что если моя мама внизу, а я в своей комнате играю в игры или что-то в этом роде, она может нажать кнопку, и она скажет мне «спустись вниз» в моих наушниках или любой другой звук, который я использую. Это возможно, @Epicmania


3

Вы можете использовать ESP32 со встроенным Wi-Fi и Bluetooth. Запишите волновой файл на SD-карту с помощью эту библиотеку, отправьте ее через Blutooth и воспроизвести его на ПК с помощью небольшого скрипта.

,

Эта ссылка на https://www.instructables.com/id/Make-Your-Own-Spy-Bug-Arduino-Voice-Recorder/ основана на библиотеках, созданных для микроконтроллера ATmega328 (https://github.com/ TMRh20/TMRpcm), и, вероятно, потребуются значительные расширенные модификации для работы на ESP32. Но вы всегда можете разделить проект и использовать 2 микроконтроллера: один ATmega328 (Uno, Nano или Pro Mini) и один ESP32., @Gabriel Staples

Извините, не узнал. [Здесь] (https://github.com/MhageGH/esp32_SoundRecorder) — библиотека для ESP32., @Python Schlange

Хороший! Пожалуйста, добавьте эту ссылку и в свой ответ (сохранив при этом ссылку на Great Scott Instructables). Проголосовал., @Gabriel Staples

Я просто не могу понять, как передать файл. Некоторые люди говорят, что единственное решение - передавать его побайтно, но это может быть довольно сложно, и я не нашел для этого никакой библиотеки. Вы можете записать несколько образцов файлов (например, в вашем примере «спуститесь по лестнице»), назначить номера и отправить ПК только номера, чтобы он мог узнать, какой файл воспроизводить., @Python Schlange

Вы можете загрузить wav-файл на веб-сервер с помощью ESP32 и [скачать](https://www.tutorialspoint.com/downloading-files-from-web-using-python) через Python. Или вы загружаете текстовый файл и [прочитываете его через tts](https://pythonprogramminglanguage.com/text-to-speech/), что должно быть быстрее при плохом соединении., @Python Schlange