Add ESP32 pinout reference
Which pins are in use, which are free, which are strapping or flash pins, and the per-pin current limits.
This commit is contained in:
1 parent
e1c5d00972
commit
602028ed01
1 file changed
+75
@@ -0,0 +1,75 @@
|
|||||||
|
# ESP32 pinout reference
|
||||||
|
|
||||||
|
For the original **ESP32-WROOM-32 / WROVER** devkit, which is what both boards
|
||||||
|
in this project are. S3, C3, C6 and H2 have different maps entirely — and no
|
||||||
|
Bluetooth Classic, so they cannot run board A at all.
|
||||||
|
|
||||||
|
## Already in use
|
||||||
|
|
||||||
|
| Pin | Board | Used for |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| GPIO2 | A and B | onboard status LED |
|
||||||
|
| GPIO16 | A and B | UART2 RX (link) |
|
||||||
|
| GPIO17 | A and B | UART2 TX (link) |
|
||||||
|
| GPIO25 | B | LED circuit 1 (Circle) |
|
||||||
|
| GPIO26 | B | LED circuit 2 (Triangle) |
|
||||||
|
|
||||||
|
## Free and safe for output
|
||||||
|
|
||||||
|
Use these first. No strapping duties, no boot-time side effects.
|
||||||
|
|
||||||
|
```
|
||||||
|
4 13 14 18 19 21 22 23 27 32 33
|
||||||
|
```
|
||||||
|
|
||||||
|
That is eleven spare pins, which is plenty for more LEDs, a buzzer, servos or
|
||||||
|
switches. GPIO21 and GPIO22 are the default I2C pins and GPIO18/19/23 the
|
||||||
|
default SPI pins, but nothing in this project uses either bus, so they are free
|
||||||
|
here.
|
||||||
|
|
||||||
|
## Never use
|
||||||
|
|
||||||
|
| Pin | Why |
|
||||||
|
| --- | --- |
|
||||||
|
| GPIO6–11 | wired to the on-board SPI flash chip. Touching these bricks the running firmware. |
|
||||||
|
| GPIO12 | strapping pin (MTDI). Pulled high at boot it sets the flash voltage to 1.8V and the board will not boot. |
|
||||||
|
| GPIO1, GPIO3 | UART0, the USB serial console. Using them breaks uploads and the serial monitor. |
|
||||||
|
|
||||||
|
## Usable, with a catch
|
||||||
|
|
||||||
|
| Pin | Catch |
|
||||||
|
| --- | --- |
|
||||||
|
| GPIO0 | strapping. Must be high at boot or the board enters flash-download mode. Has a button on most devkits. |
|
||||||
|
| GPIO2 | strapping, and the onboard LED. Must be low or floating at boot. Fine as an output once running — this project uses it. |
|
||||||
|
| GPIO5 | strapping. Outputs a PWM burst during boot, so anything attached will twitch at power-on. |
|
||||||
|
| GPIO15 | strapping. Emits boot log noise unless pulled low. |
|
||||||
|
|
||||||
|
## Input only — cannot drive an LED
|
||||||
|
|
||||||
|
```
|
||||||
|
34 35 36 39
|
||||||
|
```
|
||||||
|
|
||||||
|
These have no output drivers and no internal pull-ups. Fine for buttons with an
|
||||||
|
external pull-up, or for analog input. Connect an LED and nothing happens.
|
||||||
|
|
||||||
|
## Current limits
|
||||||
|
|
||||||
|
A single pin is comfortable at about **12mA** and hard-limited near **40mA**.
|
||||||
|
The whole chip should stay under roughly 200mA across all pins at once.
|
||||||
|
|
||||||
|
Two or three small LEDs per pin is fine. Anything beyond about 20mA per circuit
|
||||||
|
— which pre-wired "3V" LEDs sized for a coin cell often draw — wants a small
|
||||||
|
NPN transistor or a logic-level MOSFET, with the pin driving the base or gate
|
||||||
|
rather than the LED directly.
|
||||||
|
|
||||||
|
## ADC note
|
||||||
|
|
||||||
|
ADC2 pins (0, 2, 4, 12–15, 25–27) cannot be read with `analogRead()` while
|
||||||
|
WiFi is active. Irrelevant to this project, which uses no WiFi and no analog
|
||||||
|
input, but worth knowing before adding a potentiometer. ADC1 pins (32–39) work
|
||||||
|
regardless.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Created by: Jess Rogerson (yelling commands at Claude.AI)
|
||||||
Reference in new issue
Block a user