Onboard Hardware

5×5 RGB Matrix

25 addressable RGB pixels with data on GPIO3 and power switched by GPIO47.

PropertyValue
Pixels25 (5×5)
Data pinGPIO3
Power switchGPIO47 — LOW = on, HIGH or floating = off
Chain continues onPIX OUT header pin, from pixel 26
#define MATRIX_POWER 47
 
pinMode(MATRIX_POWER, OUTPUT);
digitalWrite(MATRIX_POWER, LOW);    // LEDs powered
// ...
digitalWrite(MATRIX_POWER, HIGH);   // LEDs completely off

Cutting matrix power before deep sleep saves meaningful battery. The switch removes power entirely rather than just setting pixels to black.

The matrix shares the 600 mA 3.3 V regulator with the ESP32-S3. Keep brightness moderate, especially on battery.

Buzzer

A magnetic buzzer on GPIO48, driven through a transistor. Use PWM to play tones — it's loudest around 4 kHz.

tone(48, 4000, 150);
delay(150);
noTone(48);
digitalWrite(48, LOW);   // required

Always leave GPIO48 LOW when you're done. Holding it HIGH puts DC through the coil — it makes no sound, but heats the buzzer and drains the battery.

Motion Sensor (IMU)

TDK ICM-42670 — 3-axis accelerometer plus 3-axis gyroscope.

PropertyValue
I2C address0x68
InterruptGPIO21, exposed as INT, 10 kΩ pull-up, active low
Built-in detectionWake-on-motion, tap, tilt, free fall, step counting

The IMU can detect these events itself and raise INT, which means the ESP32-S3 can sleep until something actually happens.

GPIO21 is free as a normal GPIO while the IMU's interrupts are disabled. Once a library enables them, the pin belongs to the IMU.

Barometer

Goertek SPL07-003 — barometric pressure and temperature.

PropertyValue
I2C address0x76 or 0x77
Altitude resolutionroughly 25 cm

Fine enough to detect moving between floors of a building, or the board changing height on a robot arm.

Compass

QST QMC6309 — 3-axis magnetometer at I2C address 0x7C. It's a 0.8 mm chip, too small to be labelled on the board.

Calibrate the compass in its final installation. Nearby metal, magnets and motor currents all shift the readings — calibrating on the bench and then mounting the board gives wrong headings.

Qwiic Port

A JST-SH 4-pin Qwiic / STEMMA QT connector carrying GND, 3.3 V, SDA and SCL.

It's the same I2C bus as the SCL and SDA header pins and the onboard sensors, so anything you plug in shares it — just avoid the addresses already in use (0x68, 0x76/0x77, 0x7C).

USB-C

Native USB on the ESP32-S3 (GPIO19 and GPIO20) — no driver chip on the board and no drivers to install. It handles power, battery charging, programming, serial and debugging over one connector.

Buttons

ButtonConnected toDoes
RESETRST / ENRestarts the ESP32-S3. Sensors and regulator stay powered
BOOTGPIO0 (10 kΩ pull-up)Enters download mode at reset, or acts as an input in your program

See Quick Start for the BOOT + RESET upload sequence.

Onboard Pin Map

GPIOUsed for
3Matrix data
4Battery voltage sense (ADC1, half the battery voltage)
19, 20Native USB
21IMU interrupt (INT)
47Matrix power switch (LOW = on)
48Buzzer
13 / 14I2C SCL / SDA — sensors, Qwiic, and header pins