Espressif ESP32-H2-DevKitM-1
by Espressif
Official ESP32-H2 dev board with 802.15.4 and BLE - perfect for Zigbee, Thread, and secure IoT development.

On this page
Pinout
30 pins · 2.54 mm pitch| Pin | GPIO | Labels | Status | Capabilities | Notes |
|---|---|---|---|---|---|
| 1 | - | 3V33.3V | power | - | 3.3V regulated output |
| 2 | - | RSTEN | control | - | Chip reset (active low) |
| 3 | 0 | IO0 | strapping | pwm | Fast SPI FSPIQ |
| 4 | 1 | IO1A1 | strapping | adc · pwm | ADC1_CH0; FSPICS0 |
| 5 | 2 | IO2A2 | strapping | adc · pwm | ADC1_CH1; JTAG MTMS; FSPIWP |
| 6 | 3 | IO3A3 | strapping | adc · pwm | ADC1_CH2; JTAG MTDO; FSPIHD |
| 7 | 13 | IO13 | safe | pwm | 32.768 kHz crystal XTAL_32K_P |
| 8 | 14 | IO14 | safe | pwm | 32.768 kHz crystal XTAL_32K_N |
| 9 | 4 | IO4A4 | strapping | adc · pwm | ADC1_CH3; JTAG MTCK; FSPICLK |
| 10 | 5 | IO5A5 | strapping | adc · pwm | ADC1_CH4; JTAG MTDI; FSPID |
| 11 | - | NC | - | Not connected | |
| 12 | - | VBAT3V3 | power | - | Battery / RTC 3.3V input |
| 13 | - | GND | ground | - | Ground |
| 14 | - | 5V | power | - | 5V input (from USB) / output |
| 15 | - | GND | ground | - | Ground |
| 16 | - | GND | ground | - | Ground |
| 17 | 24 | IO24TX | uart | uart · pwm | UART0 TX; FSPICS2 |
| 18 | 23 | IO23RX | uart | uart · pwm | UART0 RX; FSPICS1 |
| 19 | 10 | IO10 | safe | pwm | Zero-crossing detector ZCD0 |
| 20 | 11 | IO11 | safe | pwm | Zero-crossing detector ZCD1 |
| 21 | 25 | IO25 | strapping | pwm | Fast SPI FSPICS3 |
| 22 | 12 | IO12 | safe | pwm | General-purpose GPIO |
| 23 | 8 | IO8 | strapping | pwm | Onboard RGB LED; ROM boot log (LOG) |
| 24 | 22 | IO22 | safe | pwm | General-purpose GPIO |
| 25 | - | GND | ground | - | Ground |
| 26 | 9 | IO9 | strapping | pwm | BOOT button |
| 27 | - | GND | ground | - | Ground |
| 28 | 27 | IO27 | uart | pwm | USB D+ (native USB Serial/JTAG); FSPICS5 |
| 29 | 26 | IO26 | uart | pwm | USB D- (native USB Serial/JTAG); FSPICS4 |
| 30 | - | GND | ground | - | Ground |
Start with these
6 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
sampled at boot or shared with debug/serial| Pin | Label | What to know | Role |
|---|---|---|---|
| IO0 | GPIO0 (FSPIQ) | IO MUX pin of the general-purpose SPI2 (FSPI) bus. The H2 runs its in-package flash on GPIO15-20, which the QFN32 package does not route out, so this pin is free unless your board wires an SPI peripheral to FSPI. | Other |
| IO1 | GPIO1 (FSPICS0) | IO MUX pin of the general-purpose SPI2 (FSPI) bus. The H2 runs its in-package flash on GPIO15-20, which the QFN32 package does not route out, so this pin is free unless your board wires an SPI peripheral to FSPI. | Other |
| IO2 | MTMS | Default JTAG TMS line - using it as GPIO disables external JTAG debugging. It is not a flash pin: the H2 keeps its in-package flash on GPIO15-20, which the QFN32 package does not route out. | JTAG |
| IO3 | MTDO | Default JTAG TDO line - using it as GPIO disables external JTAG debugging. It is not a flash pin: the H2 keeps its in-package flash on GPIO15-20, which the QFN32 package does not route out. | JTAG |
| IO4 | MTCK | Default JTAG TCK line - using it as GPIO disables external JTAG debugging. It is not a flash pin: the H2 keeps its in-package flash on GPIO15-20, which the QFN32 package does not route out. | JTAG |
| IO5 | MTDI | Default JTAG TDI line - using it as GPIO disables external JTAG debugging. It is not a flash pin: the H2 keeps its in-package flash on GPIO15-20, which the QFN32 package does not route out. | JTAG |
| IO24 | U0TXD | Often used for boot log output and serial debugging; repurposing it can disable serial output of boot messages and interfere with console debugging. | UART |
| IO23 | U0RXD | Often used for the serial console and bootloader input; repurposing it may conflict with UART communication for programming or debugging. | UART |
| IO25 | GPIO25 | Used during boot to determine the JTAG interface source; this pin has no internal pull-up/down, so it must not be left floating (an external resistor drives it high/low to avoid unintended JTAG mode selection). | Strapping |
| IO8 | GPIO8 | Must be held at the proper logic level on reset to select the correct boot mode and enable/disable bootloader log output. | Strapping |
| IO9 | GPIO9 | Must be pulled high on reset for normal SPI flash boot (pulling it low while GPIO8 is high forces the chip into download/programming mode). | Strapping |
Only if you know the tricks
wired to flash or USB - expect a fight| Pin | Label | What to know | Role |
|---|---|---|---|
| IO27 | USB_D+ | By default, this pin is connected to the internal USB Serial/JTAG controller; using it as a general-purpose IO would disable the USB functionality used for debugging/programming. | USB |
| IO26 | USB_D- | By default, this pin is connected to the chip's internal USB Serial/JTAG peripheral; using it as a general-purpose IO requires disabling or reconfiguring that USB interface. | USB |
Pinout notes Across 30 pins (2.54 mm pitch), the Espressif ESP32-H2-DevKitM-1 exposes 19 GPIO plus 3V3, VBAT, GND and 5V for power. Peripheral wiring is straightforward:…
Across 30 pins (2.54 mm pitch), the Espressif ESP32-H2-DevKitM-1 exposes 19 GPIO plus 3V3, VBAT, GND and 5V for power.
Peripheral wiring is straightforward: TX/RX on GPIO24 and GPIO23 cover serial logging and flashing.
Beyond plain digital I/O you get 5 ADC-capable pins for sensors and battery monitoring and PWM on every GPIO.
11 of the exposed pins carry boot-time or system duties on the ESP32-H2 (IO0, IO1, IO2 and 8 more) - check the guidance above before wiring anything to them. IO13, IO14, IO10, IO11 and 2 more are free of any such role - the safest first picks.
Getting started
flash your first firmware in ~2 minutesBoard: ESP32H2 Dev Module USB CDC On Boot: Enabled Flash Size: 4MB (32Mb) Flash Mode: DIO Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) Upload Speed: 921600
// toggle GPIO13 - wire an LED and resistor to it
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
}[env:esp32-h2-devkitm-1]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip
board = esp32-h2-devkitm-1
framework = arduino
monitor_speed = 115200
upload_speed = 921600esp32-h2-devkitm-1 - or type it after board =.esp32:
board: esp32-h2-devkitm-1
variant: esp32h2
framework:
type: esp-idf
# blink - GPIO13
output:
- platform: gpio
pin: 13
id: led_out
light:
- platform: binary
name: "LED"
output: led_outesp32-h2-devkitm-1 (same ids as PlatformIO).esptool.py --chip esp32h2 --port /dev/ttyACM0 \
--baud 921600 write_flash 0x0 firmware.bin--port = your /dev/tty* (macOS/Linux) or COMx (Windows).Specifications
ESP32-H2 · 48.26 × 25.4 mm · vs other ESP32 chips →About this board
Inside sits the ESP32-H2 - a Thread/Zigbee-focused RISC-V with no Wi-Fi at all.
Around the module: an addressable RGB LED (GPIO8) and Boot/Reset buttons.
- 802.15.4 radio for Thread, Zigbee and Matter plus Bluetooth 5 (LE); no Wi-Fi
- No PSRAM
Where to buy
prices are typical street prices


