Micro I2S INMP441 ESP32 : lire le son, mesurer les dB et la forme d'onde
Branche le micro I2S INMP441 à l'ESP32 : tableau des broches, lecture audio 24 bits, calcul des dB, forme d'onde au traceur série et code MicroPython pour le Pico.
Le INMP441 est un petit module de micro MEMS qui convertit le son en numérique directement à l'intérieur et envoie des échantillons de 24 bits via le bus I2S. Le duo INMP441 ESP32 est le moyen le plus simple d'obtenir un son propre sans micro analogique, sans amplificateur ni CAN. Tu relies le module à l'ESP32 avec six fils, tu récupères 16 000 échantillons par seconde avec quelques lignes de code I2S, tu calcules le niveau sonore ambiant en décibels (dB) et tu observes la forme d'onde en direct dans le traceur série.
Dans ce guide, tu vois pas à pas comment fonctionne l'INMP441, le rôle des trois lignes I2S, un code prêt à compiler avec les versions 2.x et 3.x du noyau Arduino ESP32, la différence entre dBFS et dB SPL et la formule d'un vrai sonomètre. À la fin, tu trouves l'utilisation avec le Raspberry Pi Pico en MicroPython, la différence avec le capteur de son KY-038 bon marché et les erreurs de câblage les plus courantes.

Qu'est-ce que l'INMP441 et comment fonctionne-t-il ?
L'INMP441, fabriqué par TDK InvenSense, est un micro MEMS omnidirectionnel (il entend de façon égale dans toutes les directions). Un MEMS est un minuscule condensateur formé d'une membrane microscopique gravée sur silicium et d'une plaque fixe : quand l'onde sonore fait vibrer la membrane, la capacité change. Dans un micro électret classique, cette variation sort sous forme d'une faible tension analogique que tu dois amplifier, filtrer et mesurer avec un CAN. Dans l'INMP441, le préamplificateur, le filtre anti-repliement, le CAN sigma-delta 24 bits et l'interface I2S sont réunis. Ce qui sort du micro n'est donc plus une tension, mais des nombres cadencés par une horloge. Le câble ne capte plus de bruit analogique, la qualité du CAN de la carte n'a plus d'importance et tout microcontrôleur 3,3 V adapté obtient la même qualité sonore. Le petit trou sur le module est l'entrée sonore du micro ; ne le bouche pas quand tu montes la carte dans un boîtier.
| Caractéristique | Valeur |
|---|---|
| Type | Micro MEMS omnidirectionnel à sortie numérique |
| Interface | I2S, 24 bits, bit de poids fort en premier, complément à deux |
| Alimentation | 1,8–3,3 V |
| Courant | Environ 1,4 mA |
| Sensibilité | −26 dBFS (1 kHz, 94 dB SPL) |
| Rapport signal/bruit (SNR) | 61 dBA |
| Réponse en fréquence | 60 Hz – 15 kHz |
| Pression acoustique maximale (AOP) | 120 dB SPL |
| Fréquence SCK | Environ 0,5–3,2 MHz (échantillonnage environ 7,8–50 kHz) |
| Broches du module | VDD, GND, SD, L/R, WS, SCK |
Qu'est-ce que l'I2S ? Du son numérique avec trois lignes
L'I2S (Inter-IC Sound) est un bus série conçu pour transporter des échantillons audio entre circuits ; malgré la ressemblance des noms, il n'a rien à voir avec l'I2C. Il comporte trois lignes : SCK (horloge de bit) indique quand lire chaque bit, WS (word select, aussi appelé LRCLK) indique si c'est le canal gauche ou droit qui est envoyé, et SD porte les données. Ici, l'ESP32 est le maître : il génère les deux horloges, et le micro place les données sur SD en suivant l'horloge. Sur l'INMP441, chaque trame compte 64 impulsions SCK : 32 bits pour le canal gauche, 32 bits pour le droit. La fréquence d'échantillonnage vaut donc SCK / 64 ; pour 16 kHz, l'ESP32 génère une horloge de bit d'environ 1,024 MHz. Le micro écrit sa mesure de 24 bits, bit de poids fort en premier, dans l'emplacement de 32 bits de son canal ; les 8 bits restants sont à zéro. C'est pourquoi, dans le code, on décale la valeur de 8 bits vers la droite.
| Broche INMP441 | Rôle |
|---|---|
| VDD | Alimentation, 1,8–3,3 V |
| GND | Masse |
| SCK | Entrée d'horloge de bit (venant de la carte) |
| WS | Entrée d'horloge de sélection de canal (venant de la carte) |
| SD | Sortie des données audio série (du micro vers la carte) |
| L/R | Choix du canal : GND = canal gauche, VDD = canal droit |
Branchement de l'INMP441 : ESP32 et Raspberry Pi Pico
| Broche INMP441 | ESP32 | Raspberry Pi Pico |
|---|---|---|
| VDD | 3V3 | 3V3(OUT) (broche 36) |
| GND | GND | GND |
| SCK | GPIO 32 | GP16 |
| WS | GPIO 25 | GP17 |
| SD | GPIO 33 | GP18 |
| L/R | GND | GND |
Sur l'ESP32, les signaux I2S peuvent être routés vers n'importe quelle broche via la matrice GPIO ; les numéros 32, 25 et 33 du tableau ne sont pas obligatoires, ce sont juste des choix sûrs. Évite seulement les broches de strapping qui déterminent le comportement au démarrage (GPIO 0, 2, 5, 12, 15) et les GPIO 6–11 réservés à la mémoire flash. Les GPIO 34–39 sont des entrées seules : ils conviennent pour SD, mais pas pour SCK et WS. Sur le Pico, la règle est différente : le pilote I2S de MicroPython utilise le PIO et la broche WS doit être celle qui suit la broche SCK (comme GP16 et GP17). Garde des fils de moins de 10–15 cm ; une horloge de l'ordre du mégahertz se dégrade sur de longs jumpers. Tu peux vérifier le brochage de ta carte avec l'outil de brochage.
Pas à pas : première lecture audio avec l'ESP32
- Vérifie que le paquet de cartes ESP32 est installé dans l'IDE Arduino et choisis ESP32 Dev Module dans le menu Outils > Type de carte. Si tu ne sais pas l'installer, lis Qu'est-ce que l'ESP32 ?.
- Place le module sur la breadboard ; relie VDD à 3V3, GND à GND et L/R à GND.
- Relie SCK au GPIO 32, WS au GPIO 25 et SD au GPIO 33, en gardant les fils courts.
- Téléverse le code ci-dessous. Aucune bibliothèque supplémentaire n'est nécessaire : ESP_I2S avec le noyau 3.x et driver/i2s.h avec le noyau 2.x sont déjà inclus dans le paquet de cartes.
- Ouvre le moniteur série à 115200 bauds ; tu dois voir environ 35–50 dB dans une pièce silencieuse et 55–70 dB quand tu parles.
- Ouvre Outils > Traceur série pour suivre en direct les courbes dBFS et dB SPL ; tape dans les mains près du micro et regarde la courbe bondir.
Code ESP32 : mesurer le niveau sonore (dB) avec l'INMP441
Le code vérifie la version du noyau Arduino ESP32 avec ESP_ARDUINO_VERSION_MAJOR. Avec la version 3.x, il utilise la nouvelle bibliothèque ESP_I2S ; avec la 2.x, le pilote I2S classique d'ESP-IDF. Les deux voies fournissent les mêmes fonctions micBegin() et micRead(), donc le calcul dans loop() ne change pas. À chaque boucle, 512 échantillons (soit 32 ms de son à 16 kHz) sont lus, le décalage continu est retiré, la valeur RMS est calculée puis convertie en décibels.
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}| Morceau de code | Ce qu'il fait |
|---|---|
| SAMPLE_RATE = 16000 | 16 000 échantillons par seconde ; la fréquence SCK vaut 16 000 × 64 = 1,024 MHz. Suffisant pour la voix ; pour la musique, tu peux choisir 44 100 (SCK environ 2,82 MHz). |
| Largeur de données 32 bits | L'INMP441 attend 64 impulsions SCK par trame WS ; si tu choisis 16 bits, la trame raccourcit et les données deviennent absurdes. |
| MONO + LEFT / ONLY_LEFT | Seul le canal gauche est lu ; comme L/R est à GND, le micro utilise l'emplacement gauche. |
| samples[i] >>= 8 | Extrait la mesure de 24 bits de l'emplacement de 32 bits ; la valeur va de −8 388 608 à +8 388 607. |
| Retrait de la moyenne | Supprime le petit décalage continu du signal ; sinon le RMS serait plus grand que la réalité. |
| rms | Racine carrée de la moyenne des carrés des échantillons ; représente la puissance moyenne du son. |
| dbfs + DB_OFFSET | Convertit le résultat en dB SPL grâce à la sensibilité de la fiche technique, −26 dBFS à 94 dB SPL. |
Comment calculer le niveau sonore ? dBFS et dB SPL
La pression acoustique varie sur une très large plage, on utilise donc l'échelle logarithmique des décibels : doubler l'amplitude ajoute environ 6 dB, la multiplier par dix ajoute 20 dB. Les nombres fournis par le micro sont d'abord convertis en dBFS (décibels par rapport à la pleine échelle) : dBFS = 20 × log10(RMS / RMS pleine échelle). La pleine échelle est la valeur RMS d'une sinusoïde dont le pic atteint la plus grande valeur 24 bits, 8 388 608, soit 8 388 608 / √2 ≈ 5 931 642. Sur cette échelle, 0 dBFS est la limite de saturation du micro et tout son plus faible a une valeur négative. Pour passer à la pression acoustique physique, c'est-à-dire aux dB SPL, on utilise la sensibilité de la fiche technique : l'INMP441 donne un son de 1 kHz à 94 dB SPL comme −26 dBFS. On en tire dB SPL = dBFS + 94 − (−26) = dBFS + 120. Par exemple, si le RMS vaut 5 932, dBFS = 20 × log10(0,001) = −60 et le niveau est d'environ 60 dB SPL, soit une conversation normale.
| Source sonore | dB SPL approximatif | dBFS sur l'INMP441 |
|---|---|---|
| Bruit de fond propre du micro | 33 | −87 |
| Pièce silencieuse | 40 | −80 |
| Conversation normale (1 m) | 60 | −60 |
| Trafic dense, aspirateur | 70–80 | −50 à −40 |
| Risque pour l'audition en cas d'exposition prolongée | 85 | −35 |
| Référence de mesure (calibreur) | 94 | −26 |
| Perceuse, devant la scène d'un concert | 100–110 | −20 à −10 |
| Limite haute du micro (AOP) | 120 | 0 |
Tracer la forme d'onde dans le traceur série
La valeur en décibels dit à quel point le son est fort ; pour voir sa forme, il faut tracer les échantillons bruts. Dans le même sketch, remplace seulement la fonction loop() par celle ci-dessous. Il y a une limite importante : une liaison série à 115200 bauds transporte environ 11 500 caractères par seconde, ce qui ne suffit pas pour afficher 16 000 échantillons par seconde. Le code affiche donc un bloc de 512 échantillons à la suite ; le son arrivant pendant l'écriture est perdu, mais chaque morceau que tu vois dans le traceur est un vrai extrait continu 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}Quand tu siffles dans le micro, tu vois dans le traceur une sinusoïde presque régulière. Pour un sifflement à 1 kHz, une période dure 1 ms et correspond à 16 points à 16 kHz d'échantillonnage ; en comptant les points d'une période, tu peux estimer grossièrement la fréquence. La voix étant un mélange de nombreuses fréquences, elle dessine une onde irrégulière avec une enveloppe ; un claquement de mains produit un pic bref et très élevé. Comme le traceur ajuste l'échelle automatiquement, de petites fluctuations de bruit peuvent sembler grandes dans le silence, c'est normal. Pour les détails sur le moniteur série et le traceur série, consulte l'article Moniteur série Arduino.
INMP441 avec le Raspberry Pi Pico (MicroPython)
Le Raspberry Pi Pico n'a pas d'unité I2S dédiée, mais ses blocs PIO programmables émulent l'I2S à vitesse matérielle et la classe machine.I2S de MicroPython fait le travail à ta place. Aucun fichier supplémentaire à installer ; il suffit d'avoir une version récente de MicroPython. Dans le code, on choisit bits=32 et format=I2S.MONO, les échantillons lus sont de nouveau décalés de 8 bits vers la droite et convertis en décibels avec la même formule. Les boucles Python étant plus lentes que le C, garder la taille de bloc à 512 échantillons est un bon compromis ; perdre quelques millisecondes de son pendant le calcul n'affecte guère le résultat. Si tu programmes le Pico avec l'IDE Arduino, la bibliothèque I2S du noyau arduino-pico fait le même travail ; là aussi, la broche WS (LRCLK) doit suivre la broche BCLK. Si tu débutes en MicroPython, lis d'abord Qu'est-ce que le 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))Différence entre l'INMP441 et le capteur de son analogique KY-038

Le KY-038 est un module bon marché composé d'une capsule de micro électret, d'un potentiomètre de réglage du seuil et d'un comparateur LM393. Sa sortie numérique (DO) change d'état quand le son dépasse le seuil que tu as réglé ; sa sortie analogique (AO) donne la tension brute de la capsule, que tu lis avec le CAN de la carte. Cette structure suffit pour détecter un claquement de mains ou savoir s'il y a du son dans la pièce. Mais comme le module n'a pas d'amplificateur, le signal est très faible : le CAN 10 bits de l'Arduino Uno ne voit que quelques pas de variation en parlant, et le CAN de l'ESP32 est bruité. L'INMP441, lui, fait la mesure en 24 bits à l'intérieur du micro ; comme il n'y a ni câble analogique, ni amplificateur, ni CAN entre les deux, il enregistre proprement une plage d'environ 87 dB, du bruit de fond jusqu'à la saturation. En résumé, le KY-038 est un interrupteur sonore, l'INMP441 est un vrai micro. Tu trouveras les limites de la lecture analogique dans le guide du CAN.
| Caractéristique | INMP441 | KY-038 |
|---|---|---|
| Type de micro | MEMS, sortie numérique | Capsule électret, analogique |
| Sortie | I2S, échantillons de 24 bits | Tension analogique AO + sortie à seuil DO |
| Alimentation | 1,8–3,3 V | 3,3–5 V |
| Cartes compatibles | ESP32, Pico et cartes avec I2S | Toutes les cartes, Uno compris |
| Qualité sonore | Suffisante pour l'enregistrement et l'analyse (60 Hz – 15 kHz) | Niveau approximatif seulement |
| Mesure en dB | Possible avec la formule | Pas fiable |
| Usage typique | Sonomètre, enregistrement audio, FFT, commande vocale | Interrupteur à claquement, alarme son présent/absent |
Idées de projets avec l'INMP441
- LED réactives à la musique : convertis le niveau sonore en nombre de LED allumées sur une bande WS2812B ; pour les détails, vois les articles LED réactives à la musique et WS2812B NeoPixel.
- Feu tricolore du bruit en classe : fabrique une lampe d'alerte verte sous 55 dB, jaune entre 55 et 70 dB et rouge au-dessus.
- Tableau de bruit en direct sur le web : envoie la valeur en dB au navigateur par WebSocket et suis un graphique depuis ton téléphone ; la structure de base est dans l'article ESP32 Web Server et WebSocket.
- Capteur de bruit pour maison connectée : envoie les mesures à Home Assistant via MQTT ; le guide ESP32 MQTT et Home Assistant te facilite la tâche.
- Alerte de pleurs de bébé ou d'aboiements : si le son dépasse le seuil pendant un certain temps, envoie un message sur ton téléphone avec un bot Telegram.
- Enregistreur audio : écris les échantillons en fichier WAV 16 bits sur un module carte SD et écoute-les sur l'ordinateur.
- Commande par sifflement : trouve la fréquence dominante avec une FFT et déclenche une LED ou un relais à une certaine note sifflée.
Erreurs fréquentes et solutions
| Symptôme | Cause probable | Solution |
|---|---|---|
| La valeur dB SPL reste figée autour de −15,5 | Aucune donnée n'arrive sur SD, tous les échantillons valent 0 | Vérifie le fil SD et que L/R est bien à GND ; sinon passe au canal droit (I2S_STD_SLOT_RIGHT en 3.x, I2S_CHANNEL_FMT_ONLY_RIGHT en 2.x) |
| La valeur n'augmente pas avec le son, elle saute au hasard | SCK et WS sont inversés ou les fils sont trop longs | Corrige les broches selon le tableau, ramène les fils sous 10–15 cm |
| Erreur « CONFLICT! The new i2s driver can't work along with the legacy i2s driver » au démarrage | L'ancien driver/i2s.h et le nouveau pilote sont utilisés ensemble avec le noyau 3.x | N'utilise qu'un seul pilote ; la structure #if ici choisit automatiquement le bon |
| Les valeurs dB diffèrent de 10–20 dB du sonomètre | Mauvais décalage de bits, DC non retiré ou pas de calibrage | Décale de 8 bits, retire la moyenne, calibre avec un son constant |
| ValueError à la création de l'I2S sur le Pico | La broche WS ne suit pas la broche SCK | Utilise des broches consécutives, par exemple SCK = GP16, WS = GP17 |
| Le micro chauffe ou ne répond pas du tout | VDD branché sur 5 V | Passe tout de suite sur 3V3 ; le micro est peut-être endommagé, essaie-en un nouveau |
| L'onde apparaît hachée dans le traceur série | La liaison série ne peut pas transporter 16 000 échantillons par seconde | C'est normal ; pour un affichage plus fluide, monte la vitesse à 921600 bauds |
Avec quelques fils et un code court, l'INMP441 offre à l'ESP32 un vrai micro numérique ; c'est la base de nombreux projets, de la mesure du niveau sonore aux lumières réactives à la musique. Chaque fois que tu veux traiter le son en nombres plutôt que de te contenter d'un capteur analogique, c'est le premier choix. Dans l'application BlueGrays, tu peux consulter pas à pas, avec schémas et code, des projets ESP32 avec LED, buzzer, bande WS2812B et serveur web, et y ajouter facilement ce micro.
Questions fréquentes
L'INMP441 fonctionne-t-il avec l'Arduino Uno ?
Non, en pratique ça ne marche pas. L'Arduino Uno et le Nano n'ont pas de matériel I2S, fonctionnent en logique 5 V et leurs 2 Ko de RAM sont insuffisants pour un tampon audio. Pour l'INMP441, utilise un ESP32, un ESP32-S3, un Raspberry Pi Pico ou une carte 3,3 V compatible I2S.
À quoi sert la broche L/R de l'INMP441 ?
La broche L/R choisit le canal que le micro utilise dans la trame stéréo : gauche si elle est reliée à GND, droit si elle est reliée à 3,3 V. Si tu relies ensemble les lignes SCK, WS et SD de deux INMP441 et que tu règles l'un à gauche et l'autre à droite, tu obtiens du son stéréo sur une seule ligne I2S. Ne laisse pas la broche en l'air ; les lectures seraient nulles ou instables.
Peut-on enregistrer du son avec l'INMP441 ?
Oui. Si tu réduis les échantillons de 24 à 16 bits et que tu les écris sur une carte SD avec un en-tête WAV, tu obtiens un enregistrement lisible sur l'ordinateur. Un échantillonnage à 16 kHz suffit pour la voix ; une minute d'enregistrement mono 16 bits occupe environ 1,9 Mo.
Quelle est la précision de la mesure en dB avec l'INMP441 ?
Le calcul basé sur la sensibilité de −26 dBFS de la fiche technique donne un résultat à quelques dB près même sans calibrage ; la tolérance de sensibilité des micros est de ±1 dB. Comme le calcul n'est pas pondéré A, il peut afficher plus que le sonomètre dans les environnements riches en bourdonnements graves. Calibré avec une source sonore connue, il donne de très bons résultats pour le bruit d'une pièce, mais ne remplace pas un appareil de mesure officiel.
Dois-je choisir l'INMP441 ou le KY-038 ?
Si tu veux seulement détecter un claquement de mains ou un son fort pour déclencher quelque chose, le KY-038 suffit et fonctionne avec toutes les cartes. Pour mesurer le niveau sonore en dB, enregistrer du son, faire une analyse de fréquence ou des lumières réactives à la musique, l'INMP441 donne un résultat bien plus propre et précis.
Pourquoi l'INMP441 lit-il toujours 0 sur l'ESP32 ?
Les causes les plus fréquentes sont la broche L/R laissée en l'air, un canal dans le code qui ne correspond pas au réglage du micro et le fil SD branché sur la mauvaise broche. Relie d'abord L/R à GND, puis essaie de passer le canal du code à droite. Vérifie aussi que la largeur de bits est de 32 bits et que le module est alimenté en 3V3.
Projets à réaliser après cet article
Voir tous les projets
Clignotement LED avec ESP32
Enseigne l'utilisation de base des sorties GPIO avec l'ESP32. Nous obtenons un effet de clignotement en allumant et éteignant une LED à partir de la broche numérique. Version ESP32 du projet blink classique sur Arduino UNO ; les commandes de base de blink dans l'environnement Arduino restent les mêmes, mais le brochage et les niveaux GPIO de 3,3 V de l'ESP32 diffèrent de ceux de l'Arduino UNO.

Utilisation du buzzer
Tu t'es déjà demandé comment une sonnette ou une alarme produit son son ? L'Arduino fait biper un petit buzzer à intervalles courts : bip, silence, bip, silence. Tu vois comment l'électricité devient

ESP32 LED Fade avec PWM
Modifiez la luminosité de la LED en douceur de 0 à max, de max à 0. Nous contrôlons le PWM avec analogWrite() comme dans Arduino - la même syntaxe avec ESP32 Arduino Core 3.0+ fonctionne sans problème. La définition du pin + pinMode + analogWrite est suffisante.

ESP32 Lecture de mélodies avec buzzer
Jouer une mélodie simple (Twinkle Twinkle Little Star) avec un buzzer passif. Nous jouons les notes avec les fonctions tone() et noTone() comme dans Arduino - la même syntaxe fonctionne avec ESP32 Arduino Core 3.0+. Un buzzer passif doit être utilisé (un buzzer actif ne joue pas la mélodie).

Contrôle d'une bande NeoPixel WS2812B avec l'ESP32
Les LED adressables WS2812B (NeoPixel) sont des LED RGB intelligentes pouvant être contrôlées en série via une seule broche de données. Dans ce projet, nous allons contrôler une bande WS2812B de 8 LED à l'aide de la bibliothèque Adafruit_NeoPixel afin de créer une animation fluide représentant un arc-en-ciel. Bien que le niveau logique 3,3 V de l'ESP32 fonctionne sans problème avec la plupart des composants WS2812B, nous présenterons une solution comprenant une résistance en série de 470 Ω et un

Serveur Web asynchrone ESP32 (avec affichage de l'adresse IP sur l'écran LCD)
Dans ce projet, nous transformons l'ESP32 en un serveur web asynchrone que vous pouvez contrôler depuis votre téléphone ou votre ordinateur connecté au même réseau Wi-Fi. Grâce à la bibliothèque ESPAsyncWebServer, le serveur peut traiter plusieurs requêtes simultanément (contrairement au classique WebServer.h qui se bloque sur une seule requête). Depuis votre navigateur, vous pourrez vous connecter à l'adresse IP de l'ESP32, puis allumer et éteindre la LED co

Compteur ESP32 WebSocket (2 boutons + écran LCD + affichage Web en temps réel)
Dans ce projet, deux boutons reliés à l'ESP32 (GPIO 5 incrémente, GPIO 4 décrémente) modifient un compteur. La valeur se met à jour instantanément sur un écran LCD I2C 16x2 et, grâce au support WebSocket d'ESPAsyncWebServer, dans tous les navigateurs connectés sans recharger la page. Au lieu du polling HTTP, une seule connexion persistante est utilisée et l'ESP32 envoie la nouvelle valeur à tous avec ws.textAll().

ESP32 HTTPClient + API météo (avec écran OLED SSD1306)
Dans ce projet, nous effectuons un appel à l'API REST de la météo (wttr.in) via Internet à l'aide de l'ESP32 et de la bibliothèque HTTPClient.h. Contrairement à la version précédente avec écran LCD I2C, nous utilisons ici un écran OLED SSD1306 (128×64) — ce qui permet d’afficher une police de grande taille, des icônes vectorielles et une présentation visuelle riche sur un seul écran. Sept icônes vectorielles différentes représentant les conditions météorologiques (ensoleillé, partiellement nua
Autres articles
Application BlueGrays
Réalise ce montage pas à pas sur ton téléphone
Schéma, code et liste des composants sur un seul écran. Plus de 200 projets Arduino, ESP32 et Pico à réaliser.
Scanne avec ton téléphone
Pointe l’appareil photo vers le code : la boutique d’applications de ton téléphone s’ouvre.
ou ouvre la boutique

