Onboard Hardware
5×5 RGB Matrix
25 addressable RGB pixels with data on GPIO3 and power switched by GPIO47.
| Property | Value |
|---|---|
| Pixels | 25 (5×5) |
| Data pin | GPIO3 |
| Power switch | GPIO47 — LOW = on, HIGH or floating = off |
| Chain continues on | PIX 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 offCutting 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); // requiredAlways 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.
| Property | Value |
|---|---|
| I2C address | 0x68 |
| Interrupt | GPIO21, exposed as INT, 10 kΩ pull-up, active low |
| Built-in detection | Wake-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.
| Property | Value |
|---|---|
| I2C address | 0x76 or 0x77 |
| Altitude resolution | roughly 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
| Button | Connected to | Does |
|---|---|---|
| RESET | RST / EN | Restarts the ESP32-S3. Sensors and regulator stay powered |
| BOOT | GPIO0 (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
| GPIO | Used for |
|---|---|
| 3 | Matrix data |
| 4 | Battery voltage sense (ADC1, half the battery voltage) |
| 19, 20 | Native USB |
| 21 | IMU interrupt (INT) |
| 47 | Matrix power switch (LOW = on) |
| 48 | Buzzer |
| 13 / 14 | I2C SCL / SDA — sensors, Qwiic, and header pins |
