This skill should be used when the user asks to "configure esp32-s3-box-3", "set up box-3", "create box-3 voice assistant", "display lambda on box-3", "configure ili9xxx display", "set up gt911...
Specialist skill for ESP32-S3-BOX-3 hardware providing complete configuration templates, display lambda cookbook, touch interaction patterns, and voice assistant integration for complex audio/display/touch projects.
This skill accelerates ESP32-S3-BOX-3 development by providing:
Use this skill for ESP32-S3-BOX-3 specific projects. For general ESPHome configuration, use the esphome-config-helper skill instead.
Use this skill when:
Delegate to specialized ESPHome agents for:
The ESP32-S3-BOX-3 is a complete development kit with:
Critical Requirements:
For complete hardware specifications, consult:
references/box3-pinout.md - Complete GPIO pinout, component addresses, known issuesLocated in templates/ directory:
box3-base.yaml - Hardware initialization foundation
box3-voice.yaml - Complete voice assistant
box3-display-ui.yaml - Multi-page touchscreen UI
box3-audio-player.yaml - Music/media player
To use a template:
Template Workflow:
# 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
For complete display lambda examples and patterns, consult:
references/display-lambdas.md - Display lambda cookbookBasic Text Display:
it.printf(160, 10, id(roboto_16), TextAlign::TOP_CENTER, "ESP32-S3-BOX-3");
Filled Rectangle (Card Background):
it.filled_rectangle(10, 30, 300, 80, COLOR_PRIMARY);
Multi-Line Text:
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);
Icon Rendering (Material Design Icons):
// Requires MDI font in assets/fonts/
it.printf(30, 100, id(mdi_icons_24), "\U000F0425"); // thermometer icon
For Material Design color schemes, typography, and layouts, consult:
references/material-design.md - Material Design UI guideRequired fonts are in assets/fonts/:
Font Configuration:
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
]
Icon codepoints reference: assets/fonts/mdi-codepoints.txt
For complete touch patterns and gesture detection, consult:
references/touch-patterns.md - Touch interaction patternsTouch Button Zone:
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"
Page Navigation:
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));
Shared I²S Bus (LRCLK=GPIO45, BCLK=GPIO17, MCLK=GPIO2):
i2s_audio:
- id: i2s_shared
i2s_lrclk_pin: GPIO45
i2s_bclk_pin: GPIO17
i2s_mclk_pin: GPIO2
ES7210 Microphone 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 Speaker DAC (48kHz, GPIO15, requires 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 (on-device detection):
micro_wake_word:
models:
- model: okay_nabu # or hey_jarvis, alexa, hey_mycroft
Voice Assistant Pipeline:
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 reduction during voice):
media_player:
- platform: nabu
name: "Media Player"
on_play:
- media_player.volume_set:
volume: 70% # Reduce to 70% when voice assistant active
The validation and flashing utility provides BOX-3 specific workflow:
Script: scripts/flash-box3.sh
Usage:
# 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
I²S DMA Buffer Error:
buffer_duration to 100ms in speaker configTouch Not Responding:
Display Flicker:
color_palette: NONEAudio Popping:
PSRAM Not Detected:
psram: { mode: octal, speed: 80MHz } in configVoice Assistant Crashes:
UI Freezing During OTA:
execute_from_psram: true in esp32.framework.advancedFor complete BOX-3 troubleshooting, consult:
references/box3-pinout.md (hardware-specific known issues section)Always include explicit PSRAM config (2025.2+ requirement):
psram:
mode: octal # BOX-3 has 16MB Octal PSRAM
speed: 80MHz
Use ESP-IDF over Arduino for BOX-3:
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
advanced:
execute_from_psram: true # Prevents UI freezing during OTA
16-bit color requires PSRAM:
display:
- platform: ili9xxx
model: S3BOX
color_palette: NONE # Requires PSRAM (2025.2+)
# ...
Shared reset pin with display:
touchscreen:
- platform: gt911
reset_pin:
number: GPIO48
inverted: true # Shared with display reset
interrupt_pin:
number: GPIO3
ignore_strapping_warning: true
General ESPHome config: Use esphome-config-helper skill
Deep BOX-3 technical questions: Delegate to esphome-box3 agent
ESPHome core concepts: Delegate to esphome-core agent
For detailed BOX-3 information, consult:
references/box3-pinout.md - Complete ESP32-S3-BOX-3 hardware reference with GPIO pinout, I²C addresses, component specifications, and known issuesreferences/display-lambdas.md - Comprehensive display lambda cookbook with text rendering, shapes, icons, images, animation, and multi-page navigation patternsreferences/touch-patterns.md - Touch interaction patterns including button zones, swipe gestures, long press detection, and page navigation integrationreferences/material-design.md - Material Design UI guide with color palette, typography hierarchy, card layouts, icon usage, and touch zone sizing guidelinesComplete working BOX-3 configurations in templates/:
box3-base.yaml - Hardware initialization foundationbox3-voice.yaml - Voice assistant with wake wordbox3-display-ui.yaml - Multi-page touchscreen UIbox3-audio-player.yaml - Music/media playerMaterial Design resources in assets/:
fonts/Roboto-Regular.ttf - Material Design typographyfonts/materialdesignicons-webfont.ttf - MDI icon fontfonts/mdi-codepoints.txt - Icon codepoint referenceValidation and flashing tools in scripts/:
flash-box3.sh - BOX-3 specific validation and flashing workflowFor new ESP32-S3-BOX-3 project:
scripts/flash-box3.shFor adding to existing BOX-3 config:
This skill provides rapid BOX-3 development for complex audio/display/touch projects. For general ESPHome configuration or deep technical questions, use the esphome-config-helper skill or delegate to ESPHome specialist agents.