Микрофон INMP441 I2S с ESP32: чтение звука, измерение dB и график
Подключи I2S-микрофон INMP441 к ESP32: таблица подключения, 24-битный звук по I2S, расчёт уровня в dB, форма волны в плоттере и код MicroPython для Pico.
INMP441 — это маленький модуль MEMS-микрофона, который сам переводит звук в цифру внутри микросхемы и отправляет 24-битные отсчёты прямо по шине I2S. Связка INMP441 ESP32 — самый простой способ получить чистый звук без аналогового микрофона, усилителя и АЦП. Модуль подключается к ESP32 шестью проводами, несколько строк кода I2S дают 16 000 отсчётов в секунду, по этим отсчётам можно посчитать уровень окружающего звука в децибелах (dB) и смотреть форму звуковой волны вживую в «Плоттере по последовательному соединению» (Serial Plotter).
В этом руководстве шаг за шагом разобрано, как работает INMP441, зачем нужны три линии I2S, готовый код, который компилируется и на ядре ESP32 для Arduino версии 2.x, и на 3.x, разница между dBFS и dB SPL и формула настоящего шумомера. В конце ты найдёшь работу с MicroPython на Raspberry Pi Pico, отличия от дешёвого аналогового датчика звука KY-038 и самые частые ошибки подключения.

Что такое INMP441 и как он работает?
INMP441 — всенаправленный MEMS-микрофон производства TDK InvenSense. MEMS здесь означает крошечный конденсатор из микроскопической мембраны и неподвижной пластины, вытравленных в кремнии: когда звуковые волны колеблют мембрану, меняется ёмкость. Классический электретный микрофон выдаёт это изменение как слабое аналоговое напряжение, и его нужно усиливать, фильтровать и измерять АЦП. А внутри INMP441 объединены предусилитель, фильтр защиты от наложения спектров (anti-aliasing), 24-битный сигма-дельта АЦП и интерфейс I2S. Поэтому из микрофона выходит уже не напряжение, а числа, которые идут в такт тактовому сигналу. Так на проводах не собирается аналоговый шум, качество АЦП платы перестаёт иметь значение, и любой подходящий микроконтроллер на 3,3 V получает одинаковое качество звука. Маленькое отверстие на модуле — это звуковой вход микрофона; при установке платы в корпус следи, чтобы не закрыть его.
| Параметр | Значение |
|---|---|
| Тип | MEMS, всенаправленный, микрофон с цифровым выходом |
| Интерфейс | I2S, 24 бита, старшим битом вперёд, дополнительный код |
| Питание | 1,8–3,3 V |
| Ток | Около 1,4 mA |
| Чувствительность | −26 dBFS (1 kHz, 94 dB SPL) |
| Отношение сигнал/шум (SNR) | 61 dBA |
| Частотный диапазон | 60 Hz – 15 kHz |
| Максимальное звуковое давление (AOP) | 120 dB SPL |
| Частота SCK | Около 0,5–3,2 MHz (дискретизация около 7,8–50 kHz) |
| Пины модуля | VDD, GND, SD, L/R, WS, SCK |
Что такое I2S? Цифровой звук по трём линиям
I2S (Inter-IC Sound) — последовательная шина, созданная для передачи звуковых отсчётов между микросхемами, и, несмотря на похожее название, с I2C она никак не связана. У неё три линии: SCK (битовый такт) говорит, когда читать каждый бит данных, WS (word select, ещё называют LRCLK) показывает, какой канал передаётся в данный момент, левый или правый, а SD — это сами данные. В этой схеме ESP32 — ведущее устройство (master): она формирует оба тактовых сигнала, а микрофон подстраивается под такт и выставляет данные на линию SD. У INMP441 каждый кадр состоит из 64 импульсов SCK: 32 бита для левого канала и 32 бита для правого. Поэтому частота дискретизации равна SCK / 64; для дискретизации 16 kHz ESP32 формирует битовый такт около 1,024 MHz. Микрофон записывает своё 24-битное измерение старшим битом вперёд в 32-битную ячейку своего канала, а оставшиеся 8 бит равны нулю. Именно поэтому в коде значение сдвигается вправо на 8 бит.
| Пин INMP441 | Назначение |
|---|---|
| VDD | Питание, 1,8–3,3 V |
| GND | Земля |
| SCK | Вход битового такта (приходит от платы) |
| WS | Вход такта выбора канала (приходит от платы) |
| SD | Выход последовательных звуковых данных (от микрофона к плате) |
| L/R | Выбор канала: GND = левый канал, VDD = правый канал |
Подключение INMP441: ESP32 и Raspberry Pi Pico
| Пин INMP441 | ESP32 | Raspberry Pi Pico |
|---|---|---|
| VDD | 3V3 | 3V3(OUT) (пин 36) |
| GND | GND | GND |
| SCK | GPIO 32 | GP16 |
| WS | GPIO 25 | GP17 |
| SD | GPIO 33 | GP18 |
| L/R | GND | GND |
На ESP32 сигналы I2S можно вывести на любой пин через матрицу GPIO; номера 32, 25 и 33 в таблице не обязательны, это просто безопасный выбор. Только держись подальше от пинов конфигурации при старте (strapping), которые задают поведение платы при загрузке (GPIO 0, 2, 5, 12, 15), и от GPIO 6–11, отведённых под флеш-память. GPIO 34–39 работают только на вход, поэтому подходят для линии SD, но не для SCK и WS. У Pico правило другое: драйвер I2S в MicroPython использует PIO, и номер пина WS должен быть на единицу больше номера пина SCK (например, GP16 и GP17). Делай провода короче 10–15 см: тактовый сигнал мегагерцового диапазона искажается на длинных перемычках. Расположение пинов своей платы можно проверить в утилите распиновки.
Шаг за шагом: первое чтение звука на ESP32
- Убедись, что в Arduino IDE установлен пакет плат ESP32, и выбери ESP32 Dev Module в меню «Инструменты › Плата» (Tools › Board). Если установка незнакома, загляни в статью Что такое ESP32?.
- Вставь модуль в макетную плату; подключи VDD к 3V3, GND к GND, а L/R тоже к GND.
- Подключи SCK к GPIO 32, WS к GPIO 25 и SD к GPIO 33, провода делай короткими.
- Загрузи код ниже. Дополнительные библиотеки не нужны: ESP_I2S на ядре 3.x и driver/i2s.h на ядре 2.x уже входят в пакет плат.
- Открой монитор порта на скорости 115200 бод; в тихой комнате должны быть значения около 35–50 dB, а во время разговора — около 55–70 dB.
- Открой «Инструменты › Плоттер по последовательному соединению» (Tools › Serial Plotter), чтобы видеть кривые dBFS и dB SPL вживую; хлопни в ладоши рядом с микрофоном и посмотри, как подскочит кривая.
Код для ESP32: измерение уровня звука (dB) с INMP441
Код проверяет версию ядра ESP32 для Arduino через ESP_ARDUINO_VERSION_MAJOR. На версии 3.x он использует новую библиотеку ESP_I2S, а на 2.x — классический драйвер I2S из ESP-IDF. Оба пути дают одинаковые функции micBegin() и micRead(), поэтому расчёт в loop() не меняется. В каждом проходе читается 512 отсчётов, то есть 32 мс звука при 16 kHz, убирается постоянная составляющая (смещение DC), находится среднеквадратичное значение (RMS) и переводится в децибелы.
1// INMP441 + ESP32: ses seviyesi (dB) olcer / sound level (dB) meter
2// ESP32 Arduino core 2.x ve 3.x / ESP32 Arduino core 2.x and 3.x
3#include <Arduino.h>
4#include <math.h>
5
6#define MIC_SCK 32 // INMP441 SCK
7#define MIC_WS 25 // INMP441 WS
8#define MIC_SD 33 // INMP441 SD
9
10const uint32_t SAMPLE_RATE = 16000; // ornekleme hizi / sample rate
11const size_t BLOCK = 512; // blok basina ornek / samples per block
12const double FS_RMS = 5931642.0; // 8388608 / sqrt(2): tam olcek sinus RMS / full-scale sine RMS
13const double DB_OFFSET = 120.0; // 94 dB SPL - (-26 dBFS)
14
15int32_t samples[BLOCK];
16
17#if ESP_ARDUINO_VERSION_MAJOR >= 3
18#include <ESP_I2S.h>
19I2SClass i2s;
20
21bool micBegin() {
22 i2s.setPins(MIC_SCK, MIC_WS, -1, MIC_SD); // bclk, ws, dout (yok / none), din
23 return i2s.begin(I2S_MODE_STD, SAMPLE_RATE, I2S_DATA_BIT_WIDTH_32BIT,
24 I2S_SLOT_MODE_MONO, I2S_STD_SLOT_LEFT); // L/R = GND -> sol / left
25}
26
27size_t micRead(int32_t *buf, size_t count) {
28 size_t bytes = i2s.readBytes((char *)buf, count * sizeof(int32_t));
29 return bytes / sizeof(int32_t);
30}
31#else
32#include <driver/i2s.h>
33
34bool micBegin() {
35 i2s_config_t cfg = {};
36 cfg.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX); // ana cihaz, alici / master, receiver
37 cfg.sample_rate = SAMPLE_RATE;
38 cfg.bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT;
39 cfg.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; // L/R = GND -> sol / left
40 cfg.communication_format = I2S_COMM_FORMAT_STAND_I2S;
41 cfg.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;
42 cfg.dma_buf_count = 4;
43 cfg.dma_buf_len = 256;
44 cfg.use_apll = false;
45
46 i2s_pin_config_t pins = {};
47 pins.mck_io_num = I2S_PIN_NO_CHANGE;
48 pins.bck_io_num = MIC_SCK;
49 pins.ws_io_num = MIC_WS;
50 pins.data_out_num = I2S_PIN_NO_CHANGE;
51 pins.data_in_num = MIC_SD;
52
53 if (i2s_driver_install(I2S_NUM_0, &cfg, 0, NULL) != ESP_OK) return false;
54 return i2s_set_pin(I2S_NUM_0, &pins) == ESP_OK;
55}
56
57size_t micRead(int32_t *buf, size_t count) {
58 size_t bytes = 0;
59 i2s_read(I2S_NUM_0, buf, count * sizeof(int32_t), &bytes, portMAX_DELAY);
60 return bytes / sizeof(int32_t);
61}
62#endif
63
64void setup() {
65 Serial.begin(115200);
66 if (!micBegin()) {
67 Serial.println("I2S baslatilamadi / I2S init failed");
68 while (true) delay(1000);
69 }
70}
71
72void loop() {
73 size_t n = micRead(samples, BLOCK);
74 if (n == 0) return;
75
76 double sum = 0;
77 for (size_t i = 0; i < n; i++) {
78 samples[i] >>= 8; // 32 bit yuvadan 24 bit veri / 24-bit data from 32-bit slot
79 sum += samples[i];
80 }
81 double mean = sum / n; // DC kaymasi / DC offset
82
83 double sq = 0;
84 for (size_t i = 0; i < n; i++) {
85 double v = (double)samples[i] - mean;
86 sq += v * v;
87 }
88 double rms = sqrt(sq / n);
89 if (rms < 1.0) rms = 1.0; // log10(0) olmasin / avoid log10(0)
90
91 double dbfs = 20.0 * log10(rms / FS_RMS);
92 double spl = dbfs + DB_OFFSET;
93
94 Serial.print("dBFS:");
95 Serial.print(dbfs, 1);
96 Serial.print(" dB_SPL:");
97 Serial.println(spl, 1);
98}| Фрагмент кода | Что делает |
|---|---|
| SAMPLE_RATE = 16000 (частота дискретизации) | Берётся 16 000 отсчётов в секунду; частота SCK получается 16 000 × 64 = 1,024 MHz. Для речи этого достаточно, для музыки можно выбрать 44 100 (SCK около 2,82 MHz). |
| Ширина данных 32 бита | INMP441 ожидает 64 импульса SCK на каждый кадр WS; если выбрать 16 бит, кадр укоротится и данные станут бессмысленными. |
| MONO + LEFT / ONLY_LEFT (только левый канал) | Читается только левый канал: пин L/R подключён к GND, поэтому микрофон использует левую ячейку. |
| samples[i] >>= 8 (сдвиг на 8 бит) | Извлекает 24-битное измерение из 32-битной ячейки; значение лежит в диапазоне от −8 388 608 до +8 388 607. |
| Вычитание среднего | Убирает небольшое смещение DC в сигнале; иначе RMS получается больше, чем должно быть. |
| rms (среднеквадратичное значение) | Квадратный корень из среднего квадратов отсчётов; отражает среднюю мощность звука. |
| dbfs + DB_OFFSET (перевод в dB SPL) | Переводит результат в dB SPL по чувствительности из даташита: −26 dBFS @ 94 dB SPL. |
Как считается уровень звука? dBFS и dB SPL
Звуковое давление меняется в очень широком диапазоне, поэтому используется логарифмическая шкала децибел: удвоение амплитуды — это примерно +6 dB, а увеличение в десять раз — +20 dB. Числа от микрофона сначала переводятся в dBFS (децибелы относительно полной шкалы): dBFS = 20 × log10(RMS / RMS полной шкалы). Полная шкала — это RMS синусоиды, пик которой достигает наибольшего 24-битного значения 8 388 608, то есть 8 388 608 / √2 ≈ 5 931 642. На этой шкале 0 dBFS — предел перегрузки микрофона, а любой более тихий звук получает отрицательное значение. Чтобы перейти к физическому звуковому давлению, dB SPL, используется чувствительность из даташита: INMP441 выдаёт звук 1 kHz уровнем 94 dB SPL как −26 dBFS. Отсюда формула dB SPL = dBFS + 94 − (−26) = dBFS + 120. Например, если RMS равно 5932, то dBFS = 20 × log10(0,001) = −60, а уровень звука — около 60 dB SPL, это уровень обычной речи.
| Источник звука | Примерно, dB SPL | dBFS на INMP441 |
|---|---|---|
| Собственный фоновый шум микрофона | 33 | −87 |
| Тихая комната | 40 | −80 |
| Обычная речь (1 м) | 60 | −60 |
| Плотное движение, пылесос | 70–80 | от −50 до −40 |
| Риск для слуха при долгом воздействии | 85 | −35 |
| Эталон для измерений (калибратор) | 94 | −26 |
| Дрель, место перед сценой на концерте | 100–110 | от −20 до −10 |
| Верхний предел микрофона (AOP) | 120 | 0 |
Рисуем форму волны в плоттере
Значение в децибелах говорит, насколько громкий звук; чтобы увидеть форму звука, нужно выводить на график «сырые» отсчёты. В том же скетче замени только функцию loop() на ту, что ниже. Здесь есть важное ограничение: последовательная линия на 115200 бод передаёт около 11 500 символов в секунду, а этого не хватает, чтобы выводить 16 000 отсчётов в секунду. Поэтому код выводит блок из 512 отсчётов подряд; звук, пришедший во время вывода блока, теряется, но каждый фрагмент в плоттере — это непрерывный, настоящий срез длиной 32 мс.
1// dB taslaginda loop() yerine bunu kullan / Use this instead of loop() in the dB sketch
2void loop() {
3 size_t n = micRead(samples, BLOCK);
4 for (size_t i = 0; i < n; i++) {
5 int32_t v = samples[i] >> 8; // 24 bit ham ornek / 24-bit raw sample
6 Serial.print("ses:");
7 Serial.println(v);
8 }
9}Если свистнуть в микрофон, в плоттере появится почти ровная синусоида. При свисте 1 kHz один период длится 1 мс и при дискретизации 16 kHz соответствует 16 точкам; посчитав точки в одном периоде, можно примерно оценить частоту. Речь — смесь многих частот, поэтому она рисует неровную волну с огибающей; хлопок даёт короткий и очень высокий пик. Плоттер масштабирует ось автоматически, поэтому в тишине мелкие колебания шума могут выглядеть крупными, это нормально. Подробнее о работе с монитором порта и плоттером — в статье монитор порта Arduino.
INMP441 с Raspberry Pi Pico (MicroPython)
У Raspberry Pi Pico нет отдельного блока I2S, но её программируемые блоки PIO эмулируют I2S на аппаратной скорости, а класс machine.I2S в MicroPython делает эту работу за тебя. Устанавливать дополнительные файлы не нужно: достаточно свежей версии MicroPython. В коде выбираются bits=32 и format=I2S.MONO, прочитанные отсчёты так же сдвигаются вправо на 8 бит и переводятся в децибелы по той же формуле. Циклы Python медленнее, чем C, поэтому размер блока в 512 отсчётов — хороший баланс; пропуск нескольких миллисекунд звука во время расчёта почти не влияет на результат. Если программировать Pico в Arduino IDE, ту же работу выполняет библиотека I2S из ядра arduino-pico; там тоже номер пина WS (LRCLK) должен быть на единицу больше номера пина BCLK. Если MicroPython в новинку, сначала загляни в статью Что такое Raspberry Pi Pico?.
1from machine import Pin, I2S
2import array
3import math
4
5SCK_PIN = 16 # INMP441 SCK
6WS_PIN = 17 # INMP441 WS (SCK + 1 olmali / must be SCK + 1)
7SD_PIN = 18 # INMP441 SD
8
9FS_RMS = 5931642.0 # 8388608 / sqrt(2): tam olcek sinus RMS / full-scale sine RMS
10DB_OFFSET = 120.0 # 94 dB SPL - (-26 dBFS)
11LN10 = math.log(10)
12
13mic = I2S(0, sck=Pin(SCK_PIN), ws=Pin(WS_PIN), sd=Pin(SD_PIN),
14 mode=I2S.RX, bits=32, format=I2S.MONO,
15 rate=16000, ibuf=8192)
16
17samples = array.array('i', [0] * 512) # 32 bit ornek dizisi / 32-bit sample array
18
19while True:
20 n = mic.readinto(samples) // 4 # okunan ornek sayisi / number of samples read
21 if n == 0:
22 continue
23 total = 0
24 for i in range(n):
25 samples[i] >>= 8 # 24 bit degeri ayikla / extract 24-bit value
26 total += samples[i]
27 mean = total / n # DC kaymasi / DC offset
28 sq = 0.0
29 for i in range(n):
30 d = samples[i] - mean
31 sq += d * d
32 rms = max(math.sqrt(sq / n), 1.0)
33 dbfs = 20 * math.log(rms / FS_RMS) / LN10
34 print("dBFS: {:.1f} dB SPL: {:.1f}".format(dbfs, dbfs + DB_OFFSET))INMP441 и аналоговый датчик звука KY-038

KY-038 — дешёвый модуль из электретного микрофонного капсюля, подстроечного резистора для настройки порога и компаратора LM393. Его цифровой выход (DO) меняет состояние, когда звук превышает заданный порог; аналоговый выход (AO) даёт «сырое» напряжение капсюля и читается АЦП платы. Такой конструкции достаточно, чтобы ловить хлопки или понимать, есть ли звук в комнате. Но усилителя в модуле нет, поэтому сигнал очень слабый: 10-битный АЦП Arduino Uno видит при речи изменение всего на несколько ступенек, а АЦП ESP32 шумный. INMP441 же выполняет измерение внутри микрофона с разрешением 24 бита; между ними нет аналогового провода, усилителя или АЦП, поэтому он чисто записывает диапазон около 87 dB — от фонового шума до предела перегрузки. Коротко: KY-038 — это звуковой выключатель, а INMP441 — настоящий микрофон. Ограничения аналогового чтения подробно описаны в руководстве по АЦП.
| Параметр | INMP441 | KY-038 |
|---|---|---|
| Тип микрофона | MEMS, цифровой выход | Электретный капсюль, аналоговый |
| Выход | I2S, 24-битные отсчёты | Аналоговое напряжение AO + пороговый выход DO |
| Питание | 1,8–3,3 V | 3,3–5 V |
| Совместимые платы | ESP32, Pico и платы с поддержкой I2S | Любая плата, включая Uno |
| Качество звука | Достаточное для записи и анализа (60 Hz – 15 kHz) | Только грубый уровень |
| Измерение в dB | Возможно по формуле | Ненадёжно |
| Типичное применение | Шумомер, запись звука, FFT, голосовые команды | Включение хлопком, сигнализация «есть звук / нет звука» |
Идеи проектов с INMP441
- Светодиоды, реагирующие на звук: преврати уровень звука в число горящих светодиодов на ленте WS2812B; подробности — в статьях светодиоды, реагирующие на музыку и WS2812B NeoPixel.
- Шумовой светофор для класса: сделай сигнальную лампу, которая горит зелёным ниже 55 dB, жёлтым при 55–70 dB и красным выше.
- Живая панель шума в браузере: отправляй значение dB в браузер по WebSocket и смотри график на телефоне; базовая структура — в статье веб-сервер ESP32 и WebSocket.
- Датчик шума для умного дома: передавай измерения в Home Assistant по MQTT; руководство ESP32, MQTT и Home Assistant упростит задачу.
- Оповещение о плаче ребёнка или лае собаки: если звук превышает порог дольше заданного времени, отправляй сообщение на телефон через Telegram-бота.
- Диктофон: записывай отсчёты в 16-битный WAV-файл на модуль SD-карты и слушай на компьютере.
- Управление свистом: найди доминирующую частоту с помощью FFT и включай светодиод или реле на определённом тоне свиста.
Частые ошибки и как их исправить
| Признак | Вероятная причина | Решение |
|---|---|---|
| Значение dB SPL застыло около −15,5 | С линии SD не приходят данные, все отсчёты равны 0 | Проверь провод SD и то, что L/R подключён к GND; если не помогло, переключи канал на правый (I2S_STD_SLOT_RIGHT на 3.x, I2S_CHANNEL_FMT_ONLY_RIGHT на 2.x) |
| При громком звуке значение не растёт, а прыгает случайно | SCK и WS перепутаны местами или провода слишком длинные | Исправь пины по таблице и укороти провода до 10–15 см и меньше |
| Ошибка при запуске «CONFLICT! The new i2s driver can't work along with the legacy i2s driver» (новый драйвер i2s не может работать вместе со старым) | На ядре 3.x старый driver/i2s.h использован вместе с новым драйвером | Используй один драйвер; конструкция #if здесь сама выбирает нужный |
| Значения dB отличаются от шумомера на 10–20 dB | Неверный битовый сдвиг, не убрано смещение DC или не выполнена калибровка | Поставь сдвиг на 8 бит, вычитай среднее, откалибруй по постоянному тону |
| ValueError при создании I2S на Pico | Номер пина WS не на единицу больше номера пина SCK | Используй соседние пины, например SCK = GP16, WS = GP17 |
| Микрофон греется или совсем не отвечает | VDD подключён к 5 V | Сразу переключи на 3V3; микрофон мог повредиться, попробуй новый |
| Волна в плоттере выглядит прерывистой | Последовательная линия не успевает передавать 16 000 отсчётов в секунду | Это нормально; для более плавной картинки подними скорость до 921600 бод |
Несколько проводов и короткий скетч — и INMP441 даёт ESP32 настоящий цифровой микрофон; это основа многих проектов, от измерения уровня звука до светильников, реагирующих на музыку. Когда хочется обрабатывать звук как числа, а не довольствоваться аналоговым датчиком, это первый выбор. В приложении BlueGrays есть пошаговые схемы и код проектов на ESP32 со светодиодами, зуммером, лентой WS2812B и веб-сервером, и этот микрофон легко добавить поверх них.
Частые вопросы
Работает ли INMP441 с Arduino Uno?
Нет, на практике не работает. У Arduino Uno и Nano нет аппаратного I2S, они работают с логикой 5 V, а 2 КБ ОЗУ не хватает для звукового буфера. Для INMP441 бери ESP32, ESP32-S3, Raspberry Pi Pico или другую плату на 3,3 V с поддержкой I2S.
Зачем нужен пин L/R у INMP441?
Пин L/R выбирает, какой канал стереокадра использует микрофон: левый при подключении к GND, правый при подключении к 3,3 V. Если соединить линии SCK, WS и SD двух INMP441 вместе и настроить один на левый канал, а другой на правый, получится стереозвук по одной шине I2S. Не оставляй пин «висящим»: показания будут нулевыми или нестабильными.
Можно ли записывать звук с INMP441?
Да. Если уменьшить 24-битные отсчёты до 16 бит и записать их на SD-карту с заголовком WAV, получится запись, которую можно прослушать на компьютере. Для речи достаточно дискретизации 16 kHz; минута 16-битной моно-записи занимает около 1,9 МБ.
Насколько точно INMP441 измеряет децибелы?
Расчёт по чувствительности −26 dBFS из даташита даже без калибровки даёт результат с точностью в несколько dB; допуск чувствительности микрофонов — ±1 dB. Расчёт не учитывает частотную коррекцию A, поэтому там, где много низкочастотного гула, показания могут быть выше, чем у шумомера. Если откалибровать его по известному источнику звука, для шума в комнате результаты будут очень хорошими, но официальный измерительный прибор он не заменит.
Что взять: INMP441 или KY-038?
Если нужно только поймать хлопок или громкий звук и что-то включить, хватит KY-038, и он работает с любой платой. Если хочется измерять уровень звука в dB, записывать звук, делать частотный анализ или собрать светильник, реагирующий на музыку, INMP441 даёт гораздо более чистый и точный результат.
Почему INMP441 на ESP32 всё время показывает 0?
Чаще всего причина в «висящем» пине L/R, в несовпадении канала в коде с настройкой микрофона или в проводе SD, вставленном не в тот пин. Сначала подключи L/R к GND, затем попробуй переключить канал в коде на правый. Также убедись, что ширина данных — 32 бита, а модуль питается от 3V3.
Что собрать после прочтения
Все проекты
Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

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

Плавное затухание светодиода с PWM на ESP32
Плавное изменение яркости светодиода от 0 до максимума и от максимума до 0. PWM управляется через analogWrite(), как в Arduino, — тот же синтаксис без проблем работает в ESP32 Arduino Core 3.0+. Достаточно определения пина, pinMode и analogWrite.

Мелодия на зуммере с ESP32
Воспроизведение простой мелодии (Twinkle Twinkle Little Star) на пассивном зуммере. Ноты играются функциями tone() и noTone(), как в Arduino, — ESP32 работает с тем же синтаксисом в Arduino Core 3.0+. Нужен пассивный зуммер (активный мелодию не сыграет).

Управление лентой WS2812B NeoPixel на ESP32
Адресуемые светодиоды WS2812B (NeoPixel) — умные RGB-светодиоды, которыми управляют цепочкой через один пин данных. В этом проекте лента WS2812B из 8 светодиодов управляется библиотекой Adafruit_NeoPixel и показывает плавную радужную анимацию. Логика 3,3V у ESP32 работает с большинством WS2812B, но на случай нестабильности показано решение с последовательным резистором 470Ω и конденсатором 1000µF. Анимация получается сдвигом значения оттенка.

Асинхронный веб-сервер на ESP32 (с выводом IP на LCD)
В этом проекте ESP32 превращается в асинхронный веб-сервер, которым можно управлять с телефона или компьютера в той же сети Wi-Fi. Благодаря библиотеке ESPAsyncWebServer сервер может обрабатывать несколько запросов одновременно (в отличие от классического WebServer.h, который блокируется на одном запросе). Открыв IP-адрес ESP32 в браузере, ты нажимаешь кнопки ON/OFF (маршруты /on и /off) и включаешь и выключаешь светодиод на GPIO 5.

Счётчик на WebSocket с ESP32 (2 кнопки + LCD + веб в реальном времени)
В этом проекте две кнопки, подключённые к ESP32 (GPIO 5 увеличивает, GPIO 4 уменьшает), меняют счётчик. Значение сразу обновляется и на I2C LCD 16x2, и — через поддержку WebSocket в ESPAsyncWebServer — во всех подключённых браузерах без перезагрузки страницы. Вместо опроса по HTTP используется одно постоянное соединение, и ESP32 отправляет новое значение всем через ws.textAll().

ESP32 HTTPClient + API погоды (с OLED-дисплеем SSD1306)
В этом проекте ESP32 через HTTPClient.h делает вызов REST API к сервису погоды (wttr.in). В отличие от прошлой версии с I2C LCD, здесь используется OLED SSD1306 (128×64), который позволяет крупные шрифты, векторные значки и богатую картинку на одном экране. Семь векторных значков погоды (солнечно, переменная облачность, облачно, дождь, снег, гроза, туман) рисуются во время работы (растровые файлы не нужны). Температура выводится крупными цифрами.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

