Files
openclaw-wiki/sources/play/esp32-gpio-mapping.md
MrC 87c0272687 Add 3 Canjector variant images (Middle, Minor, Endz renders)
Research complete from 2026-05-04 session:
- M5Stack ESP32 GPIO pinout reference (PLAY)
- Gear ratio selection guide for FRC mechanisms (2890)
- MegaTag vision localization concept (2890/PhotonVision)
2026-05-04 20:29:19 +00:00

103 lines
3.2 KiB
Markdown

---
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"
---
# 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*