Skip to content

one-num-three/esp32s3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32-S3 TB6612 超声项目迁移说明

1. 项目状态

当前目录:

D:\esp32s3

已经完成从旧项目:

D:\esp32\tb6612-ultrasonic-demo

到新开发板 ESP32-S3 的基础迁移。

当前迁移内容包括:

1. TB6612 超声驱动主程序已迁移
2. BLE GATT 控制通道已加入
3. 内置 PCM 音频数组已迁移
4. GPIO 已按 ESP32-S3 重新分配
5. README 已按你确认过的引脚规则重新整理
6. 闹钟 / 预设 / Wi‑Fi / NTP 骨架已加入

2. 当前迁移后的功能

当前程序仍然保留这些模式:

off
carrier
tone
visible
melody
preset

当前产品化功能包括:

ESP32-S3 输出单路互补 40kHz
TB6612 A 路作为单路 H 桥驱动
PWM 使能脚做包络门控
可输出纯载波、单音、旋律和内置音频包络
BLE 小程序控制
闹钟配置与触发
Wi‑Fi 配网与自动重连
NTP 校时骨架
标准化事件 / 错误返回
固定状态字段 schema

3. 这次迁移的一个主动调整

为了新板上电更安全,当前版本默认行为已经改为:

上电默认 off

也就是:

启动后先不自动发超声
需要你在串口输入命令再启动输出

这和旧项目默认上电 melody 不同,是这次迁移里我主动做的安全调整。

4. 当前 ESP32-S3 GPIO 分配

本次迁移采用下面这组控制脚:

#define TB6612_IN1_GPIO        GPIO_NUM_4
#define TB6612_IN2_GPIO        GPIO_NUM_5
#define TB6612_PWM_ENABLE_GPIO GPIO_NUM_6
#define TB6612_STBY_GPIO       GPIO_NUM_7

含义:

ESP32-S3 GPIO 作用
GPIO4 40kHz 正相信号
GPIO5 40kHz 反相信号
GPIO6 TB6612 使能 / 包络门控
GPIO7 TB6612 待机控制

5. 为什么选 GPIO4 / 5 / 6 / 7

这组脚的优点是:

避开了 GPIO34-GPIO37 的 Flash/PSRAM 专用脚
避开了 GPIO43/GPIO44 的串口灯相关脚
避开了 GPIO47/GPIO48 的 USB / RGB 相关脚
避开了 GPIO0/GPIO45/GPIO46 的启动配置脚
连续、好接、便于排查

6. ESP32-S3 两排 22P 排针规则

这部分按你确认过的规则整理。

前提:

以开发板正面为准
USB 口朝下
每一侧从上到下编号

6.1 左侧 22P

左22 引脚号 信号
1 3V3
2 3V3
3 RST
4 GPIO4
5 GPIO5
6 GPIO6
7 GPIO7
8 GPIO15
9 GPIO16
10 GPIO17
11 GPIO18
12 GPIO8
13 GPIO3
14 GPIO46
15 GPIO9
16 GPIO10
17 GPIO11
18 GPIO12
19 GPIO13
20 GPIO14
21 5V0
22 GND

6.2 右侧 22P

右22 引脚号 信号
1 GND
2 GPIO43
3 GPIO44
4 GPIO1
5 GPIO2
6 GPIO42
7 GPIO41
8 GPIO40
9 GPIO39
10 GPIO38
11 GPIO37
12 GPIO36
13 GPIO35
14 GPIO0
15 GPIO45
16 GPIO48
17 GPIO47
18 GPIO21
19 GPIO20
20 GPIO19
21 GND
22 GND

7. TB6612 命名规则

为了避免 TB6612 正反面丝印导致左右混淆,后面统一不用“左排/右排”描述,而是只用:

TB6612_控制侧
TB6612_功率侧

7.1 TB6612_控制侧 8P

从上到下:

控制侧引脚号 信号
1 PWMA
2 AIN2
3 AIN1
4 STBY
5 BIN1
6 BIN2
7 PWMB
8 GND

7.2 TB6612_功率侧 8P

从上到下:

功率侧引脚号 信号
1 VM
2 VCC
3 GND
4 AO1
5 AO2
6 BO2
7 BO1
8 GND

8. 当前推荐接线方式

当前版本按“单路超声输出”设计,只使用 TB6612 的 A 路。

也就是:

只接 AIN1 / AIN2 / PWMA / STBY
只用 AO1 / AO2 驱动 1 路超声探头或 1 组并联探头
不使用 BIN1 / BIN2 / PWMB / BO1 / BO2

9. 正式接线表

9.1 ESP32-S3 到 TB6612 控制侧

ESP32-S3 排针 信号 接到 TB6612 说明
左22-4 GPIO4 控制侧-3 AIN1 40kHz 正相
左22-5 GPIO5 控制侧-2 AIN2 40kHz 反相
左22-6 GPIO6 控制侧-1 PWMA 使能 / 包络门控
左22-7 GPIO7 控制侧-4 STBY 待机控制
左22-1 或 左22-2 3V3 功率侧-2 VCC TB6612 逻辑电源
左22-22 或 右22-1/21/22 GND 功率侧-3 GND 或 控制侧-8 GND 共地

9.2 单路控制关系

当前单路版本只接 A 路:

ESP32-S3 GPIO TB6612 信号
GPIO4 AIN1
GPIO5 AIN2
GPIO6 PWMA
GPIO7 STBY

9.3 外部电源与探头接线

信号 接法
外部电源正极 功率侧-1 VM
外部电源负极 功率侧-3 GND 或 功率侧-8 GND
超声探头两端 功率侧-4 AO1 与 功率侧-5 AO2
BO1 / BO2 当前不接

10. 最简接线清单

如果你现在只接 1 块 TB6612,直接照下面接就行:

ESP32-S3 左22-4  GPIO4 -> TB6612 AIN1
ESP32-S3 左22-5  GPIO5 -> TB6612 AIN2
ESP32-S3 左22-6  GPIO6 -> TB6612 PWMA
ESP32-S3 左22-7  GPIO7 -> TB6612 STBY
ESP32-S3 3V3             -> TB6612 VCC
ESP32-S3 GND             -> TB6612 GND
外部电源 +              -> TB6612 VM
外部电源 -              -> TB6612 GND
超声探头                  -> AO1 + AO2

11. 共地要求

这一条必须满足:

ESP32-S3 GND
TB6612 GND
外部电源负极

必须连在一起。

否则 TB6612 可能无法正确识别 ESP32-S3 的控制电平。

12. 电源建议

推荐先这样试:

TB6612 VCC = ESP32-S3 3.3V
TB6612 VM  = 外部 5V

稳定后再尝试:

9V
12V

但不要让大功率负载直接从开发板 5V 输出端硬带。

13. ESP32-S3 特别注意事项

13.1 不要乱用这些脚

GPIO34-GPIO37:Flash / PSRAM 专用
GPIO43/GPIO44:串口灯相关
GPIO47/GPIO48:USB / RGB 相关
GPIO0/GPIO45/GPIO46:启动配置脚

13.2 ADC 相关

如果后续需要模拟采样:

Wi‑Fi 开启时不要依赖 ADC2
优先使用 ADC1

13.3 5V-IN 说明

开发板 5V-IN 默认不对外供电。
如果你需要 5V 外供,需要按板上焊盘规则处理,但不建议拿它去直接带功率负载。

14. BLE 通讯接口

14.1 设备名

SleepLamp-Ultrasonic

14.2 Service / Characteristic UUID

名称 UUID 方向
Service 7f2a0000-8f6d-4f4b-9f3a-2f5d6a000001 Primary
Command 7f2a0001-8f6d-4f4b-9f3a-2f5d6a000001 App -> Device
Status 7f2a0002-8f6d-4f4b-9f3a-2f5d6a000001 Device -> App
Wi‑Fi Config 7f2a0003-8f6d-4f4b-9f3a-2f5d6a000001 App -> Device
Log/Event 7f2a0004-8f6d-4f4b-9f3a-2f5d6a000001 Device -> App

14.3 关键命令

控制:

{"type":"set_mode","mode":"carrier"}
{"type":"set_mode","mode":"tone","tone_hz":1000}
{"type":"set_carrier","carrier_hz":40000}
{"type":"set_tone","tone_hz":523}
{"type":"set_duty","duty_low":20,"duty_center":50,"duty_high":80}
{"type":"set_output_profile","profile":"normal"}
{"type":"play_preset","preset":"wake_01"}
{"type":"stop_preset"}
{"type":"stop"}
{"type":"get_status"}

闹钟:

{"type":"set_alarm","alarm_id":"a1","time":"07:30","enabled":true,"repeat":"daily","preset":"wake_01","profile":"normal"}
{"type":"get_alarm_list"}
{"type":"delete_alarm","alarm_id":"a1"}

Wi‑Fi:

{"type":"wifi_config","ssid":"YourWiFi","password":"12345678"}
{"type":"wifi_clear"}

14.4 当前内置 preset

preset 行为
wake_01 播放内置 PCM 音频一次
sleep_01 进入旋律模式
chime_01 输出 523Hz 包络提示音

14.5 Status 新字段

当前状态 JSON 中包含:

fw_version
device_role
active_preset
alarm_count
next_alarm_time
wifi_state
ssid
ip
time_synced
output_profile

15. 当前源码文件

文件 作用
main/tb6612_ultrasonic_demo.c 主程序
main/audio_clip.c 内置 PCM 音频数组
main/audio_clip.h 音频数组声明
main/CMakeLists.txt main 组件配置
CMakeLists.txt 工程顶层配置
sdkconfig.defaults 默认 BLE 配置

16. 编译与烧录

这台机器上实际验证通过的方法如下。

16.1 先设置本机 ESP-IDF 环境

当前机器不能直接裸跑 idf.py,需要先把环境变量指到实际安装位置:

$env:IDF_PATH='D:\esp\v6.0.1\esp-idf'
$env:IDF_TOOLS_PATH='C:\Espressif\tools'
$env:IDF_PYTHON_ENV_PATH='C:\Espressif\tools\python\v6.0.1\venv'
$env:ESP_IDF_VERSION='6.0.1'
$env:PATH='C:\Espressif\tools\python\v6.0.1\venv\Scripts;C:\Espressif\tools\cmake\4.0.3\bin;C:\Espressif\tools\ninja\1.12.1;C:\Espressif\tools\xtensa-esp-elf\esp-15.2.0_20251204\xtensa-esp-elf\bin;' + $env:PATH

16.2 全新构建

cd D:\esp32s3
if (Test-Path .\build) { Remove-Item -LiteralPath .\build -Recurse -Force }
& 'C:\Espressif\tools\python\v6.0.1\venv\Scripts\python.exe' 'D:\esp\v6.0.1\esp-idf\tools\idf.py' build

16.3 烧录并打开串口

cd D:\esp32s3
& 'C:\Espressif\tools\python\v6.0.1\venv\Scripts\python.exe' 'D:\esp\v6.0.1\esp-idf\tools\idf.py' -p COM5 flash monitor

如果端口不是 COM5,换成你的实际串口。

16.4 这次构建里已经确认过的关键点

目标芯片是 ESP32-S3
分区表必须使用 single_app_large
本工程已经成功生成 bootloader.bin / partition-table.bin / esp32s3_parametric_alarm.bin

16.5 当前已知但不影响出包的警告

ESP_ROM_ELF_DIR environment variable is not defined

这个警告只影响 gdbinit 生成,不影响 buildflash 和正常运行。

17. 串口命令

进入 monitor 后可输入:

status
carrier
carrier 40000
tone
tone 523
visible
melody
audio
off

18. Wi‑Fi 与时间行为

当前实现行为:

Wi‑Fi 凭据写入 NVS
重启后自动尝试重连
连接成功后启动 NTP
默认时区为 CST-8
时间同步成功后才会计算 next_alarm_time 并触发闹钟

19. 当前一句话总结

当前 D:\esp32s3 已经从单纯的超声实验固件扩展成了一个 ESP32-S3 + BLE + 定向闹钟 的第一阶段原型:它可以通过 GPIO4/5/6/7 控制 TB6612 的 A 路输出单路超声载波与包络,并通过 BLE 让小程序控制模式、预设、闹钟和 Wi‑Fi 配网。

20. 网页蓝牙调试台

已经提供一个本地网页调试台:

D:\esp32s3\web-debug

主要文件:

文件 作用
web-debug/index.html 调试页面入口
web-debug/styles.css 页面样式和状态灯效果
web-debug/app.js Web Bluetooth 调试逻辑
web-debug/serve.ps1 本地启动 HTTP 服务

20.1 这个网页能做什么

通过 BLE 连接 SleepLamp-Ultrasonic
切换 off / carrier / tone / visible / melody / preset
设置 carrier_hz / tone_hz / output_profile / duty
发送 Wi‑Fi 配网和清除命令
新增 / 删除 / 读取闹钟
发送自定义 JSON 调试协议
显示状态 JSON 和事件日志
显示更完整的状态快照
对频率 / duty / Wi‑Fi / 闹钟字段做参数校验
对命令成功 / 失败给出明确提示
点击闹钟表格行回填到表单继续编辑
通过不同颜色的状态灯显示连接、模式、Wi‑Fi、时间同步、最近事件

20.1.1 当前状态字段

当前网页会重点展示这些状态字段:

schema_version
device_name
fw_version
device_role
mode
active_preset
output_enabled
output_channel
ble_connected
carrier_hz
tone_hz
duty_low / duty_center / duty_high
output_profile
wifi_state
ssid
ip
time_synced
wifi_retry_count / wifi_retry_limit
alarm_count / alarm_capacity
next_alarm_time
last_event_code
last_event_message
last_error_code
uptime_ms

20.2 状态灯颜色含义

蓝牙连接:绿色=已连接,黄色=连接中,灰色=未连接,红色=连接失败
输出模式:灰=off,青=carrier,蓝=tone,黄=visible,粉=melody,紫=preset,绿=audio
Wi‑Fi:灰=未配置,黄=连接中,绿=已连接,橙=已断开,红=失败
时间同步:绿=已同步,黄=未同步
最近事件:青=普通事件,黄=警告,红=错误

20.3 正确打开方式

Web Bluetooth 需要安全上下文,所以不要直接双击 index.html,要通过 localhost 打开。

先启动本地服务:

cd D:\esp32s3\web-debug
.\serve.ps1

然后在 ChromeEdge 里打开:

http://127.0.0.1:9001

20.4 使用顺序

1. 给 ESP32-S3 烧录当前固件
2. 打开网页调试台
3. 点击“连接设备”
4. 选择 SleepLamp-Ultrasonic
5. 观察状态灯和状态 JSON
6. 逐项调试模式、频率、Wi‑Fi、闹钟

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors