Build a room noise monitor with an ESP32, an INMP441 mic and ESPHome
Wire an INMP441 I2S mic to an ESP32, run ESPHome's sound_level sensor, and get a room sound level in Home Assistant you can graph and automate on. No cloud.
On this page
This build gives you a live sound level for one room in Home Assistant: an ESP32 development board, a digital I2S MEMS microphone (an INMP441 or ICS-43434 breakout), and ESPHome’s official sound_level sensor. The board reports a relative-dB reading over your LAN with no cloud and no account, so you can put it on a gauge or history graph and fire an automation when a nursery, a workshop, or a rental you want to keep quiet gets louder than a threshold you set. One thing to be precise about up front: measuring sound means measuring sound. Air quality monitors, leak sensors, and smart speakers don’t report a sound level you can graph, and most cheap “sound sensor modules” only output a crude loud/quiet trigger, not a meaningful reading. New to ESPHome? Start with my ESPHome guide for Home Assistant.
The local build: ESP32 + I2S microphone + ESPHome
No sensor most people already own reports a sound level; an air quality monitor, a motion sensor or a smart speaker has no decibel reading to pull. A dB-style trend you can chart and automate on needs a real microphone and software that computes a level from it.
ESPHome ships an official sound_level sensor that measures a microphone’s average and peak sound pressure level over a configurable window, paired with the i2s_audio microphone component (ESP32 only). That’s the whole recipe.
Hardware you need:
- An ESP32 development board (the classic ESP32, or an ESP32-S3 - I2S audio runs on ESP32-family chips).
- A digital I2S MEMS microphone such as an INMP441 or ICS-43434 breakout. These are inexpensive and far better behaved than analog modules.
- A handful of jumper wires.
Wire the mic’s I2S pins (bit clock, word select/LR clock, data, plus power and ground) to GPIOs on the ESP32, flash an ESPHome config that defines the i2s_audio microphone and a sound_level sensor reading from it, and the board reports a value to Home Assistant over your LAN. No cloud, no account.
A practical caveat from ESPHome’s own docs: audio components use significant RAM and CPU on the ESP32, so keep that device’s config lean - don’t pile a dozen other sensors and a display onto the same board.
What the reading means (and doesn’t)
ESPHome’s sound_level output is in relative dB, where 0 dB represents the loudest sound the microphone can capture and quieter sounds read as negative values. It is not a calibrated, A-weighted dB(A) figure like a certified sound-level meter, and you shouldn’t treat it as one for anything official. For home use - “is the room getting louder,” “did the dog start barking,” “is the shop above my comfort threshold” - a consistent relative reading is exactly what you want. If you need weighting or calibration-grade behavior, a community ESPHome sound-level-meter component adds A/C-weighting and custom microphone equalization beyond the official sensor.
Integrating and automating in Home Assistant
Because it’s ESPHome, the device shows up natively in Home Assistant the moment it’s adopted - no MQTT broker required (though MQTT is an option if you prefer it). From there:
- Add the sound-level entity to a dashboard with a gauge or history graph card to see live and historical levels.
- Build an automation that fires when the level crosses a threshold you’ve tuned for your room - flash a Philips Hue White A19, send a phone notification, or log the event.
- Use the long-term statistics Home Assistant records to spot patterns (the noisy hour of the day, the weekend spike). A noise monitor pairs well with the rest of your local home sensors.
Tune the threshold empirically: watch the reading during quiet and loud moments in that specific room, then set your trigger between them. Because the value is relative to the mic and its placement, a number that’s right for one room won’t transfer to another.
HomeKit and Hubitat
If you expose the ESP32 device’s sound-level entity through Home Assistant’s HomeKit bridge, you can view it in the Apple Home app, though Home Assistant remains the brain doing the work. Hubitat has no native equivalent to ESPHome’s sound sensor; the realistic path there is to run Home Assistant for the sensor and bridge what you need across, rather than expecting Hubitat to read a microphone directly.