关于 esphome-box3-builder
ESP32-S3-BOX-3 Builder Skill 为使用 BOX-3 硬件的 ESPHome 项目提供配置指导,涵盖显示、触控、音频和语音助手模板,并包含设备专属故障排查。
主要功能
- 01BOX-3 硬件配置模板
- 02显示渲染与界面模式
- 03触控和手势交互模式
- 04I²S 音频管线配方
- 05唤醒词和语音助手设置
- 06BOX-3 验证与刷写脚本
适用场景
- 01启动 ESP32-S3-BOX-3 配置
- 02构建多页面触摸屏界面
- 03设置带唤醒词检测的语音控制
- 04排查 BOX-3 显示或音频问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nodnarbnitram/ claude-code-extensions --skill esphome-box3-builder安装后在 Claude Code 中输入/esphome-box3-builder确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/fonts/README.mdreferences/box3-pinout.mddisplay-lambdas.mdmaterial-design.mdtouch-patterns.mdscripts/flash-box3.shtemplates/box3-base.yamlbox3-voice.yaml详细介绍
ESP32-S3-BOX-3 构建技能
面向 ESP32-S3-BOX-3 硬件的专业技能,为复杂的音频/显示/触摸项目提供完整的配置模板、显示 lambda 速查手册、触摸交互模式和语音助手集成方案。
用途
此技能通过提供以下内容,加快 ESP32-S3-BOX-3 项目的开发:
- 完整的硬件初始化模板
- 显示 lambda 渲染速查手册(文本、形状、图标、多页面 UI)
- 音频管线方案(I²S、ES7210 ADC、ES8311 DAC)
- 触摸交互模式(按钮、滑动、手势)
- 语音助手集成(唤醒词、音频闪避、Home Assistant Assist)
- Material Design UI 组件
- 硬件专属故障排查与解决方法
ESP32-S3-BOX-3 专属项目请使用此技能。对于通用 ESPHome 配置,请改用 esphome-config-helper 技能。
何时使用此技能
以下情况请使用此技能:
- 从头配置 ESP32-S3-BOX-3 硬件
- 实现显示 lambda 渲染(ILI9xxx)
- 设置 I²S 音频管线(ES7210、ES8311)
- 配置 GT911 触摸交互
- 构建带唤醒词检测的语音助手
- 创建多页面触摸屏 UI
- 排查 BOX-3 专属问题
以下任务请委派给专业的 ESPHome Agent:
- 深入的技术说明(esphome-box3 agent)
- 通用 ESPHome 概念(esphome-core agent)
- 网络配置(esphome-networking agent)
硬件概述
ESP32-S3-BOX-3 是一款完整的开发套件,包含:
- 模块:ESP32-S3-WROOM-1(16MB Flash、16MB Octal PSRAM)
- 显示屏:ILI9342C(320x240、SPI,16 位色彩需要 PSRAM)
- 触摸屏:GT911 电容式(I²C、多点触控)
- 麦克风:ES7210 4 通道 ADC(I²S、16kHz)
- 扬声器:ES8311 单声道 DAC(I²S、48kHz,需要 MCLK)
- 传感器:BME688 环境传感器、ICM-42607-P IMU
关键要求:
- 必须显式配置 PSRAM(2025.2+ 重大变更)
- 推荐使用 ESP-IDF 框架(对音频/显示支持更佳)
- 麦克风和扬声器共用 I²S 总线
- 显示屏和触摸屏共用复位引脚 GPIO48
完整硬件规格请参阅:
references/box3-pinout.md- 完整 GPIO 引脚分配、组件地址和已知问题
配置模板
可用模板
位于 templates/ 目录:
-
box3-base.yaml- 硬件初始化基础模板- 使用八线模式的 PSRAM 配置 ESP-IDF 框架
- I²S 音频总线配置
- ES7210 ADC 和 ES8311 DAC 设置
- ILI9xxx 显示屏基础配置
- GT911 触摸初始化
- 用作所有 BOX-3 项目的基础
-
box3-voice.yaml- 完整语音助手- 使用 okay_nabu 的 micro_wake_word
- 语音助手管线(唤醒词 → HA Assist → TTS)
- 使用 Nabu 媒体播放器进行音频闪避
- 语音交互状态管理
- 用于语音控制的 BOX-3 项目
-
box3-display-ui.yaml- 多页面触摸屏 UI- 3 页导航系统
- 触摸区域二进制传感器
- 使用 Material Design 的显示 lambda
- 使用全局变量进行页面状态管理
- 用于交互式触摸屏项目
-
box3-audio-player.yaml- 音乐/媒体播放器- 媒体播放器实体
- 使用触摸按钮进行音量控制
- 显示屏显示播放状态
- 播放/暂停/跳过控制
- 用于音频播放项目
使用模板
使用模板的步骤:
- 阅读相应的模板文件
- 自定义设备名称和 WiFi 凭据
- 根据需要调整 UI 元素、颜色和字体
- 使用 BOX-3 专属脚本刷写(参见“脚本”部分)
模板工作流:
# 1. Read template
cat .claude/skills/esphome-box3-builder/templates/box3-voice.yaml
# 2. Copy to project
cp .claude/skills/esphome-box3-builder/templates/box3-voice.yaml my-box3.yaml
# 3. Edit device-specific values
# - Update device name
# - Set WiFi credentials (use secrets.yaml)
# - Customize wake word model if desired
# - Adjust display text and layout
# 4. Flash with BOX-3 script
./.claude/skills/esphome-box3-builder/scripts/flash-box3.sh my-box3.yaml
显示 Lambda 渲染
Lambda 渲染手册
完整的显示 lambda 示例和模式,请参阅:
references/display-lambdas.md- 显示 lambda 手册- 文本渲染(字体、对齐、换行)
- 形状(矩形、圆形、直线)
- 图标(Material Design Icons 集成)
- 图像和精灵图
- 动画模式
- 多页面导航
- 坐标系和定位
快速显示模式
基本文本显示:
it.printf(160, 10, id(roboto_16), TextAlign::TOP_CENTER, "ESP32-S3-BOX-3");
填充矩形(卡片背景):
it.filled_rectangle(10, 30, 300, 80, COLOR_PRIMARY);
多行文本:
it.printf(20, 40, id(roboto_12), "Temperature: %.1f°C", id(temp_sensor).state);
it.printf(20, 60, id(roboto_12), "Humidity: %.1f%%", id(humidity_sensor).state);
图标渲染(Material Design Icons):
// Requires MDI font in assets/fonts/
it.printf(30, 100, id(mdi_icons_24), "\U000F0425"); // thermometer icon
Material Design UI 组件
Material Design 配色方案、排版和布局,请参阅:
references/material-design.md- Material Design UI 指南- 调色板(主色、强调色、背景色、文本色)
- 排版层级(标题、正文、说明文字)
- 卡片布局和间距
- 图标集成
- 触摸区域尺寸(最小 48x48 像素)
字体集成
所需字体位于 assets/fonts/:
- Roboto-Regular.ttf - Material Design 排版
- materialdesignicons-webfont.ttf - MDI 图标字体
字体配置:
font:
- file: .claude/skills/esphome-box3-builder/assets/fonts/Roboto-Regular.ttf
id: roboto_16
size: 16
- file: .claude/skills/esphome-box3-builder/assets/fonts/materialdesignicons-webfont.ttf
id: mdi_icons_24
size: 24
glyphs: [
"\U000F0425", # thermometer
"\U000F050F", # water-percent
"\U000F0493", # play
"\U000F03E4", # pause
]
图标码点参考:assets/fonts/mdi-codepoints.txt
触摸交互模式
触摸配置
完整的触摸模式和手势检测,请参阅:
references/touch-patterns.md- 触摸交互模式- 按钮的二进制传感器区域
- 滑动手势检测
- 长按模式
- 多点触控处理
- 页面导航集成
快速触摸模式
触摸按钮区域:
binary_sensor:
- platform: touchscreen
name: "Button 1"
x_min: 10
x_max: 150
y_min: 200
y_max: 230
on_press:
- logger.log: "Button 1 pressed"
页面导航:
binary_sensor:
- platform: touchscreen
name: "Next Page"
x_min: 240
x_max: 310
y_min: 200
y_max: 230
on_press:
- lambda: |-
id(current_page) = (id(current_page) + 1) % 3;
id(box3_display).show_page(id(current_page));
音频管线配置
I²S 音频设置
共享 I²S 总线(LRCLK=GPIO45、BCLK=GPIO17、MCLK=GPIO2):
i2s_audio:
- id: i2s_shared
i2s_lrclk_pin: GPIO45
i2s_bclk_pin: GPIO17
i2s_mclk_pin: GPIO2
ES7210 麦克风 ADC(16kHz、GPIO16):
audio_adc:
- platform: es7210
id: es7210_adc
bits_per_sample: 16bit
sample_rate: 16000
mic_gain: 24DB
address: 0x40
microphone:
- platform: i2s_audio
adc_type: external
i2s_din_pin: GPIO16
sample_rate: 16000
ES8311 扬声器 DAC(48kHz、GPIO15,需要 MCLK):
audio_dac:
- platform: es8311
id: es8311_dac
bits_per_sample: 16bit
sample_rate: 48000
use_mclk: true # Required
address: 0x18
speaker:
- platform: i2s_audio
dac_type: external
i2s_dout_pin: GPIO15
sample_rate: 48000
buffer_duration: 100ms # Prevents audio popping
语音助手集成
唤醒词配置
micro_wake_word(设备端检测):
micro_wake_word:
models:
- model: okay_nabu # or hey_jarvis, alexa, hey_mycroft
语音助手管线:
voice_assistant:
microphone: box_mic
speaker: box_speaker
noise_suppression_level: 1
auto_gain: 31dBFS
volume_multiplier: 2.0
on_listening:
- logger.log: "Listening..."
on_tts_start:
- logger.log: "Speaking..."
on_end:
- logger.log: "Done"
音频闪避
Nabu Media Player(语音期间降低 30dB):
media_player:
- platform: nabu
name: "Media Player"
on_play:
- media_player.volume_set:
volume: 70% # Reduce to 70% when voice assistant active
脚本和实用工具
BOX-3 刷写脚本
验证和刷写实用工具提供了 BOX-3 专用工作流:
脚本:scripts/flash-box3.sh
用法:
# Validate, compile, and flash BOX-3
./.claude/skills/esphome-box3-builder/scripts/flash-box3.sh my-box3.yaml
# The script runs:
# 1. Validates configuration
# 2. Compiles firmware with BOX-3 optimizations
# 3. Flashes via USB (auto-detects /dev/ttyACM0 or /dev/ttyUSB0)
# 4. Monitors logs after flash
BOX-3 问题排查
常见 BOX-3 错误
I²S DMA 缓冲区错误:
- 解决方案:在扬声器配置中将
buffer_duration增大到 100ms
触摸无响应:
- 解决方案:检查 GPIO48 复位引脚(反转:true,与显示屏共用)
显示闪烁:
- 解决方案:确保启用 PSRAM,并设置
color_palette: NONE
音频爆音:
- 解决方案:确认采样率(麦克风 16kHz、扬声器 48kHz),增大 buffer_duration
未检测到 PSRAM:
- 解决方案:确认配置中包含
psram: { mode: octal, speed: 80MHz }
语音助手崩溃:
- 解决方案:完全禁用 Bluetooth/BLE(会导致 ESP32-S3 崩溃)
OTA 期间 UI 冻结:
- 解决方案:在 esp32.framework.advanced 中添加
execute_from_psram: true
完整的 BOX-3 问题排查指南,请参阅:
- esphome-box3 Agent(深入的技术问题)
references/box3-pinout.md(硬件专属已知问题章节)
配置最佳实践
PSRAM 配置(关键)
始终显式配置 PSRAM(2025.2+ 要求):
psram:
mode: octal # BOX-3 has 16MB Octal PSRAM
speed: 80MHz
ESP-IDF 框架(推荐)
BOX-3 使用 ESP-IDF 而非 Arduino:
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
advanced:
execute_from_psram: true # Prevents UI freezing during OTA
显示配置
16 位颜色需要 PSRAM:
display:
- platform: ili9xxx
model: S3BOX
color_palette: NONE # Requires PSRAM (2025.2+)
# ...
触摸配置
与显示屏共用复位引脚:
touchscreen:
- platform: gt911
reset_pin:
number: GPIO48
inverted: true # Shared with display reset
interrupt_pin:
number: GPIO3
ignore_strapping_warning: true
与其他技能和 Agent 集成
何时使用其他资源
-
常规 ESPHome 配置:使用 esphome-config-helper skill
- 基本设备设置
- WiFi 配置
- 常见传感器(非 BOX-3 专用)
-
深入的 BOX-3 技术问题:委派给 esphome-box3 agent
- 音频管线架构
- 深入了解显示 lambda API
- 语音助手调优
- 硬件专属优化
-
ESPHome 核心概念:委派给 esphome-core agent
- YAML 结构与组织
- 替换项与机密信息
- 包管理
附加资源
参考文件
如需详细了解 BOX-3,请参阅:
references/box3-pinout.md- 完整的 ESP32-S3-BOX-3 硬件参考,包含 GPIO 引脚排列、I²C 地址、组件规格和已知问题references/display-lambdas.md- 全面的显示 lambda 指南,涵盖文本渲染、形状、图标、图像、动画和多页面导航模式references/touch-patterns.md- 触摸交互模式,包含按钮区域、滑动手势、长按检测和页面导航集成references/material-design.md- Material Design UI 指南,包含调色板、排版层级、卡片布局、图标用法和触摸区域尺寸指南
模板文件
templates/ 中提供了完整可用的 BOX-3 配置:
box3-base.yaml- 硬件初始化基础配置box3-voice.yaml- 带唤醒词的语音助手box3-display-ui.yaml- 多页面触摸屏 UIbox3-audio-player.yaml- 音乐/媒体播放器
资源文件
assets/ 中的 Material Design 资源:
fonts/Roboto-Regular.ttf- Material Design 字体fonts/materialdesignicons-webfont.ttf- MDI 图标字体fonts/mdi-codepoints.txt- 图标代码点参考
实用脚本
scripts/ 中的验证和刷写工具:
flash-box3.sh- BOX-3 专用的验证和刷写工作流
快速入门工作流
对于新的 ESP32-S3-BOX-3 项目:
- 选择模板,依据项目类型(base、voice、display-ui、audio-player)
- 复制模板到项目目录
- 自定义配置:
- 更新设备名称和 WiFi 凭据
- 调整显示文本、颜色和布局
- 修改触摸区域以适配自定义 UI
- 如果使用语音功能,则配置唤醒词模型
- 添加自定义功能,使用参考文档(display-lambdas.md、touch-patterns.md)
- 验证并刷写,使用
scripts/flash-box3.sh - 监控日志,并在需要时使用参考指南排查问题
向现有 BOX-3 配置中添加内容:
- 查阅参考文档,了解特定功能(显示、触摸、音频)
- 从模板中复制相关代码
- 集成到现有配置中
- 逐步测试(每次添加一个功能)
- 在最终刷写前进行验证
此技能可加速复杂音频/显示/触摸项目的 BOX-3 开发。对于常规 ESPHome 配置或深入的技术问题,请使用 esphome-config-helper skill,或委派给 ESPHome 专家 Agent。