基于ESP32-S3的声音识别系统,作为听障人士关护系统的核心感知模块。使用Edge Impulse机器学习模型实现多种声音的实时识别,并通过WiFi将识别结果传输给星火一号(STM32F407)中枢处理器。
本项目是听障人士关护系统的声音识别模块,整体系统架构如下:
系统组成:
-
ESP32-S3 声音识别模块(本项目)
- 功能:声音采集、AI识别、WiFi通信
- 输入:环境声音(门铃、敲门声、电话、警报等)
- 输出:识别结果通过WiFi发送
-
星火一号(STM32F407)中枢处理器
- 功能:数据汇总处理、多模态融合、告警通知
- 输入:接收ESP32-S3的识别结果
- 输出:驱动输出设备
-
输出设备
- 振动器、LED指示灯、语音播报
数据流向:
环境声音 → ESP32-S3声音识别 → WiFi传输 → 星火一号中枢处理 → 输出设备告警
本项目展示的是系统中的声音识别部分(ESP32-S3模块)。
- 实时音频采集与处理
- 支持7种声音分类识别
- I2S接口麦克风输入(如INMP441)
- 基于TensorFlow Lite Micro的边缘推理
- 16kHz采样率,高精度识别
- WiFi通信,远程数据传输
- 低功耗设计,适合长时间运行
- ESP32-S3开发板
- I2S接口麦克风模块(如INMP441)
- OLED屏幕(SSD1306,128x32分辨率)
- USB数据线
- WiFi路由器或热点
| ESP32-S3引脚 | 麦克风模块引脚 | 说明 |
|---|---|---|
| GPIO 5 | SCK (或 CLK) | I2S 串行时钟线(位时钟) |
| GPIO 6 | WS | I2S 帧时钟线(声道选择时钟) |
| GPIO 7 | SD (或 DATA) | I2S 串行数据线(音频数据推入内核) |
| 3.3V | VDD (或 3V3) | 电源 |
| GND | GND | 接地 |
| GND | L/R | 致命关键:必须死死连接到地线!强行激活麦克风的左声道发射逻辑,使其数据精准落在算法解包的偶数索引上。若悬空,模型会因接收空数据而冰封。 |
| ESP32-S3引脚 | OLED屏幕引脚 | 说明 |
|---|---|---|
| GPIO 11 | SCK (或 CLK) | I2C 串行时钟总线 |
| GPIO 12 | SDA (或 DATA) | I2C 串行数据总线 |
| 3.3V | VCC | 屏幕供电正极 |
| GND | GND | 信号参考地线 |
- 麦克风模块使用I2S接口进行音频采集
- OLED屏幕使用I2C接口进行通信,I2C地址为0x3C
- 所有模块均使用3.3V电源,请勿使用5V供电
- 确保所有GND引脚正确连接,避免信号干扰
下载并安装最新版本的Visual Studio Code: https://code.visualstudio.com/
- 打开VS Code
- 点击左侧活动栏的"扩展"图标(或按
Ctrl+Shift+X) - 在搜索框中输入
PlatformIO IDE - 点击"安装"按钮
- 等待安装完成后重启VS Code
git clone https://github.com/CyberX0725/DeafGuardian.git
cd DeafGuardian- 在VS Code中点击"文件" → "打开文件夹"
- 选择
DeafGuardian文件夹 - PlatformIO会自动加载项目配置
- 点击左下角的"PIO Home"图标
- 在"Devices"选项卡中确认ESP32-S3已正确连接
- 检查
platformio.ini文件中的配置:
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200点击左下角的 ✅ 图标,或使用快捷键 Ctrl+Alt+B 编译项目。
- 将ESP32-S3通过USB连接到电脑
- 点击右下角的 ⬆️ 图标上传固件
- 等待上传完成
- 点击左下角的"串口监视器"图标
- 选择正确的串口端口
- 波特率设置为
115200 - 即可看到声音识别结果和WiFi连接状态
DeafGuardian/
├── lib/
│ └── Acoustic_Sentry_inferencing/ # Edge Impulse推理库
│ ├── src/
│ │ ├── edge-impulse-sdk/ # Edge Impulse SDK
│ │ ├── model-parameters/ # 模型参数
│ │ └── Acoustic_Sentry_inferencing.h
│ └── examples/ # 示例代码
├── src/ # 主程序源码
├── include/ # 头文件
├── platformio.ini # PlatformIO配置
└── README.md # 项目说明
- 项目名称:Acoustic_Sentry
- 输入频率:16000 Hz
- 采样点数:16000
- 分类类别:7种
- 推理引擎:TensorFlow Lite
- 量化类型:INT8
- 音频采集:通过I2S接口实时采集麦克风数据
- 信号处理:使用DSP算法提取音频特征(MFCC)
- 模型推理:基于TensorFlow Lite Micro运行预训练模型
- 结果判断:分析置信度,确定识别结果
- 数据传输:通过WiFi将识别结果发送到中枢处理器
- 持续监测:循环执行,实时监测环境声音
虽然本项目最初是为与星火一号(STM32F407)中枢处理器配合使用而设计的,但该项目可以独立运行,并通过WiFi向特定的WiFi热点传输声音识别信号。其他开发者可以根据需要修改目标IP地址和端口,实现与不同设备的通信。
| 参数 | 值 |
|---|---|
| WiFi名称(SSID) | AcousticNet |
| WiFi密码 | 12345678 |
| 目标IP地址 | 192.168.169.1 |
| 目标端口 | 8888 |
| 心跳间隔 | 10秒 |
若需要连接不同的WiFi热点或目标设备,请修改 src/main.cpp 文件中的 Config 命名空间:
namespace Config
{
const char *SSID = "你的WiFi名称";
const char *PASSWORD = "你的WiFi密码";
const char *TARGET_IP = "目标设备IP地址";
const int TARGET_PORT = 目标端口号;
}ESP32-S3通过WiFi使用UDP协议与目标设备进行通信。
- 协议类型:UDP(用户数据报协议)
- 端口号:8888
- 通信频率:心跳包每10秒发送一次,识别到声音时立即发送事件包
每个UDP数据包长度为8字节,格式如下:
+--------+--------+------------------------------+
| Byte 0 | Byte 1 | Byte 2-7 |
| EventID|Confidence| MAC Address (6 bytes) |
+--------+--------+------------------------------+
1字节 1字节 6字节
| Event ID | 十六进制值 | 声音类型 |
|---|---|---|
| 心跳包 | 0x10 | Heartbeat |
| 火警 | 0x01 | Fire Alarm |
| 门铃 | 0x02 | Doorbell |
| 敲门声 | 0x03 | Door Knock |
| 碎玻璃 | 0x05 | Glass Broken |
| 电话铃声 | 0x06 | Phone Ring |
| 漏水声 | 0x07 | Water Leak |
当识别到火警(置信度85%)时,发送的UDP数据包为:
0x01 0x55 0xAA 0xBB 0xCC 0xDD 0xEE 0xFF
│ │ └────────────────────────────┘
│ │ MAC地址
│ └─ 置信度 85% (0x55 = 85)
└─ Event ID 火警 (0x01)
系统每10秒发送一次心跳包,用于确认设备在线状态:
- Event ID: 0x10
- Confidence: 0x00
- MAC Address: 设备的MAC地址
- 确保麦克风模块和OLED屏幕正确连接
- 根据需要修改WiFi配置(SSID、密码、目标IP和端口)
- 上传固件后等待WiFi连接成功(OLED屏幕显示"Connecting WiFi...")
- 系统开始持续采集音频并进行识别
- 识别到声音时,自动通过UDP协议发送识别结果到目标设备
- 在串口监视器中查看识别结果和通信状态
- 目标设备(如星火一号或其他UDP服务器)接收并处理识别结果
麦克风输入 → I2S采集 → 数据缓存 → DSP处理(MFCC) → 特征提取
│
v
TensorFlow Lite推理 → 分类结果
│
v
置信度判断 → WiFi传输 → 中枢处理
- I2S音频采集:高效的数字音频接口,支持高保真采样
- MFCC特征提取:梅尔频率倒谱系数,适合语音识别
- TensorFlow Lite Micro:轻量级机器学习推理引擎
- WiFi通信:低延迟、稳定的数据传输
本项目基于MIT开源协议。
- 需要Edge Impulse订阅才能使用此模型
- 确保开发板有足够的内存(至少64KB RAM)
- 建议在安静环境下测试以获得最佳识别效果
- 确保WiFi网络稳定,以保证数据传输可靠性
- 本项目仅包含声音识别模块,完整系统需配合星火一号中枢处理器使用