Microfone I2S INMP441 com ESP32: ler áudio, medir dB e plotar a forma de onda
Ligue o microfone I2S INMP441 a um ESP32: tabela de ligação, áudio de 24 bits via I2S, cálculo do nível em dB, forma de onda no Plotter Serial e código MicroPython para o Pico.
O INMP441 é um pequeno módulo de microfone MEMS que converte o som para digital dentro do próprio chip e envia amostras de 24 bits diretamente pelo barramento I2S. A dupla INMP441 ESP32 é o jeito mais fácil de obter áudio limpo sem microfone analógico, amplificador ou ADC. Você liga o módulo ao ESP32 com seis fios, captura 16.000 amostras por segundo com poucas linhas de código I2S, calcula o nível sonoro do ambiente em decibéis (dB) a partir dessas amostras e acompanha a forma de onda do som ao vivo no Plotter Serial.
Neste guia você vai ver passo a passo como o INMP441 funciona, o que fazem as três linhas do I2S, um código pronto que compila tanto no core 2.x quanto no 3.x do ESP32 para Arduino, a diferença entre dBFS e dB SPL e a fórmula de um decibelímetro de verdade. No final você também encontra o uso com MicroPython no Raspberry Pi Pico, a diferença em relação ao barato sensor de som analógico KY-038 e os erros de ligação mais comuns.

O que é o INMP441 e como ele funciona?
O INMP441 é um microfone MEMS omnidirecional fabricado pela TDK InvenSense. MEMS, aqui, significa um minúsculo capacitor formado por uma membrana microscópica e uma placa fixa gravadas no silício: conforme as ondas sonoras fazem a membrana vibrar, a capacitância muda. Um microfone de eletreto clássico entrega essa variação como uma tensão analógica fraca, e você precisa amplificá-la, filtrá-la e medi-la com um ADC. Dentro do INMP441, porém, estão juntos um pré-amplificador, um filtro anti-aliasing, um ADC sigma-delta de 24 bits e a interface I2S. Ou seja, o que sai do microfone já não é uma tensão, e sim números que seguem um sinal de clock. Assim, nenhum ruído analógico é captado nos fios, a qualidade do ADC da sua placa deixa de importar e qualquer microcontrolador de 3,3 V adequado obtém a mesma qualidade de som. O pequeno furo no módulo é a entrada de som do microfone; tome cuidado para não tampá-lo ao montar a placa em uma caixa.
| Característica | Valor |
|---|---|
| Tipo | Microfone MEMS, omnidirecional, com saída digital |
| Interface | I2S, 24 bits, MSB primeiro, complemento de dois |
| Alimentação | 1,8–3,3 V |
| Corrente | Cerca de 1,4 mA |
| Sensibilidade | −26 dBFS (1 kHz, 94 dB SPL) |
| Relação sinal-ruído (SNR) | 61 dBA |
| Resposta em frequência | 60 Hz – 15 kHz |
| Ponto de sobrecarga acústica (AOP) | 120 dB SPL |
| Frequência do SCK | Cerca de 0,5–3,2 MHz (amostragem de cerca de 7,8–50 kHz) |
| Pinos do módulo | VDD, GND, SD, L/R, WS, SCK |
O que é I2S? Áudio digital em três linhas
I2S (Inter-IC Sound) é um barramento serial criado para transportar amostras de áudio entre chips e, apesar do nome parecido, não tem nada a ver com o I2C. Ele tem três linhas: SCK (clock de bit) indica quando cada bit de dado deve ser lido, WS (word select, também chamado de LRCLK) indica se naquele momento está sendo enviado o canal esquerdo ou o direito, e SD é o próprio dado. Nesta montagem o ESP32 é o mestre (master): ele gera os dois clocks, e o microfone segue o clock e coloca os dados na linha SD. No INMP441 cada quadro tem 64 pulsos de SCK: 32 bits para o canal esquerdo e 32 bits para o direito. Por isso a taxa de amostragem é SCK / 64; para amostrar a 16 kHz, o ESP32 gera um clock de bit de cerca de 1,024 MHz. O microfone escreve sua medição de 24 bits, com o MSB primeiro, no espaço de 32 bits do seu canal, e os 8 bits restantes ficam em zero. É por isso que o código desloca o valor 8 bits para a direita.
| Pino do INMP441 | Função |
|---|---|
| VDD | Alimentação, 1,8–3,3 V |
| GND | Terra |
| SCK | Entrada do clock de bit (vem da placa) |
| WS | Entrada do clock de seleção de canal (vem da placa) |
| SD | Saída de dados de áudio seriais (do microfone para a placa) |
| L/R | Seleção de canal: GND = canal esquerdo, VDD = canal direito |
Ligação do INMP441: ESP32 e Raspberry Pi Pico
| Pino do INMP441 | ESP32 | Raspberry Pi Pico |
|---|---|---|
| VDD | 3V3 | 3V3(OUT) (pino 36) |
| GND | GND | GND |
| SCK | GPIO 32 | GP16 |
| WS | GPIO 25 | GP17 |
| SD | GPIO 33 | GP18 |
| L/R | GND | GND |
No ESP32, os sinais I2S podem ser roteados para qualquer pino pela matriz de GPIO; os números 32, 25 e 33 da tabela não são obrigatórios, apenas escolhas seguras. Só fique longe dos pinos de strapping, que definem o comportamento na inicialização (GPIO 0, 2, 5, 12, 15), e dos GPIO 6–11, reservados para a memória flash. Os GPIO 34–39 são somente entrada, então servem para a linha SD, mas não podem ser usados para SCK e WS. No Pico a regra é diferente: o driver I2S do MicroPython usa PIO e o pino WS precisa ser o número seguinte ao pino SCK (como GP16 e GP17). Mantenha os fios com menos de 10–15 cm; um sinal de clock na faixa de megahertz se deforma em jumpers longos. Você pode conferir a disposição dos pinos da sua placa na ferramenta Pinagem.
Passo a passo: sua primeira leitura de áudio com o ESP32
- Verifique se o pacote de placas ESP32 está instalado no Arduino IDE e escolha ESP32 Dev Module em Ferramentas > Placa. Se você não sabe como instalar, veja O que é ESP32?.
- Encaixe o módulo na protoboard; ligue VDD ao 3V3, GND ao GND e L/R também ao GND.
- Ligue SCK ao GPIO 32, WS ao GPIO 25 e SD ao GPIO 33, e mantenha os fios curtos.
- Carregue o código abaixo. Nenhuma biblioteca extra é necessária: a ESP_I2S no core 3.x e a driver/i2s.h no core 2.x já vêm incluídas no pacote da placa.
- Abra o Monitor Serial a 115200 baud; em um cômodo silencioso você deve ver valores de cerca de 35–50 dB e, ao falar, algo em torno de 55–70 dB.
- Abra Ferramentas > Plotter Serial para acompanhar ao vivo as curvas de dBFS e dB SPL; bata palmas perto do microfone e veja a curva saltar.
Código para ESP32: medindo o nível sonoro (dB) com o INMP441
O código verifica a versão do core ESP32 para Arduino com ESP_ARDUINO_VERSION_MAJOR. Na versão 3.x ele usa a nova biblioteca ESP_I2S e, na 2.x, o driver I2S clássico do ESP-IDF. Os dois caminhos oferecem as mesmas funções micBegin() e micRead(), então o cálculo dentro de loop() não muda. A cada ciclo são lidas 512 amostras, ou seja, 32 ms de áudio a 16 kHz; o offset DC é removido, o valor RMS é calculado e convertido para decibéis.
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}| Trecho do código | O que faz |
|---|---|
| SAMPLE_RATE = 16000 (taxa de amostragem) | Captura 16.000 amostras por segundo; a frequência do SCK fica em 16.000 × 64 = 1,024 MHz. É suficiente para fala; para música você pode escolher 44.100 (SCK de cerca de 2,82 MHz). |
| Largura de dados de 32 bits | O INMP441 espera 64 pulsos de SCK por quadro de WS; se você escolher 16 bits, o quadro fica mais curto e os dados perdem o sentido. |
| MONO + LEFT / ONLY_LEFT (só o canal esquerdo) | Apenas o canal esquerdo é lido; como o pino L/R está ligado ao GND, o microfone usa o espaço do canal esquerdo. |
| samples[i] >>= 8 (deslocamento de bits) | Extrai a medição de 24 bits do espaço de 32 bits; o valor fica entre −8.388.608 e +8.388.607. |
| Subtração da média | Remove o pequeno offset DC do sinal; caso contrário, o RMS sai maior do que deveria. |
| rms (valor eficaz) | A raiz quadrada da média dos quadrados das amostras; representa a potência média do som. |
| dbfs + DB_OFFSET (conversão para dB SPL) | Converte o resultado para dB SPL usando a sensibilidade de −26 dBFS @ 94 dB SPL informada no datasheet. |
Como o nível sonoro é calculado? dBFS e dB SPL
Como a pressão sonora varia numa faixa muito ampla, usa-se a escala logarítmica de decibéis: dobrar a amplitude significa cerca de +6 dB, e multiplicá-la por dez significa +20 dB. Os números do microfone são primeiro convertidos para dBFS (decibéis em relação ao fundo de escala): dBFS = 20 × log10(RMS / RMS de fundo de escala). O fundo de escala é o RMS de uma senoide cujo pico atinge o maior valor de 24 bits, 8.388.608, ou seja, 8.388.608 / √2 ≈ 5.931.642. Nessa escala, 0 dBFS é o limite de saturação do microfone, e qualquer som mais baixo recebe um valor negativo. Para chegar à pressão sonora física, o dB SPL, usa-se a sensibilidade do datasheet: o INMP441 entrega um som de 1 kHz a 94 dB SPL como −26 dBFS. Daí vem a fórmula dB SPL = dBFS + 94 − (−26) = dBFS + 120. Por exemplo, se o valor RMS for 5.932, então dBFS = 20 × log10(0,001) = −60 e o nível sonoro fica em cerca de 60 dB SPL, que é o nível de uma conversa normal.
| Fonte sonora | dB SPL aprox. | dBFS no INMP441 |
|---|---|---|
| Piso de ruído do próprio microfone | 33 | −87 |
| Cômodo silencioso | 40 | −80 |
| Conversa normal (1 m) | 60 | −60 |
| Trânsito intenso, aspirador de pó | 70–80 | −50 a −40 |
| Risco auditivo com exposição prolongada | 85 | −35 |
| Referência de medição (calibrador) | 94 | −26 |
| Furadeira, frente do palco de um show | 100–110 | −20 a −10 |
| Limite superior do microfone (AOP) | 120 | 0 |
Plotando a forma de onda no Plotter Serial
O valor em decibéis diz o quanto o som está alto; para ver o formato do som, você precisa plotar as amostras brutas. No mesmo sketch, substitua apenas a função loop() pela de baixo. Há um limite importante aqui: uma linha serial de 115200 baud transporta cerca de 11.500 caracteres por segundo, o que não basta para imprimir 16.000 amostras por segundo. Por isso o código imprime um bloco de 512 amostras em sequência; o som que chega enquanto o bloco está sendo impresso é perdido, mas cada trecho que você vê no plotter é uma fatia real e contínua de 32 ms.
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}Ao assobiar perto do microfone, você verá no plotter uma senoide quase perfeita. Num assobio de 1 kHz, um período dura 1 ms e corresponde a 16 pontos com amostragem de 16 kHz; contando os pontos de um período, dá para estimar a frequência por alto. Como a fala é uma mistura de muitas frequências, ela desenha uma onda irregular, com envoltória; já uma palma produz um pico curto e muito alto. Como o plotter ajusta a escala do eixo automaticamente, pequenas oscilações de ruído podem parecer grandes no silêncio, o que é normal. Para detalhes de uso do Monitor Serial e do Plotter Serial, veja o post Monitor Serial do Arduino.
INMP441 com o Raspberry Pi Pico (MicroPython)
O Raspberry Pi Pico não tem uma unidade I2S dedicada, mas seus blocos programáveis PIO emulam o I2S na velocidade do hardware, e a classe machine.I2S do MicroPython faz esse trabalho por você. Não é preciso instalar nenhum arquivo extra; basta ter uma versão recente do MicroPython instalada. No código você escolhe bits=32 e format=I2S.MONO, e as amostras lidas são de novo deslocadas 8 bits para a direita e convertidas para decibéis com a mesma fórmula. Como os laços em Python são mais lentos que em C, manter o bloco em 512 amostras é um bom equilíbrio; perder alguns milissegundos de som enquanto o cálculo roda quase não afeta o resultado. Se você programa o Pico com o Arduino IDE, a biblioteca I2S do core arduino-pico faz o mesmo trabalho; lá também o pino WS (LRCLK) precisa ser o número seguinte ao pino BCLK. Se você é novo no MicroPython, dê uma olhada primeiro em O que é 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 x sensor de som analógico KY-038

O KY-038 é um módulo barato formado por uma cápsula de microfone de eletreto, um trimpot para ajustar o limiar e um comparador LM393. Sua saída digital (DO) muda de estado quando o som ultrapassa o limiar que você definiu; a saída analógica (AO) entrega a tensão bruta da cápsula e é lida com o ADC da placa. Esse arranjo basta para detectar palmas ou saber se há som no ambiente. Mas, como o módulo não tem amplificador, o sinal é muito fraco: o ADC de 10 bits do Arduino Uno enxerga apenas alguns degraus de variação durante a fala, e o ADC do ESP32 é ruidoso. Já o INMP441 faz a medição dentro do próprio microfone com 24 bits; como não há cabo analógico, amplificador ou ADC no meio, ele registra com limpeza uma faixa de cerca de 87 dB, do piso de ruído até o limite de saturação. Resumindo, o KY-038 é um interruptor de som, enquanto o INMP441 é um microfone de verdade. Você encontra os limites da leitura analógica em detalhes no guia de ADC.
| Característica | INMP441 | KY-038 |
|---|---|---|
| Tipo de microfone | MEMS, saída digital | Cápsula de eletreto, analógico |
| Saída | I2S, amostras de 24 bits | Tensão analógica AO + saída de limiar DO |
| Alimentação | 1,8–3,3 V | 3,3–5 V |
| Placas compatíveis | ESP32, Pico e placas com suporte a I2S | Qualquer placa, inclusive o Uno |
| Qualidade de som | Boa o suficiente para gravação e análise (60 Hz – 15 kHz) | Só um nível aproximado |
| Medição em dB | Possível com a fórmula | Não confiável |
| Uso típico | Medidor de ruído, gravação de áudio, FFT, comandos de voz | Interruptor por palmas, alarme de som presente/ausente |
Ideias de projetos com o INMP441
- LEDs que reagem ao som: transforme o nível sonoro na quantidade de LEDs acesos numa fita WS2812B; para detalhes, veja os posts LEDs que reagem à música e WS2812B NeoPixel.
- Semáforo de ruído para a sala de aula: monte uma luz de aviso que fica verde abaixo de 55 dB, amarela entre 55–70 dB e vermelha acima disso.
- Painel de ruído ao vivo na web: envie o valor em dB para o navegador via WebSocket e acompanhe em gráfico pelo celular; a estrutura básica está em Servidor web e WebSocket com ESP32.
- Sensor de ruído para casa inteligente: envie as medições para o Home Assistant via MQTT; o guia ESP32 com MQTT e Home Assistant facilita o trabalho.
- Alerta de choro de bebê ou latido de cachorro: se o som passar do limiar por um certo tempo, envie uma mensagem para o seu celular com um bot do Telegram.
- Gravador de áudio: grave as amostras como arquivo WAV de 16 bits num módulo de cartão SD e ouça no computador.
- Controle por assobio: encontre a frequência dominante com uma FFT e acione um LED ou relé com um tom de assobio específico.
Erros comuns e como resolvê-los
| Sintoma | Causa provável | Solução |
|---|---|---|
| O valor de dB SPL fica parado em torno de −15,5 | Nenhum dado chega pela linha SD, todas as amostras são 0 | Confira o fio SD e se o L/R está ligado ao GND; se não resolver, mude o canal para o direito (I2S_STD_SLOT_RIGHT no 3.x, I2S_CHANNEL_FMT_ONLY_RIGHT no 2.x) |
| O valor não sobe com som mais alto, salta aleatoriamente | SCK e WS estão trocados ou os fios estão longos demais | Corrija os pinos conforme a tabela e encurte os fios para menos de 10–15 cm |
| Erro “CONFLICT! The new i2s driver can't work along with the legacy i2s driver” na inicialização (conflito entre os drivers novo e antigo) | O antigo driver/i2s.h foi usado junto com o driver novo no core 3.x | Use um único driver; a estrutura #if deste código escolhe o certo automaticamente |
| Os valores em dB diferem 10–20 dB do decibelímetro | Deslocamento de bits errado, DC não removido ou calibração não feita | Use deslocamento de 8 bits, subtraia a média e calibre com um tom constante |
| ValueError ao criar o I2S no Pico | O pino WS não é o número seguinte ao pino SCK | Use pinos consecutivos, como SCK = GP16 e WS = GP17 |
| O microfone esquenta ou não responde | O VDD foi ligado em 5 V | Passe para o 3V3 imediatamente; o microfone pode ter sido danificado, então teste um novo |
| A forma de onda aparece picotada no Plotter Serial | A linha serial não consegue transportar 16.000 amostras por segundo | Isso é normal; para uma visualização mais fluida, aumente o baud rate para 921600 |
Com alguns fios e um sketch curto, o INMP441 dá ao seu ESP32 um microfone digital de verdade; ele é a base de muitos projetos, da medição do nível sonoro a luzes que reagem à música. Sempre que você quiser processar o som como números em vez de se contentar com um sensor analógico, ele é a primeira escolha. No app BlueGrays você pode seguir esquemas do circuito e códigos passo a passo de projetos com ESP32 usando LEDs, buzzers, fitas WS2812B e servidores web, e adicionar este microfone a eles com facilidade.
Perguntas frequentes
O INMP441 funciona com o Arduino Uno?
Não, na prática não. O Arduino Uno e o Nano não têm hardware I2S, trabalham com lógica de 5 V e 2 KB de RAM não bastam para um buffer de áudio. Para o INMP441, use um ESP32, ESP32-S3, Raspberry Pi Pico ou outra placa de 3,3 V com suporte a I2S.
Para que serve o pino L/R do INMP441?
O pino L/R escolhe qual canal do quadro estéreo o microfone usa: esquerdo se estiver ligado ao GND, direito se estiver ligado ao 3,3 V. Se você ligar juntas as linhas SCK, WS e SD de dois INMP441 e configurar um para a esquerda e outro para a direita, obtém áudio estéreo por um único barramento I2S. Não deixe o pino desconectado; as leituras ficam zeradas ou instáveis.
Dá para gravar áudio com o INMP441?
Sim. Se você reduzir as amostras de 24 bits para 16 bits e gravá-las num cartão SD com um cabeçalho WAV, obtém uma gravação que pode ser tocada no computador. Amostragem de 16 kHz é suficiente para fala; um minuto de gravação mono de 16 bits ocupa cerca de 1,9 MB.
Qual a precisão da medição em dB com o INMP441?
Um cálculo usando a sensibilidade de −26 dBFS do datasheet dá resultados com erro de poucos dB mesmo sem calibração; a tolerância de sensibilidade do microfone é de ±1 dB. Como o cálculo não tem ponderação A, ele pode marcar mais que um decibelímetro em ambientes com muito ronco de baixa frequência. Se você calibrar com uma fonte sonora conhecida, terá resultados muito bons para o ruído de um cômodo, mas ele não substitui um instrumento de medição oficial.
Devo comprar o INMP441 ou o KY-038?
Se você só quer detectar uma palma ou um som alto e acionar algo, o KY-038 basta e funciona com qualquer placa. Se quer medir o nível sonoro em dB, gravar áudio, fazer análise de frequência ou montar luzes que reagem à música, o INMP441 dá resultados muito mais limpos e precisos.
Por que o INMP441 sempre lê 0 no ESP32?
As causas mais comuns são o pino L/R desconectado, um canal no código que não corresponde à configuração do microfone e o fio SD encaixado no pino errado. Primeiro ligue o L/R ao GND e depois tente mudar o canal no código para o direito. Confira também se a largura de bits é de 32 bits e se o módulo está alimentado pelo 3V3.
Projetos para montar depois desta leitura
Ver todos os projetos
LED piscando com ESP32
Ensina o uso básico de uma saída GPIO no ESP32. Fazemos um LED piscar ligando e desligando um pino digital. É a versão para ESP32 do clássico projeto blink do Arduino UNO: os comandos básicos de blink no ambiente Arduino são os mesmos, mas a disposição dos pinos e os níveis de 3,3 V dos GPIOs do ESP32 diferem dos do Arduino UNO.

Uso do buzzer
Já se perguntou como uma campainha ou um alarme produz som? O Arduino faz um pequeno buzzer emitir bipes em intervalos curtos: bipe, pausa, bipe, pausa. Você vê como a eletricidade produz som e dá o p

Variação gradual do brilho do LED com PWM no ESP32
Varie suavemente o brilho do LED de 0 ao máximo e do máximo a 0. Controlamos o PWM com analogWrite(), como no Arduino. A mesma sintaxe funciona sem problemas com ESP32 Arduino Core 3.0+. Basta definir o pino e usar pinMode e analogWrite.

Melodia com buzzer e ESP32
Toque uma melodia simples (Brilha, brilha, estrelinha) com um buzzer passivo. Usamos as funções tone() e noTone() para tocar as notas, como no Arduino. A mesma sintaxe funciona com ESP32 Arduino Core 3.0+. É preciso usar um buzzer passivo, pois o ativo não toca melodias.

Controle de fita WS2812B NeoPixel com ESP32
Os LEDs endereçáveis WS2812B (NeoPixel) são LEDs RGB inteligentes que podem ser controlados em cadeia por um único pino de dados. Neste projeto, vamos controlar uma fita WS2812B de 8 LEDs com a biblioteca Adafruit_NeoPixel para criar uma animação suave de arco-íris. Embora o nível lógico de 3,3V do ESP32 funcione sem problemas na maioria dos lotes de WS2812B, vamos mostrar uma solução com um resistor de 470Ω em série e um capacitor de 1.000µF para casos de instabilidade.

Servidor web assíncrono com ESP32 (IP no LCD)
Neste projeto, transformamos o ESP32 em um servidor web assíncrono que você pode controlar pelo celular ou computador na mesma rede Wi-Fi. Com a biblioteca ESPAsyncWebServer, o servidor processa várias requisições ao mesmo tempo (ao contrário do WebServer.h tradicional, que bloqueia a execução ao processar uma requisição). Você poderá abrir o endereço IP do ESP32 no navegador e clicar nos botões ON/OFF (as rotas /on e /off) para ligar e desligar o LED conectado ao GPIO 5.

Contador WebSocket com ESP32 (2 botões + LCD + web em tempo real)
Neste projeto, dois botões conectados ao ESP32 (GPIO 5 aumenta, GPIO 4 diminui) alteram um contador. O valor é atualizado instantaneamente no LCD I2C 16x2 e, com o suporte a WebSocket do ESPAsyncWebServer, em todos os navegadores conectados, sem recarregar a página. Em vez de consultas periódicas por HTTP, usamos uma única conexão persistente, e o ESP32 envia o novo valor a todos com ws.textAll().

ESP32 HTTPClient + API de clima (com display OLED SSD1306)
Neste projeto, usamos o ESP32 para fazer uma chamada REST à API de clima wttr.in pela internet com HTTPClient.h. Diferentemente da versão anterior com LCD I2C, aqui usamos um display OLED SSD1306 (128×64), que permite usar fontes grandes, ícones vetoriais e uma apresentação visual rica em uma única tela. Sete ícones vetoriais de condições do tempo (ensolarado, parcialmente nublado, nublado, chuvoso, com neve, com tempestade e com neblina) são desenhados durante a execução, sem arquivos bitmap.
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

