系统概述

1.1 核心定位

本系统是一款基于 ESP32 的智能控制终端,通过声音传感器检测环境分贝值,结合碰撞传感器实现手动 / 自动模式切换,核心控制 22 号引脚高低电平模拟总电闸的通断通断,适用于课室无人检测自动断电、设备启停等场景。

1.2 核心功能清单

双模式控制:自动模式(声音阈值触发)+ 手动模式(碰撞传感器点按触发) 模式切换:双击碰撞传感器双向切换(自动↔手动) 手动控制:点按碰撞传感器切换 22 引脚高低电平 自动控制:声音阈值触发高低电平切换 WiFi 配网:AP 模式配置 WiFi,断网自动重连 远程配置:30 秒自动同步服务器阈值参数 状态反馈:蜂鸣器语音提示(模式切换、操作确认、故障告警) 紧急操作:长按碰撞传感器 1.5 秒重启 AP 配网

硬件配置指南

2.1 硬件清单

组件名称 数量 备注
ESP32 开发板 1 块 支持 WiFi 功能
LM2904 声音传感器 1 个 模拟信号输出
低电平触发碰撞传感器 1 个 按下输出低电平,默认高电平
无源蜂鸣器 1 个 需 PWM 驱动(不能直接接 GPIO)
杜邦线(公对母 / 公对公) 若干 供电 / 信号连接
5V/3.3V 电源适配器 1 个 为 ESP32 供电

2.2 引脚接线表(核心!)

功能模块 ESP32 引脚 接线说明
声音传感器(信号输出) GPIO33 模拟输入(ADC1_CH5)
无源蜂鸣器(信号输入) GPIO25 数字输出(PWM 驱动)
控制输出引脚 GPIO22 数字输出(核心控制端)
碰撞传感器(信号输出) GPIO19 上拉输入(低电平触发)
碰撞传感器 VCC 3.3V 严禁接 5V,避免烧毁传感器
所有模块 GND GND 必须共地,否则信号异常

2.3 硬件接线注意事项

碰撞传感器必须接 3.3V 供电,接 5V 会烧毁传感器

无源蜂鸣器需确认正负极(长脚接 GPIO25,短脚接 GND),反接不发声

所有模块 GND 必须与 ESP32 GND 相连,否则传感器信号无法被正确检测

声音传感器需远离蜂鸣器,避免自激干扰(建议间距≥10cm)

软件环境搭建

3.1 开发环境要求

3.2 代码配置与上传

  1. 下载完整代码,在 Arduino IDE 中打开
  2. 配置开发板:选择「ESP32 Dev Module」(或对应型号)
  3. 配置端口:选择 ESP32 连接电脑的 COM 口
  4. 上传参数:波特率默认 115200,Flash Size 选择「4MB (32Mb)」
  5. 点击「上传」,等待上传完成(上传时需按住 ESP32 BOOT 键,直至开始传输)

3.3 可自定义参数(代码头部)

参数名称 变量名 默认值 修改说明
双击检测间隔 DOUBLE_CLICK_INTERVAL 800ms 延长可提高双击成功率(建议 500-1000ms)
长按触发阈值 LONG_PRESS_TIME 1500ms 长按判定时间(建议 1000-2000ms)
消抖时间 DEBOUNCE_TIME 30ms 防止传感器抖动(建议 20-50ms)
默认低分贝阈值 lowDbThreshold 50.0dB 自动模式触发低电平的分贝阈值
默认高分贝阈值 highDbThreshold 60.0dB 自动模式触发高电平的分贝阈值
低阈值倒计时 lowThresholdTime 10000ms 分贝低于低阈值后,延迟 10 秒触发
高阈值倒计时 highThresholdTime 5000ms 分贝高于高阈值后,延迟 5 秒触发
AP 配网名称 apSsid 空域节电系统 WiFi 配网时的热点名称
AP 配网密码 apPassword dysdysdys WiFi 配网时的热点密码

核心功能详解

4.1 模式系统(核心逻辑)

系统包含两种运行模式,通过双击碰撞传感器双向切换,模式状态通过蜂鸣器和串口日志反馈:

模式类型 触发条件 核心逻辑 蜂鸣器提示 串口日志标识
自动模式(默认) 系统启动 / 双击手动模式切换 仅响应声音阈值检测,点按碰撞传感器无效;切换时强制 22 引脚→高电平 1 声短鸣 🎉 当前模式:自动模式
手动模式 双击自动模式切换 禁用声音阈值检测,点按碰撞传感器切换 22 引脚高低电平;切换时保留当前引脚状态 2 声短鸣 ✅ 切换到手动模式(当前 22 引脚:XXX)

模式切换核心逻辑:双击碰撞传感器(按-松-按-松,间隔≤800ms)实现自动↔手动双向切换

4.2 自动模式功能细节

自动模式下,系统通过声音传感器检测环境分贝值,按以下逻辑控制 22 引脚:

  1. 初始状态:22 引脚→高电平,isTriggered=false
  2. 低阈值触发(22 引脚→低电平):分贝值 < 低阈值(默认 50dB)→ 启动 10 秒倒计时 → 倒计时内持续低于低阈值 → 触发低电平 + 蜂鸣器 2 声
  3. 高阈值恢复(22 引脚→高电平):触发低电平后,分贝值 > 高阈值(默认 60dB)→ 启动 5 秒倒计时 → 倒计时内持续高于高阈值 → 恢复高电平 + 蜂鸣器 2 声
倒计时重置规则:
  • 低阈值倒计时期间,分贝≥低阈值 → 重置倒计时
  • 高阈值倒计时期间,分贝≤高阈值 → 重置倒计时
  • 服务器更新阈值参数 → 重置对应倒计时

4.3 手动模式功能细节

手动模式下,声音阈值检测逻辑禁用,仅响应碰撞传感器点按:

  1. 点按操作:按一下碰撞传感器(按压时长 30ms~1.5 秒)→ 切换 22 引脚状态(高↔低)
  2. 状态反馈:
    • 切换到高电平:蜂鸣器 1 声短鸣 + 串口日志「✅ 手动模式:22 引脚 → 高电平」
    • 切换到低电平:蜂鸣器 2 声短鸣 + 串口日志「✅ 手动模式:22 引脚 → 低电平」
  3. 模式切换保留:切换回自动模式时,强制 22 引脚→高电平,与手动模式最后状态无关

4.4 WiFi 配网与数据上报

4.4.1 WiFi 配网流程

配网触发条件:

  • 首次启动无 WiFi 配置
  • WiFi 连接失败(15 秒超时)
  • 长按碰撞传感器 1.5 秒(重新配网)

配网操作步骤:

  1. 系统启动 AP 热点(名称:空域节电系统,密码:dysdysdys)
  2. 手机 / 电脑连接该热点
  3. 打开浏览器,输入 AP 网关 IP(默认:192.168.4.1)
  4. 输入目标 WiFi 名称和密码,点击「连接 WiFi」
  5. 系统保存配置并重启,自动连接目标 WiFi

配置存储:WiFi 配置存储在 LittleFS 文件系统(/wifi_config.txt),断电不丢失

4.4.2 数据上报与配置更新
  • 数据上报:每 1 秒向服务器(http://dys.acrt.xin/api/sound)上报:分贝值、22 引脚状态、运行模式、倒计时状态
  • 配置更新:每 30 秒从服务器(http://dys.acrt.xin/api/settings)同步最新阈值参数(低 / 高分贝阈值、倒计时时间),更新后自动重置对应倒计时

4.5 紧急操作(长按碰撞传感器)

  • 触发条件:碰撞传感器持续按压≥1.5 秒(所有模式通用)
  • 执行动作:断开当前 WiFi 连接 → 启动 AP 配网模式 → 蜂鸣器 3 声提示
  • 适用场景:WiFi 密码变更、配网错误、需要重新配置网络时使用

交互操作指南

5.1 基础操作速查表

操作方式 触发条件 自动模式效果 手动模式效果
单点按碰撞传感器 按压 30ms~1.5 秒,松手 ❌ 无动作(串口提示「自动模式:单点按无效」) ✅ 切换 22 引脚状态(高↔低)+ 蜂鸣提示
双击碰撞传感器 两次点按(按 - 松 - 按 - 松),间隔≤800ms ✅ 切换到手动模式 + 2 声蜂鸣 ✅ 切换到自动模式(强制 22 高电平)+1 声蜂鸣
长按碰撞传感器 持续按压≥1.5 秒 ✅ 断开 WiFi + 启动 AP 配网 + 3 声蜂鸣 ✅ 断开 WiFi + 启动 AP 配网 + 3 声蜂鸣

5.2 首次使用流程

  1. 按「硬件接线表」完成接线,确认所有 GND 共地
  2. 上传代码到 ESP32,打开串口监视器(波特率 115200)
  3. ESP32 启动后,若未配置 WiFi,自动启动 AP 配网(蜂鸣器 3 声)
  4. 手机连接 AP 热点(空域节电系统 / dysdysdys),访问 192.168.4.1 配置 WiFi
  5. 配置完成后系统重启,连接 WiFi 成功(蜂鸣器 1 声),默认进入自动模式
  6. 测试操作:双击碰撞传感器切换到手动模式(2 声蜂鸣),点按切换 22 引脚状态

5.3 蜂鸣器提示含义汇总(关键反馈!)

蜂鸣次数 / 模式 含义 场景示例
1 声短鸣 操作成功 / 状态正常 WiFi 连接成功、切换到自动模式、手动模式切换高电平
2 声短鸣 模式切换 / 低电平触发 切换到手动模式、自动模式低阈值触发、手动模式切换低电平
3 声短鸣 进入 AP 配网模式 首次启动无配置、长按触发配网、WiFi 连接失败
无蜂鸣 操作无效 / 状态未变更 自动模式点按、双击超时无效操作

故障排查手册

6.1 常见问题与解决方案

故障现象 可能原因 解决方案
双击碰撞传感器无反应 1. 操作方式错误(未松手 / 间隔过长);2. 传感器未触发;3. 引脚接错 1. 按「按 - 松 - 按 - 松」操作,间隔≤800ms;2. 查看串口是否有「[碰撞传感器] 按下」日志;3. 确认传感器 OUT 接 GPIO19
碰撞传感器点按无日志 1. 接线错误;2. 传感器损坏;3. 未启用上拉输入 1. 检查 VCC 接 3.3V、GND 共地;2. 按压传感器看模块 LED 是否点亮;3. 确认代码中pinMode(collisionSensorPin, INPUT_PULLUP)
蜂鸣器不发声 1. 正负极接反;2. 引脚接错;3. 无源蜂鸣器未 PWM 驱动 1. 调换蜂鸣器正负极;2. 确认接 GPIO25;3. 检查beep()函数是否正常调用(串口日志同步)
WiFi 配网后无法连接 1. WiFi 密码错误;2. 信号强度弱;3. 配置文件损坏 1. 长按 1.5 秒重新配网;2. 靠近路由器测试;3. 重新上传代码(LittleFS 格式化)
自动模式不触发阈值 1. 分贝值未达阈值;2. 传感器干扰;3. 服务器参数异常 1. 提高 / 降低环境声音测试;2. 远离蜂鸣器 / 电源干扰;3. 查看串口日志是否同步到服务器参数
串口日志乱码 1. 波特率错误;2. ESP32 串口波特率不匹配 1. 调整串口监视器波特率为 115200;2. 确认代码Serial.begin(115200)未修改

6.2 串口日志调试指南

串口监视器是核心调试工具(波特率 115200),关键日志解读:

  • [碰撞传感器] 按下/释放:传感器触发正常,可观察按压时长和间隔
  • [双击检测] 第一次点击/第二次点击:双击逻辑正常识别
  • ✅ 切换到XX模式:模式切换成功
  • 📊 分贝<低阈值/分贝>高阈值:自动模式阈值检测正常
  • 🔄 获取最新配置:服务器参数同步正常
  • ⚠️ WiFi断开:网络异常,需检查 WiFi 配置或信号

6.3 硬件故障快速判断

  1. 碰撞传感器:按压时模块 LED 点亮→传感器正常;未点亮→接线错误或传感器损坏
  2. 声音传感器:用手拍打传感器,串口日志分贝值变化→传感器正常;无变化→接线错误
  3. 蜂鸣器:调用beep(1)时发声→正常;不发声→正负极接反或引脚错误
  4. ESP32:串口有启动日志→正常;无日志→供电不足或开发板损坏

附录

7.1 核心参数对照表

参数类别 参数名称 默认值 可修改范围 作用
碰撞传感器参数 消抖时间(DEBOUNCE_TIME) 30ms 20-50ms 过滤传感器抖动
双击间隔(DOUBLE_CLICK_INTERVAL) 800ms 500-1000ms 双击判定间隔
长按阈值(LONG_PRESS_TIME) 1500ms 1000-2000ms 长按判定时间
自动模式参数 低分贝阈值(lowDbThreshold) 50.0dB 30.0-80.0dB 触发低电平的分贝条件
高分贝阈值(highDbThreshold) 60.0dB 40.0-90.0dB 恢复高电平的分贝条件
低阈值倒计时(lowThresholdTime) 10000ms 5000-30000ms 低分贝触发延迟时间
高阈值倒计时(highThresholdTime) 5000ms 3000-15000ms 高分贝恢复延迟时间
网络参数 配网超时时间 15 秒 代码中固定 WiFi 连接超时触发 AP 配网
数据上报间隔(sendInterval) 1000ms 500-5000ms 向服务器上报数据频率
配置更新间隔(settingsUpdateInterval) 30000ms 10000-60000ms 同步服务器参数频率

7.2 安全注意事项

供电安全:ESP32 建议使用 5V/2A 电源适配器,避免供电不足导致重启

引脚安全:严禁将 5V 电源接入 ESP32 的 GPIO 引脚(仅 VIN 口支持 5V)

传感器安全:碰撞传感器、声音传感器均为 3.3V 供电,接 5V 会永久损坏

网络安全:AP 配网密码建议根据实际场景修改,避免未授权访问

7.3 扩展建议

  1. 阈值参数:可根据实际使用场景调整lowDbThreshold和highDbThreshold,避免误触发
  2. 蜂鸣器音量:修改buzzerDuration(持续时间)或buzzerFrequency(频率)调整音量
  3. 存储扩展:可通过 LittleFS 存储更多配置参数(如模式记忆、触发历史)
  4. 远程控制:基于服务器 API 扩展手机 APP 或网页控制功能,实现远程模式切换和阈值调整

相关资源

下载完整代码和相关文件

声音监测系统网站:http://dys.acrt.xin

技术支持:云上小舟