# ESPHome — YAML-Based Firmware Builder for ESP Devices > Define sensors, switches, and automations in YAML and let ESPHome generate, compile, and OTA-flash custom firmware for ESP32 and ESP8266 boards. ## Install Save as a script file and run: # ESPHome — YAML-Based Firmware Builder for ESP Devices ## Quick Use ```bash pip install esphome # Create a configuration file: cat > mydevice.yaml << EOF esphome: name: mydevice esp32: board: esp32dev wifi: ssid: "MyNetwork" password: "secret" sensor: - platform: dht pin: GPIO4 temperature: name: "Room Temperature" EOF esphome run mydevice.yaml ``` ## Introduction ESPHome is a system that generates custom firmware for ESP8266 and ESP32 microcontrollers from YAML configuration files. It eliminates the need to write C/C++ code for common IoT tasks — define your sensors, actuators, and automations declaratively, and ESPHome compiles and flashes the firmware automatically. ## What ESPHome Does - Generates C++ firmware from YAML configuration without manual coding - Supports 300+ sensor, display, switch, and actuator components out of the box - Provides OTA updates over Wi-Fi with automatic reconnection and fallback hotspot - Integrates natively with Home Assistant via its API protocol - Includes a web-based dashboard for managing multiple devices ## Architecture Overview ESPHome reads a YAML file, generates C++ source code using Jinja2 templates, and compiles it with PlatformIO against the Arduino or ESP-IDF framework. The generated firmware includes a main loop that polls configured components, a native API server for Home Assistant communication, and optional MQTT support. The ESPHome dashboard provides a web UI for editing configurations, viewing logs, and triggering OTA updates across a fleet of devices. ## Self-Hosting & Configuration - Install via pip or run the ESPHome Docker container for the dashboard - Create a YAML file per device defining the board, Wi-Fi, and components - First flash requires USB; subsequent updates use OTA over Wi-Fi - Use secrets.yaml to store Wi-Fi passwords and API keys outside version control - Add the ESPHome integration in Home Assistant for automatic device discovery ## Key Features - Declarative YAML configuration with validation and autocompletion - Native Home Assistant API with automatic entity discovery - Lambda expressions for inline C++ when YAML is not enough - Bluetooth proxy support to extend BLE range through ESP32 devices - Voice Assistant component for local wake word detection and speech pipelines ## Comparison with Similar Tools - **Tasmota** — Pre-built firmware with web UI configuration; ESPHome generates custom firmware per device with tighter Home Assistant integration - **Arduino** — Manual C/C++ coding; ESPHome abstracts hardware interaction into YAML components - **MicroPython** — Interactive Python scripting; ESPHome provides a compiled, declarative approach optimized for Home Assistant ecosystems - **WLED** — Specialized for LED strips; ESPHome covers general-purpose IoT with LED support as one of many components ## FAQ **Q: Do I need to know C++ to use ESPHome?** A: No. Most configurations are pure YAML. For advanced logic, lambda expressions allow inline C++ snippets within the YAML file. **Q: Can ESPHome work without Home Assistant?** A: Yes. ESPHome devices can publish data via MQTT, expose a web server, or operate standalone with on-device automations. **Q: How many devices can ESPHome manage?** A: The dashboard handles dozens to hundreds of devices. Each device runs independently and reconnects automatically after network interruptions. **Q: What happens if Wi-Fi goes down?** A: Devices continue running their local automations. ESPHome firmware includes a fallback hotspot mode for reconfiguration if the primary network is unreachable. ## Sources - https://github.com/esphome/esphome - https://esphome.io/ --- Source: https://tokrepo.com/en/workflows/asset-c2860dac Author: Script Depot