All ESP8266/32 devices show "No networks found" after uploading any firmware through any means

I am sorely confused here, I cannot get any device to find any networks after uploading any bin files generated by esphome builder through any means of uploading. So far I’ve tried multiple Seeedstudio Xiao ESP32-C6, a Xiao ESP32-C3, a Xiao ESP32-S3, a generic ESP32-C3 board, a Sparkfun ESP32 Thing Plus, and multiple Wemos D1 Mini V4.0 ESP8266 boards, the behavior I’m seeing is consistent across them all.
What I’m doing:

  1. Plug the device into my computer, open web.esphome.io, hit Connect > Prepare for first use > Install.
  2. Once it’s installed, I hit Connect to WiFi, enter my WiFi credentials, and after a few minutes the device shows up in the ESPHome Device Builder add-on in Homeassistant as a discovered device.
  3. From there, I give the device a meaningful name, hit Take Control, and let it upload the new firmware over the air, which always works just fine.
  4. At this point the device goes offline and never comes back online.
  5. Using the Logs tool in web.esphome.io to read the serial log info, where I’m met with an endless loop of:
No networks found
Retry phase: INITIAL_CONNECT → SCAN_CONNECTING
Starting scan
No networks found
Retry phase: SCAN_CONNECTING → RETRY_HIDDEN
Hidden candidate 'my_ssid' at index 0
Connecting to 'my_ssid' (any) (priority 0, attempt 1/1 in phase RETRY_HIDDEN)...
Disconnected ssid='my_ssid' reason='Probe Request Unsuccessful'
Retry phase: RETRY_HIDDEN → RESTARTING
Restarting adapter
Network no longer found
Retry phase: RESTARTING → SCAN_CONNECTING
Starting scan
No networks found

“my_ssid” used in place of my actual WiFi name only when pasted here.

As a side note, if, in step 3, I don’t change the device’s name and just hit Take Control, it adds the device just fine. However, as soon as I use the update function to push and OTA firmware or use the web flasher to push a .bin firmware, it jumps right into step 4.

This behavior is extremely consistent and repeatable across multiple versions of ESP32 boards and even ESP8266 boards.

Versions of everything:
Home assistant:
Installation Method: Home Assistant OS
Core: 2026.8.2
Supervisor: 2026.07.5
Operating System: 18.2
Frontend: 20260729.7

ESPHome Device Builder:
Device Builder: 1.9.2
ESPHome: 2026.7.4

What am I missing in my process? This seems like it should be a pretty straightforward task, and there is no way ESPHome is that broken right now, so I have to be doing something wrong, but what? I’m happy to provide any additional information that I can, but I’m very new to ESPHome, so I’m sure there’s a lot of terminology I’m not aware of.

YAML. Post the YAML using code tags. Without that we are only guessing.

Update? Why don’t you just compile the binary from the YAML configuration for your device?

At the end of step 2, what is the IP of the ESP?

Without your YAML configuration, the best you will get are guesses.

Here is the YAML for the Wemos D1 Mini V4.0 with ESP8266, it’s the default, unaltered file that ESPHome Device Builder creates when you add a new device.

esphome:
  name: wemos
  friendly_name: wemos
  min_version: 2026.4.0
  name_add_mac_suffix: false

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Update is the option that shows up when I go to the YAML edit page in device builder (bottom right corner):

At the end of step 2 they all get valid IPs, although obviously each device gets a different IP. One of the Wemos boards, for example, get 10.10.10.42, another device got 10.10.10.22, etc.

To be clear, this is not my YAML, it’s the default that Home assistant/ESPHome/device builder creates when it takes control of a discovered device, I haven’t touched the YAML at all, which is why I’m confused.

Check that this secret is correct, including letter case (deadbeef vs DEADBEEF). Make sure that there are no trailing spaces.

This secret file is not the secret file in your config/ folder. It is the secret file in config/esphome

See what happens if you use the actual values in your yaml file rather than secrets.

In the latest ESPHome Builder you can even edit this:


OR:


So this is interesting, replacing both the ssid and password with strings in quotes, rather than !secret variables did actually solve the issue. However, both my ssid and password variable are absolutely, without a doubt, correct, and if I use the variable in either one, I’m back to being unable to see any networks. Maybe a bug?

Maybe your password includes some characters that not render correctly, you may test first to press Validate before Install to see how the rendered yaml file looks like.

That’s how I set them in the first place.

Another interesting find, both my password and ssid contain a hyphen -, and in the secrets section they both showed up as hyphens, but in the output of validate, they both showed up as missing, as in there simply was no hyphen. I rebooted my homeassistant server, closed my browser windows, and now the validate output shows the hyphens correctly and I can use the variables. Not sure how the hyphens just disappear like that, but it seems to be working correctly now. That validate tool was the debug I needed, thank you for pointing that out to me.

Put your secrets in quotes. Hyphens are valid SSID and passwrd characters but YAML uses them as list delimiters. If the secret is in quotes the hyphens will not be used as YAML list delimiters.

In the WiFi Components field that patrikg shows, they do not need to be in quotes, as evidenced by my now-working devices which do not have quotes around either string. The only thing I can think is that something in home assistant was bugged out and fixed itself when I rebooted it.

Yeah, you may press that to update your ESPHome Builder.
So you get like me, the secrets editing feature in ESPHome Builder.

Yes that tool, I use very often to verify that my yaml file render to correct values.
There are also a way of getting what variables and values you can set behind the scenes.