Skip to content

INMP441 — цифровой MEMS-микрофон

Цифровой микрофон с 24-битным АЦП на кристалле: наружу идёт готовый цифровой поток по интерфейсу I2S. Компонент читает поток через DMA на ESP32, считает уровень громкости и передаёт сырые сэмплы на компьютер для визуализации осциллограммы, спектра и спектрограммы звука в реальном времени.

🎤 Цифровой MEMS-микрофон INMP441

INMP441 — цифровой микрофон с 24-битным АЦП прямо на кристалле: наружу идёт не аналоговый сигнал, а готовый цифровой поток по интерфейсу I2S. Компонент читает этот поток через DMA на ESP32, считает уровень громкости и передаёт сырые сэмплы на компьютер для визуализации осциллограммы, спектра и спектрограммы звука в реальном времени — подробная физика в THEORY.md.

📋 Навигация

ФайлЧто внутри
WIRING.mdПодключение, таблица пинов, логика L/R-канала
THEORY.mdФизика звука, протокол I2S, Найквист, БПФ, почему нет абсолютных дБ SPL
Lesson.mdМетодический план урока (уроков) для учителя
PREZ.mdПрезентация модуля — тезисы для урока

🛠 Состав компонента

  • include/Inmp441.h — интерфейс класса драйвера.
  • src/Inmp441.cpp — настройка канала I2S и чтение через DMA.
  • src/main.cpp — тестовый стенд: метр громкости и режим Serial Plotter.
  • tools/visualizer.py — Python-визуализатор (осциллограмма, спектр, спектрограмма).

🚀 Сборка и прошивка (PlatformIO)

cd Sensors/Sound/INMP441
pio run -t upload && pio device monitor

По умолчанию пины настроены под ESP32 DevKit v1 (GPIO25/26/32) — см. Inmp441::Config и WIRING.md. Перед первым запуском обязательно проверьте пин L/R — от него зависит поле Config::channel, при несовпадении микрофон будет отдавать одни нули (см. WIRING.md).

Тестовый стенд (Serial Monitor, 921600 бод)

По умолчанию стенд печатает метр громкости — пик, RMS и статус связи 10 раз в секунду:

[-18dBFS] peak= 4200 rms=3120.4 isAlive=1 ##############

Команда p переключает в режим Serial Plotter (Tools → Serial Plotter в Arduino IDE) — сырая волна звука в виде графика прямо в IDE, без Python.

🖥️ Python-визуализатор

cd tools
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 visualizer.py /dev/ttyUSB0   # или свой порт, см. `ls /dev/ttyUSB*`

Перед запуском переключите стенд в режим Plotter командой p в Serial Monitor — визуализатор читает тот же поток чисел. Три синхронных графика — осциллограмма, спектр (БПФ) и спектрограмма — разобраны в THEORY.md, раздел 7.

Никакого распознавания типа звука визуализатор не делает — это осознанное решение: график “похож на голос/свист/хлопок” ученик должен научиться читать сам, а не полагаться на эвристику, которая на самом деле просто сравнивает пару чисел с порогом.