ESPHome: Create & Test New Device With Uvx Compile
Hey guys! Today, we're diving into creating a new ESPHome device and making sure our development environment is all set up and ready to rock using uvx esphome compile
. Let's get started!
Overview
We're going to create a brand-new ESPHome device configuration and run a complete workflow test using uvx esphome compile
. This ensures everything is working smoothly in our development setup. Think of it as a quick health check for our ESPHome environment. It verifies that our tools are correctly installed, configured, and playing nice with each other. No more unexpected errors down the line!
Context
- Current State: We already have one test device (
test-device.yaml
) that we've compiled before. This gives us a baseline to work from, ensuring our core setup is functional. - Timestamp: 2025-10-10 09:03 GMT+7
- Related Issues: Check out #3 (session context) and #1 (initial setup) for more background info.
- Tools Available: We've got
uvx
installed at/Users/nat/.local/bin/uvx
.
Current Architecture Analysis
Existing Structure
Here's a look at our current directory structure:
esphome/
├── .esphome/ # Build cache (gitignored)
├── .gitignore
├── README.md # Comprehensive uvx usage guide
└── test-device.yaml # ESP32dev minimal test config
Existing Device Configuration
Our existing test-device
has the following setup:
- Name: test-device
- Board: ESP32dev
- Framework: Arduino
- Features: Logger, API, OTA, WiFi, Web Server
Proposed Solution
Our plan is to create a new, simple device configuration to make sure the entire ESPHome + uvx process is working as expected.
New Device Specifications
Let's define what our new device will look like:
- Name: simple-test-device (or something similar)
- Board: ESP32dev (we know this one works!)
- Purpose: A super minimal test to check compilation
- Features:
- Basic logging
- WiFi (with some test credentials)
- Optional: Maybe a simple LED blink pattern on a GPIO pin
Implementation Plan
Phase 1: Create New Device Configuration (~15 minutes)
Alright, let's get our hands dirty and create the new device configuration.
Step 1.1: Create a new YAML configuration file
- File:
esphome/simple-test.yaml
- Configuration elements:
esphome:
name: simple-test
friendly_name: "Simple Test Device"
esp32:
board: esp32dev
framework:
type: arduino
logger:
level: INFO
wifi:
ssid: "test-ssid"
password: "test-password"
Step 1.2: Validate YAML syntax
Now, let’s make sure our YAML is on point:
- Double-check that indentation is consistent. YAML is very picky about this!
- Verify all the required fields are present. No missing pieces!
- Make sure those WiFi credentials are there. They're crucial for compiling.
Phase 2: Compile Test (~5 minutes)
Time to fire up the compiler and see what happens!
Step 2.1: Run compilation
Open up your terminal and run:
uvx esphome compile esphome/simple-test.yaml
Step 2.2: Verify compilation output
After the command runs, let's check the results:
- Look for that sweet "successful firmware generation" message. That's what we want to see!
- Check the
.esphome/
directory for those build artifacts. They should be there. - Note how long the compilation took. It should be pretty fast because of cached dependencies.
Step 2.3: Check for warnings/errors
Even if it compiles, let's be thorough:
- Carefully review the compiler output for any warnings or errors.
- Watch out for deprecated component warnings. Those can cause trouble later.
- Make sure the firmware size looks reasonable.
Phase 3: Documentation Update (~5 minutes)
Let's keep our documentation up-to-date!
Step 3.1: Update README.md
- Add the new device to the Configuration Files section.
- Explain what the
simple-test
device is for. - Include an example of the compilation command.
Step 3.2: Git commit
git add esphome/simple-test.yaml esphome/README.md
git commit -m "feat: Add simple-test ESPHome device configuration
- What: New minimal ESP32 device config for testing
- Why: Verify uvx esphome compile workflow
- Impact: Demonstrates working development environment
Closes #[issue-number]"
Technical Considerations
Dependencies (Already Cached)
Good news! These should already be cached from previous work:
- xtensa-esp-elf-14.2.0 toolchain ✓
- AsyncTCP library ✓
- ESPAsyncWebServer ✓
- ArduinoJson ✓
- Arduino framework for ESP32 ✓
Expected Outcomes
Here's what we're hoping for:
- Compilation succeeds - The firmware builds without any errors.
- Fast build time - Less than 1 minute because of those cached dependencies.
- Clean output - No warnings or deprecated components cluttering the output.
- Artifacts generated - A
.esphome/simple-test/
directory is created with all the build goodies.
Potential Issues & Mitigations
Let's think about what could go wrong and how to handle it:
- Issue:
uvx
might need to download ESPHome for the first time.- Mitigation: This should be cached from our previous
test-device
compilation.
- Mitigation: This should be cached from our previous
- Issue: YAML syntax errors.
- Mitigation: We're keeping the configuration simple and basing it on a working example to minimize errors.
- Issue: Board compatibility.
- Mitigation: We're using the same
esp32dev
board as thetest-device
, which we already know works.
- Mitigation: We're using the same
Success Criteria
Let's make sure we hit all our goals:
- [ ] New YAML configuration file created
- [ ]
uvx esphome compile
completes successfully - [ ] Firmware binary generated in
.esphome/
directory - [ ] No compilation errors or critical warnings
- [ ]
README.md
updated with the new device - [ ] Changes committed to
git
- [ ] Compilation time noted (for future reference)
Testing Strategy
Let's put it to the test!
Compilation Test
# Primary test
uvx esphome compile esphome/simple-test.yaml
# Verify artifacts
ls -lh .esphome/simple-test/
# Check firmware size
ls -lh .esphome/simple-test/.pioenvs/*/firmware.bin
Optional: Config Validation
If you want to quickly check the config without compiling, use this:
# Just validate without compiling (faster)
uvx esphome config esphome/simple-test.yaml
Estimated Time
Total: ~25 minutes
- Configuration creation: 15 minutes
- Compilation test: 5 minutes
- Documentation: 5 minutes
Future Enhancements (Out of Scope)
These are ideas for later, but we won't tackle them now:
- Add actual GPIO components (like LEDs and sensors)
- Create templates for common device types
- Set up CI/CD for automated compilation tests
- Support multi-board configurations (ESP8266, ESP32-C3, etc.)
References
- Existing:
esphome/README.md
- uvx usage patterns - Existing:
esphome/test-device.yaml
- a working configuration example - ESPHome Docs: https://esphome.io/guides/getting_started_command_line.html
Generated via nnn
workflow - 2025-10-10 09:03 GMT+7
Context from: Issue #3