ESP32 disconnects from the network randomly

Good afternoon, I have an ESP32 with the code below, and it disconnects from the network randomly and does not turn back on. It’s working fine for hours, and then it goes offline.

  • I already changed the power supply
  • I have already seen the WIFI AP settings
  • I can see the logs
esphome:
  name: esp32-anexo2


esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: debug

# Enable Home Assistant API
api:
  encryption:
    key: "***"

ota:
  password: "***"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.**
    gateway: 192.168.1.***
    subnet: ***.***.***.*

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-Anexo2 Fallback Hotspot"
    password: "**"

captive_portal:

i2c:
  sda: 21
  scl: 22
  scan: true

esp32_ble_tracker:

sensor:
  - platform: bme280
    temperature:
      name: "**"
      filters:
        - offset: 0.7
    humidity:
      name: "**"
      accuracy_decimals: 0
      filters:
        - offset: 2.35
    address: 0x76 
    update_interval: 300s

  - platform: atc_mithermometer
    mac_address: "**:**:**:**:**:**"
    temperature:
      name: "ATC Temperature"
    humidity:
      name: "ATC Humidity"
    battery_level:
      name: "ATC Battery-Level"
    battery_voltage:
      name: "ATC Battery-Voltage"
    signal_strength:
      name: "ATC Signal"  

binary_sensor:
  - platform: gpio
    pin: 13
    name: "***"
    device_class: motion
Logger: aioesphomeapi.connection
Source: runner.py:188
First occurred: 17 de dezembro de 2023 às 18:15:31 (9 occurrences)
Last logged: 00:28:49

esp32-anexo2 @ 192.168.1.***: Connection error occurred: [Errno 104] Connection reset by peer
esp32-anexo2 @ 192.168.1.***: Connection error occurred: Ping response not received after 90.0 seconds

Add this sensor:

What values do you get before it disconnects?

Also there is no need to obscure local IP addresses. They are not routable on the Internet.

thanks for trying to help.


I’ve already monitored the signal strength, and didn’t find anything relevant. the signal always remains good until the connection is lost.

How are you measuring that and what relation does % have to dBm?

Just to rule it out, you may want to add the following to your WiFi section

image

A few years ago, when I first started with ESPHome, I had to disable the WiFi power saving in order to keep the ESP32 microcontroller connected reliably.

1 Like

I had to do the same and remove power saving for all of my ESP32 nodes. Most of them have a signal strength between -52dbm and -64dbm but they would periodically and randomly disconnect then reboot. Once I turned off power saving they stay connected all the time. I did have to disable the web server on one of them as well due to it causing the Wi-Fi stack to lose interrupt timing and cause comms issues. If there’s too much the ESP is doing, it can’t do everything it needs to do when it needs to do it and Wi-Fi comms is one of those things that can’t be delayed or something views it as a hung client or unresponsive client and it either gets kicked off the network or it reboots.

2 Likes

hi,

sensor:
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

Your 80% signal level corresponds to -60dBm. Which is good. So that’s not your issue.

Yes, I had already created this sensor to rule this out.
ths

Thanks for the tip. I’ll change it and give you feedback later. I didn’t change this because I had to compare it with another esp32 that has the same configuration and has power_save_mode: in light and I have no problems with that other one. But, as no two esp are alike, you may be right. I’ll try. Thanks

Yeah but it gave an arbitrary % value that means nothing to me as I did not know how it was calculated. I was just checking. For reference:

That -70dBm signal level corresponds to 60% on your scale, you should aim for that as a minimum.

The power_save_mode: NONE does not work with esp32_ble. I had already looked at github and a solution would be to change the Arduino version to 1.0.4, but this version is already from 2018 and gives an error when installing

Captura de ecrã 2023-12-19 115345

1 Like

Did you ever figured out what was your issue? I just acquired 2 of these ESP32 S2 mini and one of them disconnects from wifi and never regain connection. The disconnects are random ranges from 10 mins - a few hours a later. Both of these run the same human sensor and code, but one of them will not say connected to wifi. My wifi signal is steady at -46.

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino
    version: 2.0.9
    platform_version: 6.3.2

I managed to capture this log when it disconnected.

INFO ESPHome 2024.9.0
INFO Reading configuration /config/esphome/sr-human-sensor.yaml...
INFO Detected timezone 'Asia/Tokyo'
INFO Starting log output from 192.168.1.187 using esphome API
WARNING Can't connect to ESPHome API for sr-human-sensor @ 192.168.1.187: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.1.187', port=6053))]: [Errno 113] Connect call failed ('192.168.1.187', 6053) (SocketAPIError)
INFO Trying to connect to sr-human-sensor @ 192.168.1.187 in the background

In your ESPHome wifi: section, have you tried adding “power_save_mode: none” as shown below? I know that this solved the problem of my ESP32 periodically disconnecting a couple years ago.

wifi:
  power_save_mode: none
#  power_save_mode: light
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Yes, I have tried power_save_mode, but it didn’t work. However, removing web_server seems to helped. It’s been 15 hours and the device is still connected.

# web_server:
#  port: 80

1 Like