Aller au contenu
Voir dans l’app

Une meilleure façon de naviguer. Voir plus.

Forum Domotique

Une application en plein écran, avec notifications, badges et accès direct depuis l’accueil.

Pour installer cette application sur iOS et iPadOS
  1. Touchez l’icône de partage dans Safari.
  2. Faites défiler le menu et touchez Ajouter à l’écran d’accueil.
  3. Touchez Ajouter en haut à droite.
Pour installer cette application sur Android
  1. Appuyez sur le menu ⋮ en haut à droite du navigateur.
  2. Appuyez sur Ajouter à l'écran d'accueil ou Installer l'application
  3. Confirmez en appuyant sur Installer.

Sonomètre DIY pour Home Assistant avec ESP32 et INMP441

Featured Replies

Posté(e)

Je souhaitais mesurer et enregistrer des statistiques dans HA le niveau sonore en extérieur. N'ayant rien trouvé de pertinent en Zigbee je me suis tourné vers un ESP32 et un micro pour faire un montage DY.
L'inconvénient principal est d'être obligé d'alimenter le module au secteur, je vais essayer de mettre une petite batterie mais je crains que l'autonomie ne soit pas au rendez-vous.
Alors petit retour d'expérience, cela se fait assez simplement.

Pour ceux ou celles qui veulent s'essayer voilà le matériel que j'ai utilisé :

  • un module AZDelivery ESP32 NodeMCU - 10€

  • un micro omnidirectionnel INMP441 AYWHP - 10€

Voilà l'intégration dans HA pour calibrer les valeurs

Capture d’écran 2025-09-20 à 19.14.15.png.Capture d’écran 2025-09-21 à 04.04.58.png

Modifié par filoo

Posté(e)
  • Auteur

Ça marche.

PARTIE I

On commence par le matériel nécessaire :

  • Carte ESP32 (ici ce sera AZDelivery ESP32 NodeMCU)

  • Micro numérique type INMP441

  • Fils électrique et si comme moi on n'est pas doué pour les soudures des câbles Dupont Breadboard femelle/femelle. (pas trop long)

  • Cable USB microUSB (qui transporte la DATA) et un chargeur de téléphone ou une batterie.

  • BONUS : un écran de type TM1637 (pas nécessaire mais tellement simple et fun).

  • Mais malheureusement il faudra faire quelques soudures donc un fer à souder. Trouver de la pâte à souder, j'ai fait sans et je ne vous montrerais pas de photos, une cata.

En images :

Capture d’écran 2025-09-21 à 19.01.41.png

Capture d’écran 2025-09-21 à 18.56.55.pngCapture d’écran 2025-09-21 à 18.59.39.png

Capture d’écran 2025-09-21 à 19.03.15.pngCapture d’écran 2025-09-21 à 19.04.49.png

PARTIE II

Montage et branchement.

Le plus délicat est de souder les pins sur le module micro. J'y suis arrivé et je suis une buse en soudure.
Casser en deux la barette de 6 pins et souder les côtés courts qui se trouveront côté micro. Ou directement de petits fils électrique.

Branchement :

INMP441 ESP32 NodeMCU (AZDelivery)

VDD ---> 3.3V
GND ---> GND
SCK ---> GPIO14
WS ---> GPIO15
SD ---> GPIO32
L/R ---> GND

PARTIE III

Initialisation de la carte ESP32 pour la faire fonctionner sur Home Assistant.
Je vous renvoie sur plusieurs tutos très bien fait disponibles comme : Abrège et Arminas

Une fois fait, il vous faudra rajouter des lignes de codes au module sous ESP Home builder.
Je présente les codes que j'ai ajouté, ce sont des exemples avec le matériel que j'ai utilisé.

Au départ vous devez avoir quelques chose qui ressemble à ça. Cela peut-être différent suivant la méthode d'initialisation mais ça ressemble toujours un peu à ça.

esphome:
  name: esphome-web-b4796c
  friendly_name: ESP_SON
  min_version: 2025.9.0
  name_add_mac_suffix: false

esp32:
  variant: esp32
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Si vous avez conservé les indications GPIO 14, GPIO 15, voilà le code à rajouter :

Sous api:


# Enable Home Assistant API
api:
  services:
    - service: set_bruit_gain
      variables:
        value: float
      then:
        - lambda: |-
            id(bruit_gain) = value;

    - service: set_bruit_offset
      variables:
        value: float
      then:
        - lambda: |-
            id(bruit_offset) = value;

#Et on rajoute tout le reste à la suite

# --- I2S bus (global) ---
i2s_audio:
  id: i2s_in
  i2s_lrclk_pin: GPIO15
  i2s_bclk_pin: GPIO14

# --- Microphone (INMP441) ---
microphone:
  - platform: i2s_audio
    id: mic_in
    i2s_audio_id: i2s_in
    adc_type: external
    i2s_din_pin: GPIO32
    channel: left
    sample_rate: 16000
    bits_per_sample: 32bit
    correct_dc_offset: true
    pdm: false

# --- Variables globales pour calibration ---
globals:
  - id: bruit_gain
    type: float
    restore_value: yes
    initial_value: '1.0'
  - id: bruit_offset
    type: float
    restore_value: yes
    initial_value: '60.0'

# --- Capteurs : RMS + Peak ---
sensor:
  - platform: sound_level
    microphone: mic_in
    passive: false
    measurement_duration: 1000ms
    rms:
      name: "Bruit ambiant (RMS brut dBFS)"
      id: bruit_rms
      unit_of_measurement: "dB"
      accuracy_decimals: 1
    peak:
      name: "Bruit ambiant (Peak brut dBFS)"
      id: bruit_peak
      unit_of_measurement: "dB"
      accuracy_decimals: 1

  - platform: template
    name: "Bruit ambiant calibré"
    id: bruit_calibre
    unit_of_measurement: "dB"
    accuracy_decimals: 1
    update_interval: 1s
    lambda: |-
      if (isnan(id(bruit_rms).state)) return NAN;
      return id(bruit_rms).state * id(bruit_gain) + id(bruit_offset);

  # Capteur calibré + lissé
  - platform: template
    name: "Bruit ambiant calibré lissé"
    id: bruit_calibre_lisse
    unit_of_measurement: "dB"
    accuracy_decimals: 1
    update_interval: 1s
    lambda: |-
      if (isnan(id(bruit_rms).state)) return NAN;
      return id(bruit_rms).state * id(bruit_gain) + id(bruit_offset);
    filters:
      - exponential_moving_average:
          alpha: 0.05     # plus petit = plus lissé
          send_every: 1

Vous vous retrouvez avec 4 capteurs sous ESPHome HA :

  • "Bruit ambiant (RMS brut dBFS)" - Valeur négative

  • "Bruit ambiant (Peak brut dBFS)" - valeur négative

  • "Bruit ambiant calibré" - Valeur calibré initialement avec une valeur offset à 60.

  • "Bruit ambiant calibré lissé" - Valeur calibré également avec un offset à 60.

Capture d’écran 2025-09-22 à 06.25.40.png

PARTIE IV

Intégration dans Home Assistant

À coller dans configuration.yaml

# Valeurs calibrage son
input_number:
  bruit_gain:
    name: Gain bruit
    initial: 1.0
    min: 0.1
    max: 5.0
    step: 0.1

  bruit_offset:
    name: Offset bruit
    initial: 60
    min: 0
    max: 150
    step: 1

On rajoute une carte Lovelace :

type: entities
title: Calibration bruit
entities:
  - entity: input_number.bruit_gain
    name: Gain
  - entity: input_number.bruit_offset
    name: Offset
  - entity: sensor.bruit_ambiant_calibre
    name: Bruit calibré

Capture d’écran 2025-09-20 à 19.14.15.png

On rajoute une carte mini-graphe-card

type: custom:mini-graph-card
entities:
  - entity: sensor.esphome_web_b4796c_bruit_ambiant_calibre
    name: Bruit ambiant
name: Bruit calibré
icon: mdi:ear-hearing
hours_to_show: 12
points_per_hour: 4
hour24: true
show:
  graph: line
  icon: true
  name: true
  state: true
  extrema: true
  average: true
  labels: true
  grid: true
smoothing: true
line_width: 1
decimals: 1
height: 160
color_thresholds:
  - value: 30
    color: "#4CAF50"
  - value: 33
    color: "#FFC107"
  - value: 45
    color: "#F44336"

Capture d’écran 2025-09-22 à 19.18.09.png

Modifié par filoo

Posté(e)
  • Auteur

Mise à jour pour la partie IV (intégration dans HA)

Merci CedricMD, très franchement je ne pensais que cela allez fonctionner aussi simplement.
Le plus "chiant" ce sont les soudures, je n'arrive pas à faire quelque chose de propre. Mais je viens de me renseigner et j'ai apparemment du fil étain de très mauvaise qualité.

Modifié par filoo

Posté(e)
  • Auteur

BONUS ÉCRAN TM1637

Je pense qu'on peut utiliser l'alimentation 5v du même ESP32 en même temps que le micro en 3,3v.
Pour faire le test, j'ai utilisé un autre esp32 équipé déjà d'un TM1637 et surcharger de diodes.

Rajouter les lignes suivante dans la config du ESP via EspHome Builder.

# TM 1637
display:
    platform: tm1637
    id: tm1637_display
    clk_pin: GPIO18
    dio_pin: GPIO5
    inverted: true
    intensity: 0
    length: 4
    lambda: |-
      it.printf(0, "%2.0fdb", id(son_db).state);

# Niveau db
sensor:
  - platform: homeassistant
    id: son_db
    name: "Bruit ambient"
    entity_id: sensor.esphome_web_b4796c_bruit_ambiant_calibre

Et vous obtenez ceci :

IMG_1418.JPG

Posté(e)
Il y a 21 heures, filoo a dit :

Le plus "chiant" se sont les soudures, je n'arrive pas à faire quelque chose de propre. Mais je viens de me renseigner et j'ai apparemment du fil étain de très mauvaise qualité.

Ah les soudures m'en parle pas, c'est pas mon truc non plus 🤪

Posté(e)
  • Auteur

Prototype qui restera prototype.

IMG_1419.JPG

IMG_1420.JPG

  • 5 mois plus tard...
Posté(e)

Bonjour,

En premier lieu j'aimerai vous remercier pour ce tuto très intéressant.

Par contre si je viens vous voir c'est que chez moi cela ne marche pas pourtant j'ai tout bien suivis.

Dans home assistant il me dit sensor.bruit_ambiant_calibre Entité non trouver.

Pour mon ESP32 j'ai acheter celui la : https://www.amazon.fr/dp/B071P98VTG?ref=ppx_yo2ov_dt_b_fed_asin_title&th=1

AZDelivery ESP32 NodeMCU Module WLAN WiFi Dev Kit C Development Board avec CP2102 (successeur de ESP8266) Compatible avec Arduino incluant Un E-Book!

Lors de l'installation j'ai choisis esp32 normal pas de modèle s2 / s3 ou autre ( c'est Gemini qui ma donner cette info je sais pas si elle est juste ).

Pour le micro j'ai eu beaucoup de mal a faire les soudures mais j'ai tester avec un multimètre pour voir si je n'avais pas de soucis et tout les câbles sont bien fait par contre j'ai eu un peut d'étain sur le micro donc je sais pas si il n'a pas eu de soucis ou si cela viens de la config ou d'autre chose.

Merci d'avance ( C'est mon premier ESP32 j'ai un peut de mal car je découvre )

Pour les logs de ESP Home :

13:08:57.167][C][esphome.ota:075]: Over-The-Air updates: [13:08:57.167][C][esphome.ota:075]: Address: esp32-micro.local:3232 [13:08:57.167][C][esphome.ota:075]: Version: 2 [13:08:57.167][C][esphome.ota:082]: Password configured [13:08:57.173][C][safe_mode:022]: Safe Mode: [13:08:57.173][C][safe_mode:022]: Successful after: 60s [13:08:57.173][C][safe_mode:022]: Invoke after: 10 attempts [13:08:57.173][C][safe_mode:022]: Duration: 300s [13:08:57.192][C][safe_mode:039]: Bootloader rollback: support unknown [13:08:57.192][C][web_server.ota:238]: Web Server OTA [13:08:57.200][C][api:237]: Server: [13:08:57.200][C][api:237]: Address: esp32-micro.local:6053 [13:08:57.200][C][api:237]: Listen backlog: 4 [13:08:57.200][C][api:237]: Max connections: 8 [13:08:57.209][C][api:244]: Noise encryption: YES [13:08:57.209][C][mdns:177]: mDNS: [13:08:57.209][C][mdns:177]: Hostname: esp32-micro [13:08:57.216][D][sensor:118]: 'Bruit ambiant calibré' >> -inf dB [13:08:57.227][C][sound_level:022]: Sound Level Component: [13:08:57.227][C][sound_level:022]: Measurement Duration: 1000 ms [13:08:57.227][C][sound_level:017]: Peak: 'Bruit ambiant (Peak brut dBFS)' [13:08:57.227][C][sound_level:017]: State Class: 'measurement' [13:08:57.227][C][sound_level:017]: Unit of Measurement: 'dB' [13:08:57.227][C][sound_level:017]: Accuracy Decimals: 1 [13:08:57.233][C][sound_level:163]: Device Class: 'sound_pressure' [13:08:57.248][C][sound_level:017]: RMS: 'Bruit ambiant (RMS brut dBFS)' [13:08:57.248][C][sound_level:017]: State Class: 'measurement' [13:08:57.248][C][sound_level:017]: Unit of Measurement: 'dB' [13:08:57.248][C][sound_level:017]: Accuracy Decimals: 1 [13:08:57.249][C][sound_level:163]: Device Class: 'sound_pressure' [13:08:57.477][D][sensor:118]: 'Bruit ambiant (Peak brut dBFS)' >> -inf dB [13:08:57.530][D][sensor:118]: 'Bruit ambiant (RMS brut dBFS)' >> -inf dB [13:08:58.100][D][sensor:118]: 'Bruit ambiant calibré lissé' >> -inf dB [13:08:58.215][D][sensor:118]: 'Bruit ambiant calibré' >> -inf dB [13:08:58.459][D][sensor:118]: 'Bruit ambiant (Peak brut dBFS)' >> -inf dB [13:08:58.459][D][sensor:118]: 'Bruit ambiant (RMS brut dBFS)' >> -inf dB [13:08:59.104][D][sensor:118]: 'Bruit ambiant calibré lissé' >> -inf dB [13:08:59.223][D][sensor:118]: 'Bruit ambiant calibré' >> -inf dB [13:08:59.463][D][sensor:118]: 'Bruit ambiant (Peak brut dBFS)' >> -inf dB [13:08:59.474][D][sensor:118]: 'Bruit ambiant (RMS brut dBFS)' >> -inf dB

Posté(e)

Salut @Cyberdr3am

Montre-moi ton fichier YAML complet (surtout les parties i2s_audio:, microphone:, sound_level:). Sans ça, c’est dur de pointer exactement le problème.

Colle-le ici (masque les secrets wifi ).

Rejoindre la conversation

Vous pouvez commenter maintenant et vous inscrire plus tard. Si vous possédez un compte, connectez-vous.

Invité
Répondre à ce sujet…

Compte

Navigation

Rechercher

Rechercher

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.