M5Stack Tab5

Tablet-style ESP32-P4 terminal - 5" 720p touch display, 2MP camera, RS-485 and a swappable camcorder battery. Wi-Fi 6 comes from an onboard ESP32-C6.

Popular USB-C + USB-A Native USB
M5Stack Tab5 board
128 × 80 mm
ESP32-P4
RISC-V MCU
400MHz
clock
16MB
flash
768KB
SRAM
53· Two 12-bit, 14 Channels ADC
GPIO
Wi-Fi
radio
On this page

Pinout

53 pins
View:
M5Stack Tab5 pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
10G0EXT_PORT1safe-
21G1EXT_PORT1safe-
32G2M5_BUSsafe-
43G3M5_BUSsafe-
54G4M5_BUSsafe-
65G5SCKsafespi
76G6PC_TXuartuart
87G7PC_RXuartuart
98G8C6_SDIO2_D3safe-Reserved - SDIO2 data to the ESP32-C6 radio (ESP-Hosted link), not usable as GPIO
109G9C6_SDIO2_D2safe-Reserved - SDIO2 data to the ESP32-C6 radio, not usable as GPIO
1110G10C6_SDIO2_D1safe-Reserved - SDIO2 data to the ESP32-C6 radio, not usable as GPIO
1211G11C6_SDIO2_D0safe-Reserved - SDIO2 data to the ESP32-C6 radio, not usable as GPIO
1312G12C6_SDIO2_CKsafe-Reserved - SDIO2 clock to the ESP32-C6 radio, not usable as GPIO
1413G13C6_SDIO2_CMDsafe-Reserved - SDIO2 command to the ESP32-C6 radio, not usable as GPIO
1514G14C6_IO2safe-Reserved - wired to ESP32-C6 IO2, part of the radio link
1615G15C6_RESETsafe-Reserved - ESP32-C6 reset line, driven by the P4
1716G16M5_BUSsafe-
1817G17M5_BUSsafe-
1918G18MOSIsafespi
2019G19MISOsafespi
2120G20RS485_TXuartuartWired to the SIT3088 RS-485 transceiver (driver input)
2221G21RS485_RXuartuartWired to the SIT3088 RS-485 transceiver (receiver output)
2322G22LCD_BLsafe-Internal - LCD backlight enable
2423G23TP_INTsafe-Internal - touch controller interrupt
2526G26I2S_DSDINsafe-Internal I2S data out to the ES8388 codec (speaker/headphones)
2627G27I2S_SCLKsafe-Internal I2S bit clock (ES8388 + ES7210)
2728G28I2S_ASDOUTsafe-Internal I2S data in from the ES7210 mic front-end
2829G29I2S_LRCKsafe-Internal I2S word clock (ES8388 + ES7210)
2930G30I2S_MCLKsafe-Internal I2S master clock (ES8388 + ES7210)
3031G31SDAsafei2cInternal I2C SDA (touch, IMU, RTC, INA226, IO expanders) - shared out on M5-Bus and STAMP; add devices, don't repurpose
3132G32SCLsafei2cInternal I2C SCL - same shared bus as G31
3233G33STAMPsafe-
3334G34RS485_DIRstrapping-RS-485 driver-enable for the SIT3088
3435G35M5_BUSBOOTstrapping-BOOT signal (also M5-Bus pin 24) - hold at boot for download mode
3536G36CAM_MCLKstrapping-Internal - camera master clock (MIPI-CSI)
3637G37TXD0strappinguart
3738G38RXD0strappinguart
3839G39SD_DAT0SD_MISOsafespimicroSD slot - DAT0 in SDIO mode, MISO in SPI mode
3940G40SD_DAT1safe-microSD slot - DAT1 (SDIO mode only)
4041G41SD_DAT2safe-microSD slot - DAT2 (SDIO mode only)
4142G42SD_DAT3SD_CSsafespimicroSD slot - DAT3 / chip select
4243G43SD_CLKSD_SCKsafespimicroSD slot - clock
4344G44SD_CMDSD_MOSIsafespimicroSD slot - command / MOSI
4445G45M5_BUSsafe-
4546G46STAMPsafe-
4647G47M5_BUSsafe-
4748G48M5_BUSsafe-
4849G49EXT_PORT1safe-
4950G50EXT_PORT1safe-
5051G51M5_BUSsafe-
5152G52PB_OUTsafe-
5253G53PORT_Asafe-
5354G54PORT_Asafe-

Start with these

48 pins with no boot or system involvement
G0EXT_PORT1G1EXT_PORT1G2M5_BUSG3M5_BUSG4M5_BUSG5SCKG6PC_TXG7PC_RXG8C6_SDIO2_D3G9C6_SDIO2_D2G10C6_SDIO2_D1G11C6_SDIO2_D0G12C6_SDIO2_CKG13C6_SDIO2_CMDG14C6_IO2G15C6_RESETG16M5_BUSG17M5_BUSG18MOSIG19MISOG20RS485_TXG21RS485_RXG22LCD_BLG23TP_INTG26I2S_DSDING27I2S_SCLKG28I2S_ASDOUTG29I2S_LRCKG30I2S_MCLKG31SDAG32SCLG33STAMPG39SD_DAT0G40SD_DAT1G41SD_DAT2G42SD_DAT3G43SD_CLKG44SD_CMDG45M5_BUSG46STAMPG47M5_BUSG48M5_BUSG49EXT_PORT1G50EXT_PORT1G51M5_BUSG52PB_OUTG53PORT_AG54PORT_A

Freely 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
PinLabelWhat to knowRole
G34GPIO34Sampled at reset to choose the JTAG source; driving it at boot can redirect or disable JTAG debugging. Free to use as a regular GPIO after reset.Strapping
G35GPIO35Must stay HIGH at reset for normal boot; pulling it LOW forces download/programming mode. Freed for GPIO use after reset.Strapping
G36GPIO36Sampled at reset for boot mode and log output; driving it at boot can change the boot mode or silence/enable ROM logs. Free after reset.Strapping
G37GPIO37Sampled at reset as a boot-mode strap; avoid holding it at a fixed level during boot unless intentionally configuring boot mode. Free after reset.Strapping
G38GPIO38Sampled at reset as a boot-mode strap; avoid holding it at a fixed level during boot unless intentionally configuring boot mode. Free after reset.Strapping
These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.
Pinout notes All 53 pins on the M5Stack Tab5 are usable GPIO. Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO31 and SCL on GPIO32, while the SPI bus (…

All 53 pins on the M5Stack Tab5 are usable GPIO.

Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO31 and SCL on GPIO32, while the SPI bus (MOSI, MISO, SCK) is broken out in full.

5 of the exposed pins carry boot-time or system duties on the ESP32-P4 (G34, G35, G36 and 2 more) - check the guidance above before wiring anything to them. G0, G1, G2, G3 and 44 more are free of any such role - the safest first picks.


The M5Stack Tab5 exposes its GPIO through the 30-pin M5-Bus connector (GPIO, SPI on G5/G18/G19, UART0 on G37/G38, the internal I2C bus, and 6-24V HVIN/5V/3V3 rails), a screw-terminal ExtPort1 breaking out G0/G1/G49/G50 alongside HVIN/5V/3V3, and one Grove (HY2.0-4P) port on G53/G54. Reserved STAMP pads (with G6, G33, G46 and the SPI/I2C buses) accept Cat-M, NB-IoT or LoRaWAN modules.

Everything internal shares one I2C bus (G31 SDA / G32 SCL): touch controller, BMI270 IMU, RX8130CE RTC, INA226 power monitor, camera control and two PI4IOE5V6408 IO expanders (0x43/0x44) that gate most power rails and resets. The microSD slot sits on G39-G44 (SPI or SDIO mode), and the ESP32-C6 radio occupies G8-G15 as a dedicated SDIO link - those pins are not available for your own use.

The RS-485 transceiver uses G20 (TX), G21 (RX) and G34 (driver enable). Like other M5Stack cores, display reset, touch reset and several power switches live behind the IO expanders rather than direct GPIOs - drivers must initialize those first.

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Native USB - shows up as a port right away, no driver needed. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
The onboard LED on GPIO0 blinks - swap the pin if your board's LED differs.
Set these in Tools · leave everything else at default
Arduino IDE 2.x — Tools Copy
Board: "ESP32P4 Dev Module"
USB CDC On Boot: "Enabled"
Flash Size: "16MB (128Mb)"
PSRAM: "QSPI PSRAM"
Partition Scheme: "16M Flash (3MB APP / 9.9MB FATFS)" (default)
Upload Speed: "921600"
▸ every other Tools option — leave at default
Board: ESP32P4 Dev Module
USB CDC On Boot: Enabled
Flash Size: 16MB (128Mb)
PSRAM: QSPI PSRAM
Partition Scheme: 16M Flash (3MB APP / 9.9MB FATFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32P4 Dev Module
blink.ino Copy
// blink the onboard LED
void setup() {
  pinMode(0, OUTPUT);
}
void loop() {
  digitalWrite(0, HIGH); delay(500);
  digitalWrite(0, LOW);  delay(500);
}
board to selectesp32dev⧉ copy
platformio.ini Copy
[env:m5stack-tab5]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.arduino.memory_type = qio_qspi
build_flags = -DBOARD_HAS_PSRAM
Find it: PlatformIO Home ▸ Boards, search esp32dev — or type it after board =.
board to selectesp32dev⧉ copy
device.yaml Copy
esp32:
  board: esp32dev
  variant: 
  framework:
    type: esp-idf
psram:
  mode: quad
  speed: 80MHz

# blink - GPIO0
output:
  - platform: gpio
    pin: 0
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32dev (same ids as PlatformIO).
esptool doesn't pick board settings — a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32p4 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x0 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).

Good to know

board-specific quirks worth 60 seconds
The P4 has no radio - Wi-Fi rides on an ESP32-C6 illustration
The P4 has no radio - Wi-Fi rides on an ESP32-C6
Wireless comes from an ESP32-C6-MINI-1U wired to the P4 over a dedicated SDIO link ( G8 - G15 ) running ESP-Hosted firmware. In ESP-IDF, Arduino and ESPHome this is largely transparent - you configure Wi-Fi as usual - but features are gated by the hosted stack, not the C6's silicon: Bluetooth, Thread and Zigbee are effectively unavailable even though the module supports them. If Wi-Fi breaks after a framework…

Wireless comes from an ESP32-C6-MINI-1U wired to the P4 over a dedicated SDIO link (G8-G15) running ESP-Hosted firmware. In ESP-IDF, Arduino and ESPHome this is largely transparent - you configure Wi-Fi as usual - but features are gated by the hosted stack, not the C6's silicon: Bluetooth, Thread and Zigbee are effectively unavailable even though the module supports them.

If Wi-Fi breaks after a framework update, check that the C6's ESP-Hosted firmware version matches what your P4-side stack expects - the two are updated separately.

Two display revisions, and only one is fully supported illustration
Two display revisions, and only one is fully supported
Early Tab5 units pair an ILI9881C display driver with a GT911 touch controller; newer revisions moved to ST7123/ST7121 chips that integrate display and touch. M5Stack's own firmware handles both, but third-party support lags - ESPHome currently supports only the ILI9881C/GT911 combination, and there's no external marking to tell revisions apart before flashing. If a known-good ESPHome or LVGL config gives…

Early Tab5 units pair an ILI9881C display driver with a GT911 touch controller; newer revisions moved to ST7123/ST7121 chips that integrate display and touch. M5Stack's own firmware handles both, but third-party support lags - ESPHome currently supports only the ILI9881C/GT911 combination, and there's no external marking to tell revisions apart before flashing.

If a known-good ESPHome or LVGL config gives you a black screen or dead touch on a brand-new unit, suspect the display revision before debugging your YAML.

A 7.4V camcorder battery, not the usual LiPo pouch illustration
A 7.4V camcorder battery, not the usual LiPo pouch
The Tab5 takes a removable two-cell NP-F550 pack (7.4V / 2000mAh) - a decades-old camcorder standard, so high-capacity third-party packs are everywhere and swaps take seconds. An IP2326 handles 2-cell charging over USB-C and an INA226 (I2C 0x41) measures real voltage and current, so firmware can report an honest battery percentage. For permanent installs, skip the battery entirely - the RS-485 terminal accepts…

The Tab5 takes a removable two-cell NP-F550 pack (7.4V / 2000mAh) - a decades-old camcorder standard, so high-capacity third-party packs are everywhere and swaps take seconds. An IP2326 handles 2-cell charging over USB-C and an INA226 (I2C 0x41) measures real voltage and current, so firmware can report an honest battery percentage.

For permanent installs, skip the battery entirely - the RS-485 terminal accepts 6-24V DC, which suits wall-panel and DIN-cabinet wiring better than USB.

Specifications

ESP32-P4 · 128 × 80 mm
Compute
MCU
ESP32-P4 · RISC-V
Clock
400 MHz
SRAM · Flash
768 KB · 16MB · 32MB PSRAM
Radio
Wi-Fi
-
Bluetooth
-
Antenna
3D + MMCX
I/O
GPIO · ADC
53 · Two 12-bit, 14 Channels
UART · I²C · SPI
5 · 2 · 4
PWM
8 channels
Power
USB
USB-C (native) · USB-A (native)
Serial
Native (CDC)
Boot address
0x2000
Display
Screen
IPS LCD · 5.0" · 1280x720
Driver
ILI9881C / ST7123
Touch
GT911 / ST7123
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
- · -
Sketch · Data
- · -
80 mm128 mm
128 × 80 mm
The M5Stack Tab5 uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates.

About this board

Around the module: 32MB PSRAM, an IPS LCD 5.0" 1280x720 display with touch, an SC2356 camera (2MP), a microSD slot, a microphone (Dual mic array), a speaker, an audio codec (ES8388 + ES7210 AEC), an amplifier (NS4150B), a BMI270 IMU, an RX8130CE RTC, a battery fuel gauge (INA226), an RS485 interface (SIT3088) and battery charging (IP2326) via NP-F550 bay.

It flashes over native USB - no serial-converter driver needed.


Honest admission: the M5Stack Tab5 is the first ESP32 device I've handled where I keep forgetting there's an ESP32 inside. You pick it up and it's just... a small tablet. Glass front, 5" 720p touchscreen, a power button, a camcorder battery clipped on the back. Then you flash it over USB-C like any other dev board and remember there's no Linux under there - the whole thing runs bare on a microcontroller.


That microcontroller is the ESP32-P4 - dual-core RISC-V at 360 MHz, 16 MB flash, 32 MB PSRAM in the package - driving the display over MIPI-DSI. One thing to internalize before buying: the P4 has no radio at all. Wi-Fi 6 comes from an onboard ESP32-C6 module wired over SDIO, running Espressif's ESP-Hosted firmware. Day to day you don't notice, but wireless features arrive at the pace of that hosted stack, not the C6's spec sheet - which is why there's no practical Bluetooth here.


The rest of the hardware list is long the way M5Stack likes it: 2MP camera, dual mics with echo cancellation, a speaker and a headphone jack, IMU, RTC, microSD, USB-A host, and - the tell that this is aimed at industrial panels, not hobby desks - an RS-485 port that doubles as a 6-24V power input. The removable NP-F550 pack is a genuinely good call: it's a decades-old camcorder standard, spares are cheap everywhere, and swapping takes two seconds. M5Stack claims about 6 hours per charge, and with a 14.8 Wh pack driving a 5" backlight, that math checks out.


The honest caveat is software maturity. This is a first-wave ESP32-P4 product: ESP-IDF is the serious path, Arduino support for the P4 is younger than for the S3, and ESPHome - which otherwise covers this board impressively well - currently only supports the earlier display revision. If you want a wall panel, a voice terminal or an RS-485 HMI, there's nothing else in the ESP32 world quite like it. If you want a general-purpose dev board, an S3 is still the more sensible, better-supported choice.

  • 5" 1280x720 IPS touchscreen on MIPI-DSI (ILI9881C + GT911 touch on early units, ST7123/ST7121 integrated display-touch on newer revisions)
  • 2MP SC2356 camera on MIPI-CSI, backed by the P4's ISP and H.264 encoder
  • Wi-Fi 6 (2.4 GHz) via onboard ESP32-C6-MINI-1U over SDIO, with built-in 3D antenna and external MMCX connector
  • ES8388 codec + ES7210 echo-cancelling dual-mic front-end, 1W speaker (NS4150B) and 3.5mm headphone jack
  • Removable NP-F550 battery (7.4V / 2000mAh, ~6h) with IP2326 charger and INA226 power monitor
  • Industrial RS-485 port (SIT3088, switchable 120Ω terminator) that doubles as a 6-24V power input
  • BMI270 6-axis IMU and RX8130CE RTC, both with interrupt wake-up
  • USB-A host port plus USB-C (USB 2.0 OTG) and microSD slot
  • M5-Bus, Grove port, GPIO_EXT header and STAMP pads for Cat-M / NB-IoT / LoRaWAN modules
  • 1/4"-20 tripod mount nut; Reset, Boot and Power buttons

FAQ

7 common questions
Does the M5Stack Tab5 work with ESPHome?
Yes, and the coverage is broad - display, GT911 touch, speaker, microphones, camera, RTC, INA226 battery monitoring and Wi-Fi through the ESP32-C6 all work, which makes it a popular voice-assistant and control-panel target. The catch is the display revision - units with the newer ST7123 or ST7121 display drivers are not yet supported, and there is no external marking that tells you which revision a unit has before you flash it.
Does the M5Stack Tab5 have Bluetooth?
Not practically. The ESP32-P4 has no radio, and while the onboard ESP32-C6 silicon supports BLE 5, the ESP-Hosted link between the two chips has focused on Wi-Fi - Bluetooth is not exposed in the mainstream Tab5 frameworks. Treat the Tab5 as a Wi-Fi device and check current ESP-Hosted status if BLE is a hard requirement.
What about the Thread and Zigbee support on the spec sheet?
That line describes what the ESP32-C6 module's silicon can do, not what the product ships with. The C6 runs ESP-Hosted firmware serving Wi-Fi to the P4; Thread and Zigbee are not usable on the Tab5 without replacing that firmware yourself, so don't buy it as a Zigbee coordinator.
How do I program the M5Stack Tab5?
Over USB-C using the ESP32-P4's native USB - no serial chip involved. Supported paths are UIFlow2, ESP-IDF (5.4 or newer), Arduino via the M5Stack board package, PlatformIO (pioarduino fork) and ESPHome. Hold the Boot button while pressing Reset to force download mode if a flash goes wrong.
What battery does the Tab5 use and how long does it last?
A standard removable NP-F550 camcorder battery (7.4V, 2000mAh, 14.8Wh) - the same pack used by camera gear, so spares are cheap and swappable. M5Stack quotes about 6 hours at 50% brightness with Wi-Fi on. It charges in-device via USB-C, and the Tab5 also runs fine with no battery installed, powered from USB-C or the 6-24V RS-485 terminal.
Is the Tab5 camera any good?
It's a 2MP SC2356 (1600x1200) on MIPI-CSI. Combined with the P4's ISP and H.264 encoder it is fine for video preview, presence detection, QR codes and edge-vision experiments - noticeably better than the 0.3MP sensors on earlier M5Stack cores - but it is not a photography camera.
How does the Tab5 compare to the M5Stack CoreS3?
Different class of device. The CoreS3 is a pocketable 2" cube built on the ESP32-S3 with a mature ecosystem; the Tab5 is a 5" tablet-style terminal with far more compute, RAM and screen, plus RS-485 and a swappable battery, but a younger software stack and no Bluetooth. Pick the CoreS3 for compact gadgets, the Tab5 for wall-mounted panels, HMI and voice/camera terminals.

Where to buy

prices are typical street prices
M5Stack Tab5
M5Stack Tab5
$60.00per unit, typical

Resources

Similar boards