iot101 / ESP32-S3 + INMP441

声音波形可视化
入门教程

面向新手小白的零基础指南,跟着步骤一步步做,就能轻松完成搭建,顺利点亮项目,点燃孩子对科技探索的兴趣。

波形 频谱 估算分贝
ESP32-S3 声音可视化项目宣传海报
1

第 1 步:购买硬件

先把三样基础硬件准备好,后面的接线和测试会顺很多。

购物清单

硬件规格参考价格硬件图(点击放大)
单片机 ESP32-S3 淘宝约 60 元 ESP32-S3 硬件图
数字麦克风 INMP441 淘宝约 6.5 元 INMP441 硬件图
面包板 普通实验面包板 淘宝约 13.6 元 MB-102 面包板硬件图
下单前确认:ESP32-S3 开发板要带 USB 接口,INMP441 请选择数字 I2S 麦克风模块。面包板用来免焊接线,适合先做实验。
2

第 2 步:认识零件

先知道 ESP32-S3、INMP441 和面包板各自负责什么。

ESP32-S3 是什么

ESP32-S3 可以理解成一台很小的电脑。它能读传感器、连 WiFi、开网页,还能把数据发给浏览器。

在这个项目里,ESP32-S3 负责三件事:

  1. 给 INMP441 提供 I2S 时钟。
  2. 读取麦克风传来的数字声音。
  3. 把声音数据通过 WiFi 发给浏览器。

官方文档:https://docs.waveshare.net/ESP32-S3-DEV-KIT-N8R8/

INMP441 是什么

INMP441 是 I2S 数字麦克风。它和很多普通“声音传感器模块”不一样:

  • 普通模拟麦克风输出电压变化。
  • INMP441 直接输出数字音频数据。

INMP441 引脚

引脚作用接哪里
VDD电源ESP32 的 3V3
GNDESP32 的 GND
SCKI2S 时钟一个普通 GPIO
WS左右声道时钟一个普通 GPIO
SD音频数据输出一个普通 GPIO
L/R左右声道选择先接 GND

面包板是什么

面包板是一块不用焊接的实验板。你可以把 ESP32-S3、INMP441 和杜邦线插在上面,方便反复调整接线。

使用时注意同一排小孔通常是连在一起的,但中间凹槽两边默认不连通。接线前先看清楚行列方向,能少很多排查时间。

面包板
小朋友可以这样理解:声音像水波一样在空气里传。麦克风像小耳朵,把空气里的波变成数字。ESP32 像小邮差,把这些数字送到浏览器。浏览器像画板,把数字画成波形。
3

第 3 步:接线

接线前先断电,默认使用 GPIO5、GPIO6、GPIO4。

先断电:接线前先把 ESP32-S3 从 USB 拔下来。接完线、检查一遍,再插 USB。

默认接线

INMP441ESP32-S3
VDD3V3
GNDGND
SCKGPIO5
WSGPIO6
SDGPIO4
L/RGND
ESP32 引脚布局
最终的样子样式

检查清单

  • VDD 接的是 3V3,不是 5V。
  • INMP441 的 GND 和 ESP32 的 GND 已经相连。
  • SCK、WS、SD 三根线没有插错行。
  • 面包板中间断开的两边不要误以为连通。
4

第 4 步:Arduino IDE 设置

选择 ESP32-S3 开发板,并打开串口监视器。

IDE 安装

下载地址:https://www.arduino.cc/en/software

开发板

在 Arduino IDE 里选择:

  • ESP32S3 Dev Module

如果你的 Arduino IDE 里有更准确的 Waveshare ESP32-S3 选项,也可以选对应选项。拿不准时,先用 ESP32S3 Dev Module

推荐工具设置

选项推荐值
USB CDC On BootEnabled
Flash Size8MB
PSRAMOPI PSRAM 或 Enabled
Upload Speed460800 或 921600
Port选择插入 ESP32 后出现的端口

如果上传不稳定,把 Upload Speed 降到 460800

串口监视器

打开串口监视器,波特率选择:

115200

你会看到 ESP32 打印出来的启动信息、WiFi 地址、WebSocket 连接状态。

5

第 5 步:先跑麦克风串口测试

确认声音数据会变化,再进入网页步骤。

用 Arduino IDE 打开:

arduino/01_mic_serial_test/01_mic_serial_test.ino

上传后打开串口监视器,波特率 115200

成功现象

你会看到类似:

RMS: 0.0042  dBFS: -47.5
RMS: 0.0188  dBFS: -34.5

对着麦克风拍手、说话,RMS 应该变大,dBFS 应该变得没那么负。

串口监视器声音数据截图

如果没变化

先别进入网页步骤。请回去检查:

  • VDD 是否接 3V3。
  • GND 是否接好。
  • SCK/WS/SD 是否和代码顶部一致。
  • L/R 是否接 GND。
  • 你选择的 GPIO 是否真的在开发板排针上。
6

第 6 步:打开声音可视化网页

串口测试通过后,上传网页仪表盘程序。

串口测试通过后,打开:

arduino/02_sound_visualizer/02_sound_visualizer.ino

上传后打开串口监视器。

默认热点模式

项目
WiFi 名称ESP32-AudioLab
密码12345678
浏览器地址http://192.168.4.1

Mac 连接这个 WiFi 后,浏览器打开 http://192.168.4.1

连接家里的 WiFi

如果想让 ESP32 加入你家里的 WiFi,修改 02_sound_visualizer.ino 顶部:

const char *WIFI_SSID = "你的WiFi名";
const char *WIFI_PASSWORD = "你的WiFi密码";

这时 ESP32 不会显示 ESP32-AudioLab 热点。它会在串口监视器里打印自己的 IP,比如:

WiFi connected: http://192.168.1.23

Mac 和 ESP32 必须在同一个 WiFi 下。

网页上的指标

指标含义
估算声级用 dBFS 加校准偏移得到的估算 dB SPL
数字满幅dBFS,数字音频相对满幅的强度
RMS一帧声音的平均能量
主峰当前频谱里最明显的频率
吹口哨时,主峰会比较稳定。拍手时,波形会突然变宽变高。

最终效果

声音可视化最终效果展示
!

排障指南

如果 WiFi、上传、波形或分贝不符合预期,从这里开始查。

Mac 看不到 ESP32-AudioLab

先判断 ESP32 程序有没有真的跑起来。

  1. 打开 Arduino IDE 串口监视器,波特率 115200
  2. 按一下 ESP32 的 RSTEN
  3. 看串口有没有打印:
AP mode: connect to ESP32-AudioLab then open http://192.168.4.1

如果没有这行,Mac 看不到热点是正常的,因为热点根本还没有启动。

常见原因处理
代码没有成功上传重新点 Arduino IDE 的上传按钮
你填了家里 WiFi 名ESP32 会连家里 WiFi,不会开 ESP32-AudioLab
板子没正常启动拔插 USB,按 RST/EN
选错端口或板型ESP32S3 Dev Module 和正确端口
USB 线只能充电换一根能传数据的 USB 线

README 写 GPIO5,但我板子没有 GPIO5

这是开发板引脚暴露方式的问题。ESP32-S3 芯片通常有 GPIO5,但你的开发板排针不一定引出它,或者丝印不叫 GPIO5

ESP32 引脚布局

网页打开了但没有波形

先回到 01_mic_serial_test。如果串口测试也没变化,就是麦克风/I2S/接线问题,不是网页问题。

如果串口测试有变化,但网页没波形:

  • 看网页右上角是否显示连接成功或 fps。
  • 确认浏览器打开的是 ESP32 的地址。
  • 按网页上的“重连”。
  • 刷新页面。

波形一直很小

先调网页里的 显示增益。如果仍然很小,改代码:

constexpr uint8_t PCM_GAIN_SHIFT = 13;

数字越小,波形越大。

波形被削平

这说明放大太多了。改成:

constexpr uint8_t PCM_GAIN_SHIFT = 15;

数字越大,波形越小。

分贝看起来不准

这是正常的。INMP441 不是校准过的专业声级计。

校准方法:

  1. 用手机分贝 App 或声级计放在 INMP441 旁边。
  2. 看网页估算声级和参考值差多少。
  3. 调整网页里的 dB 校准偏移

例如参考值是 60 dB,网页显示 55 dB,就把偏移加 5。

+

下一步项目

跑通以后,可以继续挑战这些小任务。

任务 1:夜间噪声日记

每 10 秒记录一次估算分贝,第二天看一张曲线。可以记录时间、平均 dB、最大 dB、主峰频率。

任务 2:工地噪声事件

如果连续 5 秒超过 65 dB,就标记一次事件,并显示开始时间、持续时间、最大分贝。

任务 3:鸟叫小侦探

鸟叫通常有比较明显的高频成分。可以先观察 2 kHz 到 8 kHz 的频谱能量。

任务 4:音乐可视化

让低频控制红色,中频控制黄色,高频控制蓝绿色。也可以加 LED 灯带,但要先学习供电安全。