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

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

## 📋 Навигация

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

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

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

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

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

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

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

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

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

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

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

```bash
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](THEORY.md#7-спектр-и-преобразование-фурье).

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