Confused: Usable pins on ESP32-POE-ISO-WROVER-EA? (Also, board type for ESPHome)

Started by ethanjrt, January 31, 2025, 07:46:37 PM

Previous topic - Next topic

ethanjrt

Hi,

Excuse my ignorance but I am very new to ESP32s and I have searched as much as I can.

I am trying to understand which pins are available to me to use in the ESP32-POE-ISO-WROVER-EA. I got two from Olimex earlier this month. I am specifically trying to integrate it into Home Assistant via ESPHome, which I understand is its own thing but I'll ask about that later in this post in case anyone here has experience with this issue.

Pins: The product page provides this pin map, which shows the usable pins. Some are led out to the UEXT, and some are not (but are still marked as usable).

Questions about this:
  • Is there a version of this map for the WROVER module?
  • The product page says that in the WROVER module, GPIO16 and GPIO17 are not usable. However, there is a solderable contact marked as GPIO16... Is the silk screen incorrect? (And if not, why add a solderable contact for an unusable pin? I have noticed the other unusable pins are not exposed, except the GPIO0 Ethernet clock pin.)
  • Same question as above for GPIO34 and GPIO39. These are marked as not usable in the WROOM module, so I assume they are also not usable in the WROVER module? (But still have solderable contacts on the board.)
  • Is GPIO3 really a usable pin? I can't see anything in the documentation that says it is not usable, but when I tried to use it as the trigger pin for my HC-SR04 ultrasonic sensor, all I got was Undefined in my logs. I switched it to GPIO33 and it started working as expected. I wonder if it is related to this issue, in which an ESPHome user identified GPIO3 as being always high no matter what on the WT32 module. I also notice that in the ESP32-WROVER-IE datasheet, there is no GPIO3 listed at all. (Though the pin map on that datasheet totally different from the Olimex board, so maybe I am just thoroughly misunderstanding this documentation...) This issue may be due to ESPHome, but it persists whether I choose "esp32dev" or "esp32-poe-iso" as my board choice in the config (see question below).
  • Are there certain GPIO pins that cannot be used as inputs, only outputs? I have read in a few places (general WROVER board info and ESPHome) that 34, 35, 36, and 39 cannot be used as inputs, but I don't see this info repeated anywhere on the product page.



ESPHome Config: In my base config, for now I have chosen "board: esp32dev" for the board type. ESPHome requires me to choose from this list. I'm not totally sure what parameters are set by the board choice but it seems like pinout / available pins is one of them, and ESPHome stops me from making mistakes in my YAML updates if I try to use pins that are not meant to be used; I'd like to choose the correct board type so that this code verification feature works properly.

Questions about this:
  • Is "esp32dev" the correct choice?
  • Should I be using "esp32-poe-iso" instead even though it seems to be based on the WROOM chip?
  • Or would "esp-wrover-kit" or "upesy_wrover" be more accurate because of the different pins used by / available for use in WROVER?

Thank you in advance for your help!

LubOlimex

QuoteIs there a version of this map for the WROVER module?

No.

QuoteThe product page says that in the WROVER module, GPIO16 and GPIO17 are not usable. However, there is a solderable contact marked as GPIO16... Is the silk screen incorrect? (And if not, why add a solderable contact for an unusable pin? I have noticed the other unusable pins are not exposed, except the GPIO0 Ethernet clock pin.)

GPIO16 and GPIO17 are used for the PSRAM inside the WROVER module. These are not usable when using the WROVER version of the board (only when the board is populated with the WROOM module, that has no PSRAM).

We have the same PCB for both WROOM and WROVER version of ESP32-POE-ISO hence why GPIO16 is there, for when we populate the board with WROOM instead of WROVER.

QuoteSame question as above for GPIO34 and GPIO39. These are marked as not usable in the WROOM module, so I assume they are also not usable in the WROVER module? (But still have solderable contacts on the board.)

GPI35 and GPI39 are used for the battery measurement and external power sense features. These shouldn't be used for other purposes without hardware modifications. Refer to the schematic.

All pins we could led out to pads were led out, even if the pin is used for something, the pad can be used for measuring empirically with a tool.

QuoteIs GPIO3 really a usable pin? I can't see anything in the documentation that says it is not usable, but when I tried to use it as the trigger pin for my HC-SR04 ultrasonic sensor, all I got was Undefined in my logs. I switched it to GPIO33 and it started working as expected. I wonder if it is related to this issue, in which an ESPHome user identified GPIO3 as being always high no matter what on the WT32 module. I also notice that in the ESP32-WROVER-IE datasheet, there is no GPIO3 listed at all. (Though the pin map on that datasheet totally different from the Olimex board, so maybe I am just thoroughly misunderstanding this documentation...) This issue may be due to ESPHome, but it persists whether I choose "esp32dev" or "esp32-poe-iso" as my board choice in the config (see question below).

GPIO3 is connected to the USB-serial converter CH340T. If you are in doubt better use the pins at UEXT1 connector (GPIO4, GPI36, GPIO16, GPIO13, GPIO15, GPIO2, GPIO14, GPIO5). These are generally free.

QuoteAre there certain GPIO pins that cannot be used as inputs, only outputs? I have read in a few places (general WROVER board info and ESPHome) that 34, 35, 36, and 39 cannot be used as inputs, but I don't see this info repeated anywhere on the product page.

Yes. We have marked those as GPI on purpose. This is not becuase of the Olimex design this is because of the ESP32 chip specification. You have to look in the ESP32 chip documentation if you wish confirmation. But this is good place (look in the table what it says about pins 34-39):

https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/gpio.html
Technical support and documentation manager at Olimex

LubOlimex

About ESPHome config - if you use the config for ESP32-POE-ISO - the Ethernet won't work since the Ethernet clock pin is different. You would have to modify it manually. Refer to this:

https://esphome.io/components/ethernet.html

There is a note about the WROVER difference even:

ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT (GPIO0_OUT in your case)
  phy_addr: 0
  power_pin: GPIO12

Note WROVER version of Olimex POE cards change CLK to ping GPIO0, configuration must be clk_mode: GPIO0_OUT.

The esphome community is very familiar and experienced with our boards, maybe check in their forums for users that had similar woes.
Technical support and documentation manager at Olimex

ethanjrt

Thank you for the thorough answer and the link to the very helpful ESP32 doc!
Best,
Ethan

Daniel11

1. Pin Availability on the ESP32-POE-ISO-WROVER-EA
The Olimex ESP32-POE-ISO-WROVER-EA is based on the ESP32-WROVER module, which has some key differences from the WROOM module in terms of available pins. The product page does mention some pins as unusable, so let's go over those first.
Unusable Pins
GPIO16 & GPIO17 → Used internally for PSRAM in WROVER modules. They are not available for general use, even though they appear as solderable contacts.
GPIO34 & GPIO39 → These are input-only and cannot be used for outputs.
GPIO0 → Used as the Ethernet clock in the Olimex board. It's exposed but should be avoided unless you're modifying the Ethernet behavior.
GPIO3 (RXD0) → Usually used for UART0 (serial communication). On many ESP32 boards, this pin is reserved and may not function correctly for general I/O.
Pins That Are Input-Only
These GPIOs cannot be used as outputs (only as inputs):
GPIO34
GPIO35
GPIO36 (VP)
GPIO39 (VN)
This is because these pins lack output drivers in the ESP32 hardware.
Why Do Some "Unusable" Pins Have Solder Contacts?
This happens because:
The same PCB is used for both WROOM and WROVER variants, and the WROOM module does allow GPIO16 & 17.
Some of these pins can be read (as inputs), but Olimex likely marks them as "not usable" because of internal conflicts or unexpected behavior.
GPIO3 and Your HC-SR04 Issue
GPIO3 is typically the RX pin for UART0. On many ESP32 boards, UART0 is connected to the USB serial converter, and if the pin is receiving signals from that, it could interfere with its ability to work as a trigger pin.
Since GPIO33 worked for your sensor, it's best to stick with that. GPIO3 may always be high or affected by the UART connection.
2. ESPHome Board Selection
ESPHome requires you to select a board definition that best matches your hardware to automatically handle things like pin configurations.
Best ESPHome Board Choice
"esp32-poe-iso" → This is based on the ESP32-WROOM module, so while it may work, it doesn't fully match the WROVER variant.
"esp32dev" → Works, but is generic and does not enforce board-specific pin restrictions.
"esp-wrover-kit" or "upesy_wrover" → More accurate since they are based on WROVER, but still not specifically for the Olimex board.
Recommended Choice
Since there is no official ESPHome definition for ESP32-POE-ISO-WROVER-EA, the best approach is:
Start with "esp32dev", since it's flexible.
If you run into pin conflicts, try "esp-wrover-kit" to enforce WROVER-specific constraints.
3. Final Takeaways
Avoid GPIO16 & GPIO17 (used for PSRAM).
Avoid GPIO3 for general I/O, especially for sensors.
GPIO34, 35, 36, and 39 are input-only and cannot be used as outputs.
Use "esp32dev" or "esp-wrover-kit" in ESPHome for the best compatibility.
Be careful with GPIO0 as it's linked to Ethernet.
Hope this clears things up.