Home Assistant Android app flashing ESPHome to an ESP32

The ESPHome dashboard was built to run on a laptop or a Home Assistant server, and its “Install” button assumes a wired USB serial connection to the developer machine. That has left a lot of Android-only tinkerers wondering whether they can flash an ESP32 to run ESPHome without borrowing a computer. In 2026 the answer is yes for most jobs, no for the last mile, and the picks below cover every case you are likely to hit.

The list of Android companion apps for ESP32 and ESP8266 boards more broadly is in our seven best ESPHome and microcontroller companion apps for Android roundup. This guide focuses on the one job that companion apps skip: getting the ESPHome firmware onto a fresh board in the first place.

Three routes that work from Android

The three flashing methods that actually work without a laptop, in the order you should try them:

  1. Improv Wi-Fi over Bluetooth — pre-flashed board arrives with Improv, phone provisions Wi-Fi credentials over BLE, ESPHome dashboard on the server picks it up for OTA. Zero cables, zero terminal.
  2. Home Assistant Add-on plus OTA — you already run Home Assistant on a mini PC or Raspberry Pi. First flash uses any laptop or single-board computer; every subsequent flash is over-the-air from the phone.
  3. USB-OTG serial — Android phone with USB-C OTG plus a serial-terminal app plus the ESPHome factory binary. Works for the initial flash. Fiddly, but no laptop required.

Method 1 is where the industry landed in 2026 and where you should start. Method 2 is the fallback for anyone whose board did not ship with Improv pre-installed. Method 3 is for corner cases: brand-new ESP32-C3 or ESP32-S3 boards that need to be bootstrapped from a completely blank flash.

Method 1: Improv Wi-Fi from the Home Assistant Android app

Google Play package: io.homeassistant.companion.androidHome Assistant on Aptoide

Improv Wi-Fi is an open protocol maintained by the Home Assistant / ESPHome team. A pre-flashed board — Athom smart plugs, Shelly devices switching to ESPHome, Everything Presence sensors, most 2025-onwards ESPHome-ready hardware — advertises itself over Bluetooth Low Energy. The phone connects, sends Wi-Fi SSID and password, and hands off to the ESPHome dashboard for OTA firmware installs from that point onward.

What you need

Steps

  1. Power the ESP32. Boards with Improv factory firmware advertise for the first few minutes of every boot.
  2. Open the Home Assistant Android app. It listens for Improv advertisements automatically on the same network segment and surfaces a notification labelled Set up nearby device. If it does not appear, pull down to refresh the dashboard or check that Bluetooth scanning is enabled in Android’s Bluetooth settings.
  3. Tap the notification. The phone connects over BLE, prompts you for the Wi-Fi network to join, and sends the credentials to the board. The ESP flashes its onboard LED while it associates with your Wi-Fi.
  4. The ESPHome dashboard on Home Assistant surfaces the new device under Discovered. From there, adopt it, pick or write a configuration YAML, and hit Install > Wirelessly. The compile and OTA push both happen on the server; the phone just watches.

The only thing to double-check is that the ESP is on the same subnet as your Home Assistant instance. Guest Wi-Fi networks and enterprise SSIDs with client isolation break the OTA hand-off. Put the ESP on your main network for the first flash, then move it if you need to.

Method 2: OTA after a one-time server-side flash

If your board did not ship with Improv, you still do not need a laptop to reflash it after the first time. The ESPHome dashboard’s OTA installer works over Wi-Fi once any ESPHome firmware — however basic — is on the board.

The catch is that first flash has to happen somewhere. Three practical ways:

Once the board has any ESPHome build on it, the Install > Wirelessly option in the ESPHome dashboard becomes available and you never touch USB again — until the OTA breaks and you have to recover the board.

Method 3: USB-OTG serial from Android

Search this in Google Play: Serial USB Terminal, DroidTerm, USB Serial Console

Direct serial flashing from Android is the corner-case path. Android does not run the ESPHome Python toolchain natively, so this method is not about running esphome-flasher on your phone — it is about getting a pre-built factory binary onto the ESP through a serial-terminal app.

Hardware you need

Software

Steps at a glance

  1. Plug the phone into the ESP32 via the OTG cable. Android should prompt to open the terminal app; grant USB permission.
  2. Connect to the board at 115200 baud in the terminal to verify communication.
  3. If you are running Termux, install Python and esptool (pkg install python && pip install esptool) and use esptool.py --port /dev/bus/usb/... write_flash 0x0 firmware-factory.bin. Termux needs the USB serial driver hooked to /dev/bus/usb, which usually just works on modern Android after granting permission.
  4. If you are not using Termux, some Android flashing GUI apps (search Google Play for ESP Flash Tool variants) can push a factory .bin directly through the CP2102 / CH340 bridge.

Reliability varies by phone. Samsung and Pixel devices with recent Android versions handle CP2102 and CH340 out of the box; older Xiaomi and Realme builds sometimes need the OTG-USB permission granted twice. The whole method is significantly less pleasant than Improv Wi-Fi; treat it as the fallback of last resort.

What Home Assistant on Android can and cannot do

The Home Assistant Companion Android app is where all three methods land eventually — the ESPHome dashboard lives inside Home Assistant, so once a device is on your network it appears in the app for monitoring and OTA updates. What the app itself cannot do:

The app is excellent for what it does: BLE Improv provisioning, viewing sensor data, triggering automations, receiving notifications from your ESP32s once they are online. It replaces the laptop for day-to-day operations. It does not replace the laptop for the first bootstrap of a completely blank board unless the board ships Improv-ready.

Common pitfalls when flashing ESPHome from Android

Where each method fits

MethodFirst flash of a blank boardReflash after first setupRequires laptop
Improv Wi-Fi from HA Android appOnly if the board ships Improv-readyYes (over Wi-Fi)No
ESPHome OTA after server-side first flashNo (needs server or friend’s laptop once)Yes (over Wi-Fi)Once
USB-OTG serial from AndroidYesYesNo

The order to try them in stays the same: Improv first, OTA after server-side bootstrap second, USB-OTG serial only when the first two are not available.

FAQ

Can I run the full ESPHome dashboard on my Android phone?

Not natively. The ESPHome dashboard is a Python web app that runs on Home Assistant OS, a Docker container, or a Linux install. You can access it in a mobile browser and control everything from the phone, but the compile toolchain itself runs on the server side.

Do I need Home Assistant to use ESPHome from Android?

Improv Wi-Fi provisioning and OTA flashing both assume an ESPHome dashboard is reachable from the ESP. That dashboard usually lives inside Home Assistant. You can run the ESPHome Docker image without Home Assistant, but the Android side of the workflow is designed around the Home Assistant Companion app’s Improv integration.

What if my ESP32 board doesn’t have a USB-to-serial bridge?

Some newer ESP32-S3 and ESP32-C3 modules expose USB directly without a CP2102 or CH340 bridge. These sometimes present as a native USB CDC device Android’s terminal apps can talk to, but the mode-switching quirks vary by dev-board vendor. Improv Wi-Fi or a server-side first flash sidesteps the issue entirely.

Is Improv Wi-Fi secure?

Improv encrypts the Wi-Fi credentials in transit over BLE using a session key. It does not authenticate the ESP — a nearby attacker could technically impersonate an Improv-advertising device. In practice this matters only for the first-provisioning moment. After that, the ESP is on your Wi-Fi and communicating with Home Assistant over the LAN.

Can I flash ESPHome from an iPhone the same way?

Improv Wi-Fi works from iOS through Safari’s Web Bluetooth support, and the Home Assistant iOS app supports Improv provisioning. USB-OTG serial flashing is much more restricted on iOS because Apple’s Lightning-to-USB and USB-C-to-USB adapters do not expose the CDC serial layer to third-party apps the way Android does.