Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнного аудиопроцСссора Π½Π° Arduino β€” это ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сочСтаСт Π² сСбС элСктронику, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ акустику. Π’Π°ΠΊΠΎΠΉ дСвайс позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эквалайзСры, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ эффСкты Ρ€Π΅Π²Π΅Ρ€Π±Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ компрСссии, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ систСмами. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСссор Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ настройками ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ β€” ΠΎΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π·Π²ΡƒΠΊΠ° Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ Π΄ΠΎ создания студийного оборудования.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ разбСрёмся, ΠΊΠ°ΠΊ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ аудиопроцСссор Π½Π° Π±Π°Π·Π΅ Arduino Nano, Arduino Due ΠΈΠ»ΠΈ ESP32, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π·Π²ΡƒΠΊΠ°, ΠΈ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… аудиоэффСктов. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сигнала Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ рассмотрим Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ со Π·Π²ΡƒΠΊΠΎΠΌ, ΠΈ Π΄Π°Π΄ΠΈΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами.

КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ аудиопроцСссор Π½Π° Arduino

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ сборкС, Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ, для Ρ‡Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ аудиопроцСссор. ΠžΡ‚ этого зависит Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ схСмы ΠΈ Π΄Π°ΠΆΠ΅ язык программирования. Π’ΠΎΡ‚ основныС сцСнарии примСнСния:

  • 🎡 ΠšΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΡ Π·Π²ΡƒΠΊΠ° Π² Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅: компСнсация акустичСских нСдостатков салона, настройка эквалайзСра ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ сабвуфСра.
  • 🎧 ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Hi-Fi ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ: созданиС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ усилитСля с Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ частотами для Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ.
  • 🎀 ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° голоса: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ эффСктов (Ρ€Π΅Π²Π΅Ρ€Π±, Π΄ΠΈΠ»Π΅ΠΉ, Π°Π²Ρ‚ΠΎΡ‚ΡŽΠ½) для ΠΊΠ°Ρ€Π°ΠΎΠΊΠ΅-систСм ΠΈΠ»ΠΈ стриминга.
  • πŸŽ›οΈ ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ синтСзатор: гСнСрация Π·Π²ΡƒΠΊΠΎΠ² ΠΈ ΠΈΡ… модификация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Arduino Π² качСствС ΠΌΠΎΠ·Π³Π° систСмы.
  • πŸ”Š АктивныС акустичСскиС систСмы: Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сигнала Π½Π° частотныС полосы для многополосных ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 2- ΠΈΠ»ΠΈ 3-полосных).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ свои трСбования ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π΅. НапримСр, для Π°Π²Ρ‚ΠΎΠ·Π²ΡƒΠΊΠ° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΠΎΠΌΠ΅Ρ…Π°ΠΌ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ динамичСский Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π° для голосовых эффСктов Π²Π°ΠΆΠ½Π° минимальная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π»Π°Ρ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ). Если Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π·Π²ΡƒΠΊΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· I2S ΠΈΠ»ΠΈ SPDIF), потрСбуСтся ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с высокой Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ESP32 ΠΈΠ»ΠΈ Teensy 4.0.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Arduino Uno ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ с 8-Π±ΠΈΡ‚Π½Ρ‹ΠΌ процСссором Π½Π΅ подходят для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… экспСримСнтов сгодится, Π½ΠΎ для практичСского примСнСния Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Arduino Due (84 MHz), ESP32 (Π΄ΠΎ 240 MHz) ΠΈΠ»ΠΈ Teensy (600 MHz).
πŸ“Š Какой ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для аудиопроцСссора?
  • Arduino Uno (ATmega328P)
  • Arduino Due (SAM3X8E)
  • ESP32
  • Teensy 4.0
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ для сборки аудиопроцСссора

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ сигнала (Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ) ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… эффСктов. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ элСмСнтами ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ НазначСниС Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сигнала ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ESP32, Teensy 4.0, Arduino Due Arduino Uno ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для тСстов
АЦП/ЦАП ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π·Π²ΡƒΠΊΠ° Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ PCM5102A (ЦАП), ADS1115 (АЦП), WM8731 (ΠΊΠΎΠ΄Π΅ΠΊ) Для Hi-Fi Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС ΠΊΠΎΠ΄Π΅ΠΊ
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ УсилСниС сигнала, буфСризация NE5532, TL072, OPA2134 Π’Π°ΠΆΠ΅Π½ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡˆΡƒΠΌΠΎΠ²
ΠŸΠ°ΡΡΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, стабилизация РСзисторы, кондСнсаторы, ΠΊΠ°Ρ‚ΡƒΡˆΠΊΠΈ индуктивности Для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π΅Π½ΠΎΡ‡Π½Ρ‹Π΅ кондСнсаторы
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ питания Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ схСмы Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ стабилизатор LM7805, ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹ΠΉ XL4015 Для Π°ΡƒΠ΄ΠΈΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ стабилизаторы

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π·Π²ΡƒΠΊΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· I2S), ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· внСшнСго АЦП/ЦАП, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ встроСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ESP32 ΠΈΠ»ΠΈ Teensy. Однако для Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ сигнала потрСбуСтся высококачСствСнный внСшний ΠΊΠΎΠ΄Π΅ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WM8731 ΠΈΠ»ΠΈ PCM1808. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ: 16 Π±ΠΈΡ‚ Ρ…Π²Π°Ρ‚ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡, Π½ΠΎ для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π²ΡƒΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅ 24 Π±ΠΈΡ‚Π°.

Для экспСримСнтов с эффСктами (Ρ€Π΅Π²Π΅Ρ€Π±, хорус) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MSGEQ7 (7-полосный эквалайзСр) ΠΈΠ»ΠΈ PT2313 (Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ процСссор эффСктов). Они ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ настроСк.

πŸ’‘

ΠŸΡ€ΠΈ ΠΏΠ°ΠΉΠΊΠ΅ аудиосхСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ бСссвинцовый ΠΏΡ€ΠΈΠΏΠΎΠΉ с Ρ„Π»ΡŽΡΠΎΠΌ Π½Π° основС ΠΊΠ°Π½ΠΈΡ„ΠΎΠ»ΠΈ β€” это ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ риск ΠΊΠΎΡ€Ρ€ΠΎΠ·ΠΈΠΈ ΠΈ ΡˆΡƒΠΌΠΎΠ² Π² цСпях.

Π‘Ρ…Π΅ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ: ΠΎΡ‚ простого ΠΊ слоТному

Начнём с самой простой схСмы β€” Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ процСссинга с использованиСм Arduino ΠΈ внСшнСго АЦП/ЦАП. Π­Ρ‚Π° конфигурация ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… эффСктов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ эквалайзСр ΠΈΠ»ΠΈ компрСссор.

Базовая схСма Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

  1. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ сигнал β†’ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ (Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ усилитСлС).
  2. УсилСнный сигнал β†’ АЦП (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ADS1115).
  3. Цифровая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Arduino.
  4. Π’Ρ‹Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· ЦАП (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PCM5102A) β†’ ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ мощности.

Для Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· I2S) схСма упрощаСтся:

[Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ I2S] β†’ ESP32 (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°) β†’ [Π£ΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ЦАП]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ схСмы для ESP32 с ΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ WM8731:

  • πŸ”Œ BCLK, LRCLK, DIN/DOUT ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ ESP32.
  • πŸ”Š Аналоговый Π²Ρ…ΠΎΠ΄/Π²Ρ‹Ρ…ΠΎΠ΄ β€” Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·ΡŠΡ‘ΠΌΡ‹ RCA ΠΈΠ»ΠΈ 3.5mm jack.
  • ⚑ ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π΅ΠΊ β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ стабилизированный источник 5V ΠΈΠ»ΠΈ 3.3V.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с I2S Π½Π° ESP32 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ GPIO 25-27, 32-33 β€” ΠΎΠ½ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для высокоскоростной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΈΠ½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ искаТСниям Π·Π²ΡƒΠΊΠ°.
Как ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡˆΡƒΠΌΡ‹ Π² Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ схСмС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ экранныС ΠΊΠ°Π±Π΅Π»ΠΈ для аудиосигнала, раздСляйтС Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ Π·Π΅ΠΌΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ бусы, Π° Ρ‚Π°ΠΊΠΆΠ΅ добавляйтС RC-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π½Π° Π»ΠΈΠ½ΠΈΠΈ питания. Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… схСм примСняйтС симмСтричныС Π²Ρ…ΠΎΠ΄Ρ‹/Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ (балансныС Π»ΠΈΠ½ΠΈΠΈ).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ аудиопроцСссора: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π½Π° Arduino сущСствуСт нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ:

  • πŸ“š ArduinoFFT β€” для Π°Π½Π°Π»ΠΈΠ·Π° спСктра (быстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅).
  • πŸŽ›οΈ Mozzi β€” синтСз ΠΈ модификация Π·Π²ΡƒΠΊΠ° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • πŸ”Š I2S для ESP32 β€” Ρ€Π°Π±ΠΎΡ‚Π° с Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌ Π°ΡƒΠ΄ΠΈΠΎ.
  • πŸ“‰ FilterLib β€” рСализация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² (ЀНЧ, Π€Π’Π§, полосовых).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для простого 3-полосного эквалайзСра Π½Π° ESP32 с использованиСм I2S:

#include <driver/i2s.h>

// Настройки I2S

#define I2S_BCLK 26

#define I2S_LRCLK 25

#define I2S_DIN 33

#define I2S_DOUT 27

void setup() {

i2s_config_t i2s_config = {

.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX),

.sample_rate = 44100,

.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,

// ... Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

};

i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);

}

void loop() {

int16_t sample[2];

size_t bytes_read;

// Π§Ρ‚Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сигнала

i2s_read(I2S_NUM_0, sample, sizeof(sample), &bytes_read, portMAX_DELAY);

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, усилСниС Π½ΠΈΠ·ΠΊΠΈΡ… частот)

sample[0] = sample[0] * 1.5; // Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ громкости Π½Π° 50%

// Π’Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ сигнала

i2s_write(I2S_NUM_0, sample, sizeof(sample), &bytes_read, portMAX_DELAY);

}

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эффСктов (Ρ€Π΅Π²Π΅Ρ€Π±, Π΄ΠΈΠ»Π΅ΠΉ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Π΅ Π±ΡƒΡ„Π΅Ρ€Ρ‹ (circular buffers). НапримСр, простой Π΄ΠΈΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

#define DELAY_SIZE 44100 // 1 сСкунда Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ 44.1 ΠΊΠ“Ρ†

int16_t delay_buffer[DELAY_SIZE];

uint16_t delay_index = 0;

// Π’ основном Ρ†ΠΈΠΊΠ»Π΅:

int16_t input = read_sample(); // Π§Ρ‚Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сигнала

int16_t delayed = delay_buffer[delay_index]; // Π§Ρ‚Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠ°Π½Π½ΠΎΠ³ΠΎ сигнала

delay_buffer[delay_index] = input; // Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сигнала

delay_index = (delay_index + 1) % DELAY_SIZE;

int16_t output = input + (delayed * 0.5); // БмСшиваниС с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ

πŸ’‘

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° оптимизация ΠΊΠΎΠ΄Π°: ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ динамичСского выдСлСния памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ (fixed-point) вмСсто float, ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ дСлСния.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ

Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Ρ… аудиопроцСссоров β€” Π»Π°Ρ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ (Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ). Для ΠΌΡƒΠ·Ρ‹ΠΊΠΈ допустима Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄ΠΎ 10 мс, Π½ΠΎ для голоса ΠΈΠ»ΠΈ ΠΆΠΈΠ²Ρ‹Ρ… выступлСний ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ 5 мс. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π΅Ρ‘ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ:

  • ⚑ Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΡƒΡŽ частоту: ESP32 Π½Π° 240 MHz ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сигнал быстрСС, Ρ‡Π΅ΠΌ Arduino Uno Π½Π° 16 MHz.
  • πŸ—‘οΈ ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Π΅ устройства: Wi-Fi, Bluetooth ΠΈ Π΄Π°ΠΆΠ΅ Serial.print тормозят ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.
  • πŸ“‰ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DMA (прямой доступ ΠΊ памяти) для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· участия CPU.
  • πŸ”„ Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π° Π±Π»ΠΎΠΊΠΈ: вмСсто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сэмпла ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ с Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ 64–256 сэмплов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ESP32 с использованиСм DMA:

#include <driver/i2s.h>

#define BUFFER_SIZE 256

int16_t audio_buffer[BUFFER_SIZE];

void setup() {

i2s_config_t i2s_config = {

.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX | I2S_MODE_DAC_BUILT_IN),

.sample_rate = 44100,

.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,

.communication_format = I2S_COMM_FORMAT_STAND_I2S,

.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, // ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚

.dma_buf_count = 8,

.dma_buf_len = BUFFER_SIZE,

};

i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);

}

void loop() {

size_t bytes_read;

i2s_read(I2S_NUM_0, audio_buffer, sizeof(audio_buffer), &bytes_read, portMAX_DELAY);

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΡƒΡ„Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°)

for (int i = 0; i < BUFFER_SIZE; i++) {

audio_buffer[i] = apply_effect(audio_buffer[i]); // Π’Π°ΡˆΠ° функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

}

i2s_write(I2S_NUM_0, audio_buffer, sizeof(audio_buffer), &bytes_read, portMAX_DELAY);

}

Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΊ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³ΠΈΡ‚Π°Ρ€Π½Ρ‹Π΅ процСссоры) рассмотритС использованиС Teensy Audio Library β€” ΠΎΠ½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ°Π½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: эквалайзСр ΠΈ компрСссор

Рассмотрим Π΄Π²Π° популярных эффСкта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Arduino: парамСтричСский эквалайзСр ΠΈ компрСссор динамичСского Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

1. 3-полосный эквалайзСр

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эквалайзСра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ (Π±ΠΈΠΊΠ²Π°Π΄Ρ‹). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ настраиваСтся Π½Π° свою частоту:

  • πŸŽ›οΈ НизкиС частоты: 100 Π“Ρ† (ЀНЧ).
  • πŸŽ›οΈ Π‘Ρ€Π΅Π΄Π½ΠΈΠ΅ частоты: 1 ΠΊΠ“Ρ† (полосовой).
  • πŸŽ›οΈ ВысокиС частоты: 10 ΠΊΠ“Ρ† (Π€Π’Π§).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° (ЀНЧ Π½Π° 100 Π“Ρ†):

// ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹ для ЀНЧ 100 Π“Ρ† (рассчитаны Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€)

float b0 = 0.0004;

float b1 = 0.0008;

float b2 = 0.0004;

float a1 = -1.9556;

float a2 = 0.9565;

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ состояния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°

float x1 = 0, x2 = 0, y1 = 0, y2 = 0;

float apply_lowpass(float input) {

float output = b0 * input + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2;

x2 = x1;

x1 = input;

y2 = y1;

y1 = output;

return output;

}

2. ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΎΡ€ динамичСского Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°

ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΎΡ€ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Ρ€ΠΎΠΌΠΊΠΈΠΌΠΈ ΠΈ Ρ‚ΠΈΡ…ΠΈΠΌΠΈ Π·Π²ΡƒΠΊΠ°ΠΌΠΈ. Алгоритм:

  1. ВычислитС RMS (срСднСквадратичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) сигнала Π·Π° послСдниС N сэмплов.
  2. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ с ΠΏΠΎΡ€ΠΎΠ³ΠΎΠΌ (threshold).
  3. Если сигнал Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΡ€ΠΎΠ³Π°, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ (ratio).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

#define RMS_WINDOW 100 // Окно для расчёта RMS

float rms_sum = 0;

float rms_buffer[RMS_WINDOW];

int rms_index = 0;

float apply_compressor(float input, float threshold, float ratio) {

// ОбновлСниС Π±ΡƒΡ„Π΅Ρ€Π° RMS

rms_sum -= rms_buffer[rms_index];

rms_sum += input * input;

rms_buffer[rms_index] = input * input;

rms_index = (rms_index + 1) % RMS_WINDOW;

float rms = sqrt(rms_sum / RMS_WINDOW);

// ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ компрСссии

if (rms > threshold) {

float over_db = 20 * log10(rms / threshold);

float reduction_db = over_db * (1 - 1/ratio);

float gain = pow(10, -reduction_db / 20);

return input * gain;

}

return input;

}

Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€?|ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΈ всС Π°ΡƒΠ΄ΠΈΠΎΠΊΠ°Π±Π΅Π»ΠΈ Π±Π΅Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ?|ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π»ΠΈ ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ (Π½Π΅Ρ‚ Π»ΠΈ просадок)?|УстановлСны Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ громкости Π½Π° Π²Ρ…ΠΎΠ΄Π΅/Π²Ρ‹Ρ…ΠΎΠ΄Π΅?|ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π»ΠΈ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Π΅ устройства (Wi-Fi, Bluetooth)?-->

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΈ сборкС аудиопроцСссора Π½Π° Arduino Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π’ΠΎΡ‚ самыС распространённыС ΠΈ способы ΠΈΡ… устранСния:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ВозмоТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
Π¨ΡƒΠΌΡ‹ ΠΈ Ρ„ΠΎΠ½ Π² Π·Π²ΡƒΠΊΠ΅ ΠŸΠ»ΠΎΡ…ΠΎΠ΅ Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅, Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°, нСкачСствСнноС ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ экранныС ΠΊΠ°Π±Π΅Π»ΠΈ, раздСляйтС Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ Π·Π΅ΠΌΠ»ΠΈ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ бусы
ИскаТСния ΠΏΡ€ΠΈ высокой громкости ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° АЦП/ЦАП ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ усилитСля Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сигнала, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ (clipper) Π² ΠΊΠΎΠ΄Π΅
Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π²ΡƒΠΊΠ° (Π»Π°Ρ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ) МСдлСнная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° слабом ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ DMA, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ESP32 ΠΈΠ»ΠΈ Teensy
ΠΠ΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ I2S ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ настройки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΈΠ½Ρ‹ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ соотвСтствиС Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² BCLK, LRCLK, DIN/DOUT Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚Ρƒ
Ардуино пСрСзагруТаСтся НСхватка памяти ΠΈΠ»ΠΈ питания Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ кондСнсаторы Π½Π° Π»ΠΈΠ½ΠΈΠΈ питания

Если ваш аудиопроцСссор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ питания: просадки напряТСния β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых ΠΏΡ€ΠΈΡ‡ΠΈΠ½ сбоСв. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ осциллограф ΠΈΠ»ΠΈ хотя Π±Ρ‹ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ напряТСниС Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ ΠΈ ΠΊΠΎΠ΄Π΅ΠΊΠ΅ Π½Π΅ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½ΠΈΠΆΠ΅ номинального.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ESP32 ΠΈ I2S Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ GPIO 34-39 β€” ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Ρ‹. Π’Π°ΠΊΠΆΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ GPIO 6-11, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ Ρ„Π»Π΅Ρˆ-памяти ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.

FAQ: Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Arduino Uno для аудиопроцСссора?

ВСхничСски Π΄Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… экспСримСнтов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ синусоиды ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ эквалайзСра с Π½ΠΈΠ·ΠΊΠΎΠΉ частотой дискрСтизации). Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Arduino Uno слишком мСдлСнная β€” Π΅Ρ‘ процСссор ATmega328P Π½Π΅ справится с частотой дискрСтизации Π²Ρ‹ΡˆΠ΅ 8–16 ΠΊΠ“Ρ†. Для практичСского примСнСния Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ESP32, Teensy ΠΈΠ»ΠΈ Arduino Due.

Какой ΠΊΠΎΠ΄Π΅ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для Hi-Fi Π·Π²ΡƒΠΊΠ°?

Для высококачСствСнного Π·Π²ΡƒΠΊΠ° Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ΡΡ:

  • WM8731 β€” Π½Π΅Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ, 24-Π±ΠΈΡ‚Π½Ρ‹ΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ I2S.
  • PCM5102A β€” ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ЦАП для Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚Π°.
  • AK4490 β€” ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π½ΠΎ Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ ΠΈ слоТный Π² ΠΏΠ°ΠΉΠΊΠ΅.

Для Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ MAX98357A (встроСнный ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ + ЦАП), Π½ΠΎ качСство Π·Π²ΡƒΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅.

Как ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡˆΡƒΠΌΡ‹ Π² схСмС?

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ источники ΡˆΡƒΠΌΠΎΠ² ΠΈ способы ΠΈΡ… устранСния:

  1. ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ стабилизаторы (LM7805) вмСсто ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹Ρ….
  2. ЗСмляныС ΠΏΠ΅Ρ‚Π»ΠΈ: РаздСляйтС Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ Π·Π΅ΠΌΠ»ΠΈ, соСдиняя ΠΈΡ… Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ("Π·Π²Π΅Π·Π΄Π°").
  3. ΠŸΠ°Ρ€Π°Π·ΠΈΡ‚Π½Ρ‹Π΅ Π½Π°Π²ΠΎΠ΄ΠΊΠΈ: Π­ΠΊΡ€Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π°ΡƒΠ΄ΠΈΠΎΠΊΠ°Π±Π΅Π»ΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ ΠΈΡ… подальшС ΠΎΡ‚ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… сигналов.
  4. ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π΅Π½ΠΎΡ‡Π½Ρ‹Π΅ кондСнсаторы ΠΈ ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹Π΅ рСзисторы (1% Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ).
МоТно Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ аудиопроцСссор (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 5.1) Π½Π° Arduino?

Π”Π°, Π½ΠΎ это ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚:

  • ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с достаточным количСством Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² (ESP32 ΠΈΠ»ΠΈ Teensy 4.0).
  • ΠœΠ½ΠΎΠ³ΠΎΠΊΠ°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄Π΅ΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, WM8731 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стСрСо, поэтому понадобится нСсколько Ρ‡ΠΈΠΏΠΎΠ²).
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².

Для 5.1 систСмы ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСциализированныС Ρ‡ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CS42448), Π½ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слоТнСС, Ρ‡Π΅ΠΌ Arduino.

Π“Π΄Π΅ Π²Π·ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ схСмы ΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ для аудиопроцСссора?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ:

  • GitHub: Π˜Ρ‰ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ запросам "ESP32 audio processor", "Teensy audio effects".
  • Π€ΠΎΡ€ΡƒΠΌΡ‹: DIYAudio, Arduino Forum, ESP32.com.
  • Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹: