ESP32 GPIO12 and GPIO14 not pulling up, or?

So, I’ve a couple of ESP’s hanging around in the house and they all work fine. Now I’m trying to get this new one ready.

It’s an ESP-POE from Lilygo. And I need to connect a lot of things, so I need all pins:

  • Binary output on 2 and 4
  • PWM output on 12
  • Binary input on 14, 15, 16, 32, 33, 34, 35, 36 and 39

To be honest I had a hard time understanding pulling up and pulling down, floating, connecting to ground or 3.3V and all that. But I think I get it now, but maybe not?
Since some of the pins don’t have internal pullup, and pins were floating “all over the world”, I decided to wire al binary inputs with a 10k resistor to 3.3V.

All binary inputs work fine except for GPIO14. All turn on/off when connected or disconnected to ground, but 14 only turns by connecting to 3.3V. Why?

My config:

binary_sensor:
  - platform: gpio
    name: "Hal Voordeur Beldrukker"
    id: hal_voordeur_beldrukker
    entity_category: diagnostic
    pin:
      number: GPIO14
      mode:
        input: true
        pullup: true
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms

Currently I’m connecting with WiFi, but when everything works, it will be moved over to ethernet.

I tried, without any luck

  • Exchange pin 14 with 12
  • Checking my config for some duplicate use of pins.
  • Adding pullup: true and false
  • Measuring V on the wire disconnected from pin: 3V (through the resistor of course)
  • Measuring V on the pin: 0V (even if I use pull up mode)
  • Measuring V on the wire connected: 0V
  • Measuring V on other working pins: 3V
  • Connecting the pin directly to ground (still OFF) and 3V (turning ON)
  • Replace GPIO14 with just 14
  • Add inverted, but result is just flipping ON and OFF, not whether it needs High or Low for a change
  • Reboot the device by unplugging power

It seems like the device is pulling this pin down instead of up?
How does the device even decide what is considered ON or OFF?

See the article: Why am I getting a warning about strapping pins?

I only get warnings about strapping pins 2, 4 and 15, but they work fine. Problem is on pin 14 and 12. Are 12 and 14 strapping pins secretly? I disconnected pin 2, 4 and 15, but behaviour of pin 14 is still wrong?

I have the documentation for esp32 printed here where it says: GPIO12 boot fails if it was pulled high, GPIO14 emits a PWM signal when booting the same is written for GPIO15.
I don’t know if it will help.

Thanks, I tried disconnecting 12 as well, but without luck. As input, I don’t think emitting PWM could be a problem, so I it doesn’t make sense to disconnect 14.

Both ESP32 Pinout Reference: Which GPIO pins should you use? | Random Nerd Tutorials and ✋🏾 🥌 🤒 Through hardships to the stars or LILYGO TTGO T-Internet-POE ESP32 LAN8270A 👶🏾 👛 🧑🏿‍🤝‍🧑🏼 suggest that 14 should be available as binary input.

And basically it is, but only by pulling it high and not low. :face_with_raised_eyebrow:

So apparently, my resistor was too strong. I wondered how 3V → 10k → pin could result in OFF and adding more 3V result in ON. Then I tested with a 3k resistor and it seemed to work as expected.

So, while all other pins are happy with 10k, pin 14 (and most likely 12 as well) need more power.