TekOnline

From USB Cable To Home Assistant: Getting Our ESP32 HVAC Board Online (And the New Workflow)

On March 5, 2026, we brought a fresh ESP32 HVAC board online and documented a cleaner workflow for future installs.

This post is the practical version of what happened: what worked, what confused us, and the exact flow we will use from now on.

The Goal

We wanted to:

  1. Connect a new ESP32 board over USB.
  2. Flash a minimal ESPHome base firmware.
  3. Join Wi-Fi.
  4. Make it visible in Home Assistant.
  5. Move to OTA updates so future zone-control flashes are wireless.

Step 1: Confirm Serial Connectivity First

Before touching configs, we validated USB serial access.

What we checked:

  1. Which COM port the board appears on (COM13 in our case).
  2. That the port could be opened.
  3. That serial boot logs were readable.

This immediately told us the hardware link was good, even before Wi-Fi or Home Assistant were involved.

Step 2: Understand Boot Mode (Critical)

At one point the board reported:

  • DOWNLOAD_BOOT
  • waiting for download

That means it was in ESP32 UART bootloader mode (flash mode), not normal app mode.

Useful rule:

  1. Hold BOOT to force flash mode for uploads.
  2. Release BOOT and reset normally to run firmware.

Step 3: Flash a Minimal ESPHome Base Firmware

We flashed a small base config that included:

  1. wifi
  2. api
  3. ota
  4. web_server
  5. captive_portal

This is the bring-up firmware. It gives you enough to manage the board remotely without loading full zone logic yet.

Step 4: Verify Wi-Fi in Serial Logs

After flashing, serial logs showed initial auth failures, then successful connection.

Final result:

  • Hostname: esp-hvac-base
  • IP: 192.168.2.194
  • OTA/API/Web ports reachable

Important takeaway: do not assume failure after first auth retries. Wait for a full retry cycle and confirm IP assignment.

Step 5: Home Assistant Discovery Nuance

This is where people get tripped up.

The device appeared in Home Assistant > Devices & Services as discovered, but did not automatically appear in the ESPHome dashboard project list.

Why:

  1. Devices & Services discovery comes from HA Core (zeroconf/mDNS + integration flow).
  2. ESPHome dashboard list is based on YAML projects present in /config/esphome.

So discovery and dashboard project visibility are related, but not identical.

Step 6: The New Standard Flow

For every new board:

  1. Plug board in via USB.
  2. Confirm COM port + serial logs.
  3. Flash base ESPHome firmware (Wi-Fi + API + OTA + web).
  4. Confirm Wi-Fi IP from serial logs.
  5. In HA, complete discovered ESPHome integration setup (or add manually by IP).
  6. In ESPHome dashboard, create/import matching YAML project.
  7. Do all future flashes wirelessly (OTA).

Security And Config Hygiene

  1. Store Wi-Fi in secrets.yaml (!secret wifi_ssid!secret wifi_password).
  2. Avoid hardcoding credentials in shared YAML.
  3. Keep a dedicated base firmware for recovery and onboarding.
  4. Move to encrypted API keys once base onboarding is stable.

Why This Flow Is Better

  1. Faster bring-up on replacement boards.
  2. Less USB plugging and unplugging after first flash.
  3. Clear separation between board online and application config.
  4. Easier debugging because each stage has a single success signal:
  5. USB success: serial logs.
  6. Wi-Fi success: IP assigned.
  7. HA success: config entry.
  8. OTA success: wireless upload works.

Final Outcome

The board is online, reachable, and OTA-ready.

We now have a repeatable onboarding flow that is easier to troubleshoot and safer for future zone-control deployments.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *