---
title: "M5Stack Core ESP32 GPIO Pinout Reference"
tags:
  - esp32
  - m5stack
  - gpio
  - pinout
  - hardware
  - play
type: hardware-spec
owner: play
status: active
sources:
  - "https://www.espboards.dev/esp32/m5stack-core-esp32/"
  - "https://docs.m5stack.com/en/mpy/official/machine"
  - "https://github.com/m5stack/m5-docs/issues/175"
growth: seed
---

# M5Stack Core ESP32 GPIO Pinout Reference

## Physical GPIO Ranges

Available pins: **0-19, 21-23, 25-27, 32-39**

These correspond to actual ESP32 GPIO pin numbers. Many boards use their own logical pin numbering (D0, D1, etc.) — this doc maps logical to physical.

## Reserved Pins (Do Not Use for Custom I/O)

| Pin | Reserved For | Notes |
|-----|--------------|-------|
| 0 | Boot / Button | Pulldown at boot — unsafe for output |
| 1 | TX0 | Debug serial |
| 2 | Boot / Button | Pulldown at boot |
| 3 | RX0 | Debug serial |
| 6-11 | Flash SPI | Internal flash memory — do not use |
| 12 | Boot / GPIO | Pulldown at boot — unsafe for output |
| 18, 19, 23 | SPI (LCD + TF Card) | Shared with display and SD card |
| 25 | Speaker | Connected to internal speaker amplifier |
| 21, 22 | I2C (Grove port) | SDA/SCL — available if Grove not used |

## Safe GPIO for Custom Use

| Pin | Safe Use | Notes |
|-----|----------|-------|
| 4 | General I/O | Safe if speaker not used |
| 5 | General I/O | Safe |
| 13 | General I/O | Safe |
| 14 | General I/O | Safe |
| 15 | General I/O | Safe (also MTDO) |
| 16 | General I/O | Safe |
| 17 | General I/O | Safe |
| 26 | Analog input | 12-bit ADC (also digital I/O) |
| 27 | Analog input | 12-bit ADC (also digital I/O) |
| 32-39 | Analog input | 12-bit ADC — best for sensor readings |

## I2C Bus (Grove Port)

- **SDA:** GPIO 21
- **SCL:** GPIO 22

If Grove port is not in use, pins 21/22 are available as general GPIO.

## SPI Bus

Default SPI (for LCD + SD card): GPIO 18 (CLK), 19 (MISO), 23 (MOSI). These are shared — using them for other devices may conflict with display.

Second SPI available on other pins if needed.

## Communication Protocols

- **UART:** TX on GPIO 1, RX on GPIO 3. Can remap to other pins.
- **I2C:** Default on 21/22. Can remap with `machine.SoftI2C`
- **SPI:** Default on 18/19/23. Can remap with `machine.SPI`

## Analog (ADC)

ESP32 has two ADC units:
- **ADC1:** pins 32-39 (best for sensors)
- **ADC2:** pins 0, 2, 4, 12-15 (conflicts with WiFi)

12-bit resolution (0-4095). Max input: 3.3V.

## For Chris's Projects

Based on typical M5Stack setups:
- **Grove connectors** use I2C (21/22) — leave available if using Grove sensors
- **Display conflict** means 18/19/23 are unavailable in most setups
- **Speaker on 25** — disable speaker if you need that pin
- **Analog sensors** (temperature, pressure, gas) work well on 32-39

## Common Pinouts for Chris's Projects

| Project | Pins Used | Notes |
|---------|-----------|-------|
| TILT replacement (I2C sensor) | 21 (SDA), 22 (SCL), 3.3V, GND | Uses Grove I2C |
| OLED display (I2C) | 21 (SDA), 22 (SCL) | 0.96" SSD1306 typical |
| Stepper motor (ULN2003) | Any safe GPIO x 4 | 4 control pins |
| Servo | GPIO 4 or 5 | 50Hz PWM |
| DS18B20 temp sensor | Any GPIO (1-wire) | Single wire + pullup |

---
*Research from web search — ESP32 GPIO mapping for M5Stack Core*
*Queue: research complete — moved to wiki*