Metro ESP-32
by iArduino
Metro-style ESP32 board with familiar layout - great for Arduino IDE users moving to dual-core IoT.

On this page
Metro ESP-32 Pinout
9 pins| Pin | GPIO | Labels | Status | Capabilities | Notes |
|---|---|---|---|---|---|
| 1 | 0 | KEY_BUILTIN | strapping | - | |
| 2 | 2 | LED_BUILTINPWM | strapping | - | |
| 3 | 5 | SSPWM | strapping | spi | |
| 4 | 12 | ADRPWM | strapping | - | |
| 5 | 18 | SCKPWM | safe | spi | |
| 6 | 19 | MISOPWM | safe | spi | |
| 7 | 21 | SDAPWM | safe | i2c | |
| 8 | 22 | SCLPWM | safe | i2c | |
| 9 | 23 | MOSIPWM | safe | spi |
Start with these
5 pins with no boot or system involvementFreely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.
Fine - with a little care
4 pins · 4 things to knowKEY_BUILTINGPIO0 Bootstrapping pin (enter bootloader when low); internal pull-up. Strapping
Must be HIGH during boot for normal startup; if held LOW on reset, forces flash programming mode.
LED_BUILTINGPIO2 Bootstrapping pin (must be low or floating at reset); internal pull-down. Strapping
If driven HIGH on reset (while IO0 is LOW), selects an unsupported SDIO boot mode, causing boot failure.
SSGPIO5 Bootstrapping pin; internal pull-up; VSPI CS0 (default SPI chip-select); acts as FSPIWP (flash write-protect) on internal-flash variants. Strapping
Must be HIGH during boot; if pulled LOW at reset, alters SDIO slave timing and may prevent normal boot.
ADRGPIO12 Bootstrapping pin; JTAG TDI; sets flash voltage (VDD_SDIO); also HSPIQ (flash data line). Strapping
Keep LOW during boot (internal PD); pulling HIGH at reset selects 1.8V flash mode, causing flash brownout if 3.3V flash is used.
The Metro ESP-32 pinout brings out 9 GPIO pins - every one of them usable in your project.
For peripherals, I²C is mapped to SDA on GPIO21 and SCL on GPIO22, while the SPI bus (MOSI, MISO, SCK, SS) is broken out in full.
If you want zero surprises, SCK, MISO, SDA, SCL and 1 more are free of any such role - the safest first picks. 4 of the exposed pins carry boot-time or system duties on the ESP32 (KEY_BUILTIN, LED_BUILTIN, SS and 1 more).
Getting started
flash your first firmware in ~2 minutesBoard: ESP32 Dev Module Flash Size: 4MB (32Mb) Flash Mode: DIO Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) Upload Speed: 921600
// toggle GPIO18 - wire an LED and resistor to it
void setup() {
pinMode(18, OUTPUT);
}
void loop() {
digitalWrite(18, HIGH); delay(500);
digitalWrite(18, LOW); delay(500);
}[env:metro_esp-32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600esp32dev - or type it after board =.esp32:
board: esp32dev
variant: esp32
framework:
type: esp-idf
# blink - GPIO18
output:
- platform: gpio
pin: 18
id: led_out
light:
- platform: binary
name: "LED"
output: led_outesp32dev (same ids as PlatformIO).esptool.py --chip esp32 --port /dev/ttyACM0 \
--baud 921600 write_flash 0x1000 firmware.bin--port = your /dev/tty* (macOS/Linux) or COMx (Windows).Specifications
ESP32 · vs other ESP32 chips →About this board
At its core is the ESP32 - a dual-core Xtensa with both Bluetooth Classic and BLE.
Only 9 GPIO are broken out, where most ESP32 boards manage about 24 - worth checking the pinout covers what you need.
Resources
Similar boards



