Olimex ESP32-POE-ISO reliability

I have more than a dozen ESP8266 and ESP32 module running ESPHome on HASS and they are rock solid.

I’ve also got three Olimex ESP32-POE-ISO units as I wanted cabled LAN, not WiFi. These units are proving to be highly unreliable - has anyone else had similar problems?

They will work initially - sometimes for days. Sometimes for weeks or months. Without any reason they then drop off the network. Resetting the power sometimes helps but not always. Sometime I’ll be able to re-flash them from the same code over USB. Other times they won’t flash - usually giving an error about being unable to erase flash. I’ve scrapped 4 of them and am probably going to have to scrap another!

These units are all powered from high-quality 5V switched mode PSUs onto their 5V pin. 3V3 draw is nominal - one or maybe two sensors. I’ve also tried adding a LiPo battery to the battery terminals but that didn’t help.

Is it just me, or are these boards unreliable and problematic?

Just to add - this is such a routine problem that I’ve now bought 4 spare boards to keep available for the three in service!

I should also add that there are no long wire runs for induction interference, and the wiring is not shorting or similar. This is something unique to these boards and / or the ESPHome programme on them.

Hi,

I have 20 esp32-poe-iso in operation. They work flawlessly for over a year now. Never any problems with my custom code - it is not ESPHome. I suppose it has to do with the in ESPHome “unsupported” lan chip. It is a LAN8710A. The docs say ESPHome only works for LAN8720, an a TDK one…
Maybe that’s the problem?

I wanted to ask about exactly that compatibility here…

Best
Ck

Thanks, Chris. Interesting - I really have no idea as I’m just a hobbyist but it’s good to know that you are having success with them.

So another board died today - this one was brand new when I installed it on the 8th so 5 days and now it gives flash errors.

This one was running on WiFi, the previous one was wired.

Connecting.....
Detecting chip type... ESP32
Connecting....

Chip Info:
 - Chip Family: ESP32
 - Chip Model: ESP32D0WDQ5 (revision 1)
 - Number of Cores: 2
 - Max CPU Frequency: 240MHz
 - Has Bluetooth: YES
 - Has Embedded Flash: NO
 - Has Factory-Calibrated ADC: YES
 - MAC Address: AC:67:B2:47:D2:78
Uploading stub...
Running stub...
Stub running...
 - Flash Size: 4MB
 - Flash Mode: dio
 - Flash Frequency: 40MHz
Erasing flash (this may take a while)...
Unexpected error: Error while erasing flash: Timed out waiting for packet content

And here is the code:

esphome:
  name: main_door
  platform: ESP32
  board: esp32-poe-iso
  
  on_boot: # to set flash LED brightness
    priority: -10
    then:
      - light.turn_off: led_ir
      - light.turn_off: led_main
      - light.turn_off: led_sign
      - light.turn_off: led_doorbell
      - light.turn_on:
          id: led_red
          brightness: 100%
      - delay: 2s
      - light.turn_off: led_red
      - light.turn_on:
          id: led_blue
          brightness: 70%
      - delay: 2s
      - light.turn_off: led_blue

  on_loop:
    then:
      - if:
          condition: # if both the MW and PIR sensor is activated then set LED solid on
           - binary_sensor.is_on: front_door_movement
          then:
          - light.turn_on:
              id: led_red
              brightness: 100%
          else:
          - light.turn_off: led_red

#ethernet:
#  type: LAN8720
#  mdc_pin: GPIO23
#  mdio_pin: GPIO18
#  clk_mode: GPIO17_OUT
#  phy_addr: 0
#  power_pin: GPIO12
#  
#  manual_ip:
#    static_ip: 192.xxx.yyy.zzz
#    gateway: 192.xxx.yyy.zz1
#    subnet: 255.255.255.0  

wifi:
  ssid: !secret wifi_name
  password: !secret wifi_password
  domain: !secret wifi_domain
  manual_ip:
    static_ip: 192.xxx.yyy.zzz
    gateway: 192.xxx.yyy.zz1
    subnet: 255.255.255.0

logger:
  level: DEBUG
  logs:
   light: NONE

api:
ota:

time: # needed to enable the automatic switching of the sign LED on the ESP32 itself
  - platform: homeassistant
    id: homeassistant_time

sun: # needed to enable the automatic switching of the sign LED on the ESP32 itself
# https://esphome.io/components/sun.html
# first set location
  latitude: XX
  longitude: YY

  on_sunrise:
    - then:
        - logger.log: Good morning!
    - elevation: -4°
      then:
        - light.turn_off: led_sign

  on_sunset:
    - then:
        - logger.log: Good evening!
    - elevation: -4°
      then:
        - light.turn_on:
            id: led_sign
            brightness: 35%

switch:
# This is to restart the ESPHome device remotely
  - platform: restart
    name: "Restart ESPHome - Front Door"

interval:
  - interval: 0.75s
    then:
      - light.toggle: led_blue

output:
  - platform: ledc 
    pin: GPIO32
    frequency: 19531 Hz
    id: led_main_out


  - platform: ledc 
    pin: GPIO14
    frequency: 19531 Hz
    id: led_sign_out

  - platform: ledc 
    pin: GPIO15
    frequency: 19531 Hz
    id: led_doorbell_out

  - platform: ledc 
    pin: GPIO13
    frequency: 19531 Hz
    id: led_ir_out

  - platform: ledc 
    pin: GPIO5
    frequency: 19531 Hz
    id: led_red_out
    inverted: TRUE

  - platform: ledc 
    pin: GPIO4
    frequency: 19531 Hz
    id: led_blue_out
    inverted: TRUE

light:
  - platform: monochromatic
    name: "Front Door Main LED"
    id: led_main
    output: led_main_out
    default_transition_length: 0s

  - platform: monochromatic
    name: "Front Door Sign LED"
    id: led_sign
    output: led_sign_out
    default_transition_length: 0s
    

  - platform: monochromatic
    name: "Doorbell LED"
    id: led_doorbell
    output: led_doorbell_out

  - platform: monochromatic
    name: "IR LED"
    id: led_ir
    output: led_ir_out
    default_transition_length: 0s

  - platform: monochromatic
    name: "Front Door Red LED"
    id: led_red
    output: led_red_out
    default_transition_length: 0s
    internal: TRUE

  - platform: monochromatic
    name: "Front Door Blue LED"
    id: led_blue
    output: led_blue_out
    default_transition_length: 0s
    internal: TRUE    

binary_sensor:    
  - platform: gpio
    pin:
      number: GPIO02
      inverted: FALSE
      mode: INPUT_PULLDOWN #INPUT
    id: microwave
    name: "Front Door MW"   
    device_class: motion    
  - platform: gpio
    pin:
      number: GPIO33
      inverted: FALSE
      mode: INPUT
    id: pir
    name: "Front Door PIR"  
    device_class: motion   
  - platform: gpio
    id: doorbell
    name: "Door Bell"  
    pin:
      number: GPIO35
      inverted: TRUE
      mode: INPUT_PULLUP
    device_class: sound       

  - platform: template
    name: "Front Door Movement"
    id: front_door_movement
    device_class: motion
    lambda: !lambda |-
      if ((id(microwave).state) and (id(pir).state)) {
        return true;
      } else {
        return false;
      }

If I’m doing something stupid I’d love to know what it is because otherwise these boards are not reliable, which is a real pity!

This latest one lasted 2 days - I’ll have to switch to another board type!

Sorry to hear that. I can’t spot anything suspicious in your code…

Does the console show some unexpected debug output?

(edited to add) Thanks, @chris-kuhr for your assistance and feedback!

No, unfortunately the device is in a location somewhat difficult to get to so I’m not able to attach a console to it directly (via USB) and I’m not aware of any way to capture the output over the network so I’m working without that information source unfortunately.

In desperation I have made a few changes to the code - removing the on-loop action and replacing it with actions on the binary sensor. I’ve also switched to WiFi so I can eliminate anything over the ethernet cable (although I think it is highly unlikely that this is contributing to the issues as it is a 2m run from an ethernet switch)

Time will tell if this works. If not I’ll have to redesign the board and replace it with a different type of ESP32 board.

esphome:
  name: front_door
  platform: ESP32
  board: esp32-poe-iso
  
  on_boot: # to set flash LED brightness
    priority: -10
    then:
      - light.turn_on:
          id: led_red
          brightness: 100%
      - delay: 10s
      - light.turn_off: led_red
      - light.turn_on:
          id: led_blue
          brightness: 70%
      - delay: 10s
      - light.turn_off: led_blue

#  on_loop:
#    then:
#      - if:
#          condition: # if both the MW and PIR sensor is activated then set LED solid on
#           - binary_sensor.is_on: front_door_movement
##            - binary_sensor.is_on: microwave
##            - binary_sensor.is_on: pir
#          then:
#          - light.turn_on:
#              id: led_red
#              brightness: 100%
##          - light.turn_off: led_blue
#          else:
#          - light.turn_off: led_red

#ethernet:
#  type: LAN8720
#  mdc_pin: GPIO23
#  mdio_pin: GPIO18
#  clk_mode: GPIO17_OUT
#  phy_addr: 0
#  power_pin: GPIO12
#  
#  manual_ip:
#    static_ip: 192.168.0.X
#    gateway: 192.168.0.Y
#    subnet: 255.255.255.0  

wifi:
  ssid: !secret wifi_name
  password: !secret wifi_password
  domain: !secret wifi_domain
  manual_ip:
    static_ip: 192.168.0.X
    gateway: 192.168.0.Y
    subnet: 255.255.255.0

logger:
  level: DEBUG
  # NONE
  # ERROR
  # WARN
  # INFO
  # DEBUG
  # VERBOSE
  # VERY_VERBOSE
  logs:
   light: NONE
#    switch: NONE

api:
ota:

time: # needed to enable the automatic switching of the sign LED on the ESP32 itself
  - platform: homeassistant
    id: homeassistant_time

sun: # needed to enable the automatic switching of the sign LED on the ESP32 itself
# https://esphome.io/components/sun.html
# first set location
  latitude: A
  longitude: B

  on_sunrise:
    - then:
        - logger.log: Good morning!
    - elevation: -4°
      then:
        - light.turn_off: led_sign

  on_sunset:
    - then:
        - logger.log: Good evening!
    - elevation: -4°
      then:
        - light.turn_on:
            id: led_sign
            brightness: 35% 

switch:
# This is to restart the ESPHome device remotely
  - platform: restart
    name: "Restart ESPHome - Front Door"

interval:
  - interval: 0.75s
    then:
      - light.toggle: led_blue

output:
  - platform: ledc 
    pin: GPIO32
    frequency: 19531 Hz
    id: led_main_out
#    inverted: TRUE

  - platform: ledc 
    pin: GPIO14
    frequency: 19531 Hz
    id: led_sign_out
#    inverted: TRUE

  - platform: ledc 
    pin: GPIO15
    frequency: 19531 Hz
    id: led_doorbell_out
#    inverted: TRUE

  - platform: ledc 
    pin: GPIO13
    frequency: 19531 Hz
    id: led_ir_out
#    inverted: TRUE    

  - platform: ledc 
    pin: GPIO5
    frequency: 19531 Hz
    id: led_red_out
    inverted: TRUE

  - platform: ledc 
    pin: GPIO4
    frequency: 19531 Hz
    id: led_blue_out
    inverted: TRUE

light:
  - platform: monochromatic
    name: "Front Door Main LED"
    id: led_main
    output: led_main_out
    default_transition_length: 0s
    restore_mode: ALWAYS_OFF    

  - platform: monochromatic
    name: "Front Door Sign LED"
    id: led_sign
    output: led_sign_out
    default_transition_length: 0s
    restore_mode: ALWAYS_OFF    
    

  - platform: monochromatic
    name: "Doorbell LED"
    id: led_doorbell
    output: led_doorbell_out
#    default_transition_length: 0s
#    internal: TRUE
    restore_mode: ALWAYS_OFF

  - platform: monochromatic
    name: "IR LED"
    id: led_ir
    output: led_ir_out
    default_transition_length: 0s
#    internal: TRUE   
    restore_mode: ALWAYS_OFF

  - platform: monochromatic
    name: "Front Door Red LED"
    id: led_red
    output: led_red_out
    default_transition_length: 0s
    internal: TRUE
    restore_mode: ALWAYS_OFF    

  - platform: monochromatic
    name: "Front Door Blue LED"
    id: led_blue
    output: led_blue_out
    default_transition_length: 0s
    internal: TRUE    



binary_sensor:    
  - platform: gpio
    pin:
      number: GPIO02
      inverted: FALSE
      mode: INPUT_PULLDOWN #INPUT
    id: microwave
    name: "Front Door MW"   
    device_class: motion    
  - platform: gpio
    pin:
      number: GPIO33
      inverted: FALSE
      mode: INPUT
    id: pir
    name: "Front Door PIR"  
    device_class: motion   
  - platform: gpio
    id: doorbell
    name: "Door Bell"  
    pin:
      number: GPIO35
      inverted: TRUE
      mode: INPUT_PULLUP
    device_class: sound       

  - platform: template
    name: "Front Door Movement"
    id: front_door_movement
    device_class: motion
    lambda: !lambda |-
      if ((id(microwave).state) and (id(pir).state)) {
        return true;
      } else {
        return false;
      }
    on_press:
      then:
        - light.turn_on:
            id: led_red
    on_release:
      then:
        - light.turn_off:
            id: led_red

How is the Olimex board working now (a year later)? I am looking at this for a ESP32 POE solution.

1 Like

I’d be interested in your custom code if you can share it. How is it different then ESPHome?

I didn’t look too much into the esp home code, which has also made a lot of progress since I last tried it.
However, I could share some code, but it has grown rather complex too by now.
Maybe I can share some specific code snippets.
What are you interested in?