SKU:K151/K151-R


































StackChan is a super kawaii AI desktop robot co-created by M5Stack and the user community. It uses the M5Stack flagship IoT development kit CoreS3 as its main controller, powered by an ESP32-S3 SoC featuring a 240 MHz dual-core processor, with 16MB Flash and 8MB PSRAM onboard, and supporting Wi-Fi and BLE. The main unit also integrates a 2.0-inch capacitive touch display with a high-strength glass cover, a 0.3 MP camera, a proximity & ambient light sensor, a 9-axis IMU (accelerometer + gyroscope + magnetometer), a microSD card slot, a 1W speaker, dual microphones, and power/reset buttons.
The robot body, connected to the main unit, includes a USB-C interface for power and data, a 550 mAh battery, two feedback servos (360-degree continuous rotation on the horizontal axis and 90-degree movement on the vertical axis), two rows totaling 12 RGB LEDs, infrared transmitter and receiver, a three-zone touch panel, and a full-featured NFC module.
The factory firmware is feature-rich, including an AI Agent, lively and expressive animations, ESP-NOW wireless remote control, and online app downloads. It can connect to a mobile app for video viewing, remote avatar control, and more, and also supports online updates (OTA). The product also supports programming via Arduino, UiFlow2, and other methods, and can connect to various expansion units in the M5Stack ecosystem, making it easy to implement a wide range of custom functions.
Thank you to the contributors of the StackChan community, especially:
| @stack_chan | @mongonta555 |
| Shinya Ishikawa | Takao Akaki |
| Specification | Parameter |
|---|---|
| Main Controller | ESP32-S3 Xtensa® dual-core 32-bit LX7, 240 MHz 16MB Flash, 8MB Quad PSRAM |
| Wireless Connectivity | 2.4 GHz Wi-Fi, IEEE 802.11 b/g/n Bluetooth® 5 LE Infrared receiver IRM56384 + infrared transmitter |
| Wired Connectivity | USB CDC & full-speed USB OTG GPIO, UART, I2C |
| Display | 2.0-inch IPS LCD, resolution 320*240, 65536 colors, ILI9342C driver Capacitive multi-touch, FT6336U driver |
| Camera | GC0308, 640*480, 0.3 MP |
| Sensors | Dual microphones, ES7210 audio codec Proximity & ambient light sensor LTR-553ALS-WA 9-axis IMU BMI270 + BMM150 (accelerometer + gyroscope + magnetometer) Three-zone touch panel, Si12T driver Full-featured NFC ST25R3916 |
| Human Interactions | 1W speaker, AW88298 16-bit I2S power amplifier RGB LEDs WS2812C * 12 Power and reset buttons Power indicator LED |
| Expansions | microSD card slot Grove interface * 3 LEGO®-compatible mounting holes |
| Motors | 360-degree horizontal servo with feedback 90-degree vertical servo with feedback |
| Power | 550 mAh battery USB-C power and data Power management IC AXP2101, RTC BM8563 |
| Product Size | 54.0 x 70.5 x 61.5mm |
| Product Weight | StackChan: 187.0g Remote Controller: 37.6g |
| Package Size | StackChan: 142.0 x 101.0 x 58.0mm StackChan Remote Kit: 155.0 x 109.0 x 65.0mm |
| Gross Weight | StackChan: 272.4g StackChan Remote Kit: 372.9g |
Power on: Short press the power button once (located next to the USB-C port on the left side). Power off: Press and hold the power button for 6 seconds (located next to the USB-C port on the left side). Reset / Reboot: Short press the RST reset button once (located next to the microSD card slot on the bottom side).
Connect StackChan to a computer using a USB-C cable (both the USB-C port on the main unit and the one on the base support data transmission. However, it is recommended to use the port on the base to avoid accidents caused by motor movement). Press and hold the RST reset button for 3 seconds (located next to the microSD card slot on the bottom side). When the indicator LED next to the button turns green, the device has entered download mode and the button can be released.






















This section mainly describes the robot body module. For information about the main controller, please refer to CoreS3 PinMap.
| ESP32-S3 | G6 | G7 | G5 | G10 | G11 | G12 |
|---|---|---|---|---|---|---|
| Servo_TX | Servo_RX | IR_SEND | IR_REC | I2C_SCL | I2C_SDA |
| PY32L020 | IO1 | IO14 |
|---|---|---|
| VM_EN | RGB |
I2C address: 0x6F (ADD_SEL low level, default)
I2C address: 0x71 (ADD_SEL high level)
| Component | I2C Address |
|---|---|
| Battery Monitor (INA226AIDGSR) | 0x41 |
| NFC (ST25R3916-AQWT) | 0x50 |
| Touch (Si12T, TSM12 compatible) | 0x68 |
| IO Expander (PY32L020) | Default 0x6F Configurable to 0x71 |
| HY2.0-4P | Black | Red | Yellow | White |
|---|---|---|---|---|
| PORT.A | GND | 5V | G2 | G1 |
| PORT.B | GND | 5V | G9 | G8 |
| PORT.C | GND | 5V | G17 | G18 |
(Coming soon)
To bind and configure the AI Agent and use features such as remote video, StackChan needs to be used with the StackChan World mobile app, which supports iOS and Android. Download links:
After installation, open the app and log in to or register an M5Stack account (the same account used for UiFlow, M5Burner, and the M5Stack forum).
Power on StackChan by connecting it to a power source via the bottom USB-C port, or by short-pressing the power button on the left side. The screen will display the welcome page. Tap Start, place the device on a firm and stable surface without touching it, and tap Start again to begin the servo test. StackChan will move left, right, and up in sequence, and finally return to the initial position — screen perpendicular to the base and centered between the two “feet”.
After the servo test is completed, tap Next - Next, then open the app on your phone. Tap Add a new StackChan in the app. The phone will scan for nearby StackChan devices broadcasting Bluetooth pairing requests and display them in a list. Select the device with the same ID (the MAC address of the main controller) as shown on the StackChan screen, and follow the app instructions to configure the following items:
After completing the above settings, StackChan will restart, and the binding and setup will be completed.
After powering on, the screen displays the main menu. You can swipe left or right to switch between different function icons, then tap to enter. Within each function, swipe inward from the top or bottom edge of the screen to show the status bar (network, time, battery level) and the Home button for returning to the main menu.

Each time you enter this function, the device checks for firmware updates online, then automatically downloads, installs, and restarts. The default voice wake word is Hi, StackChan (custom wake word support is not yet available). You can also tap the screen to wake it up and start a conversation.
The RGB LED located at the upper-left side of the device near the screen indicates the voice interaction status:
Common voice commands:
In AI Agent mode, when the device is idle, it will randomly perform expressions such as blinking and head movements. Swipe vertically on the touch area on the top of the device to trigger a happy 🥰 expression and motion; shake the device to trigger a dizzy 😵💫 expression; after a period of inactivity with no interaction, a sleeping 😴 expression will be triggered.
After connecting to MCP via the Home Assistant plugin, the AI Agent can control Home Assistant devices by voice. For now, you can refer to the guide at https://github.com/c1pher-cn/ha-mcp-for-xiaozhi/blob/main/README.en.md . A detailed tutorial is in preparation.
The Avatar feature on StackChan corresponds to the Avatar, Monitoring Camera, Motion, and Dance (Wi-Fi mode) features in the mobile app. When using or switching between these features on the mobile side, keep StackChan in Avatar mode; no additional operation is required.
This feature enables remote control via the ESP-NOW wireless transmission protocol based on Wi-Fi. StackChan acts as the receiver, while a remote controller or another StackChan acts as the sender.
After entering the remote control feature, StackChan can quickly select Receiver or Sender to enter the default control mode, or tap Advanced to customize the Wi-Fi Channel and Receiver ID. When StackChan is used as the sender, manually rotating its head will cause the receiver to rotate to the same angle.
The remote controller consists of the StickC-Plus controller and the Hat Mini JoyC joystick. Press and hold the left power button for 2 seconds to power on, and for 6 seconds to power off, consistent with the controller behavior. After powering on, short press the small right-side button (BtnB) to switch between Wi-Fi Channel and Receiver ID selection, and move the joystick up or down to increase or decrease the value. Short press the large front button (BtnA) to enter joystick control mode; press again to switch to IMU attitude control mode; press once more to return to Wi-Fi Channel and Receiver ID settings.
Wi-Fi Channel and Receiver ID rules: only devices on the same Wi-Fi Channel can communicate; devices on different channels cannot communicate. The receiver sets its own ID, while the sender sets the target receiver ID. When the target ID is 0, it acts as a broadcast, and all receivers (regardless of ID) will be controlled (receiver ID cannot be set to 0). When the target ID is not 0, only the receiver with the matching ID will be controlled. Multiple receivers can share the same ID to enable group control.
This feature allows you to download various applications online, such as a pipe-jumping mini game, IMU stabilizer, and universal IR learning remote. More applications will be added over time.
This feature is not available yet.
This feature corresponds to the Dance function in the mobile app under Bluetooth mode. You can set music, movements (rotation angles), and lighting colors to choreograph StackChan’s dance.
This section contains various on-device settings for StackChan, including Wi-Fi network, screen brightness, speaker volume, time zone, servo calibration, RGB strip test, account unbinding, firmware update, and more.
Servo calibration: In some cases, abnormal servo behavior can be corrected using this feature. After entering the calibration screen, gently rotate the device manually to the initial position, with the screen perpendicular to the base and centered between the two “feet”. Then tap Set Current Position As Home. Next, verify whether the calibration is effective: gently rotate the device away from the initial position, then tap Move To Home. If the device returns to the initial position, the calibration is successful. Tap Done at the bottom to complete the process.
Firmware update: Similar to entering the AI Agent, the device will check for firmware updates online, automatically download and install them, and then restart.
Settings in the mobile app include multi-device management, device name, AI Agent profile, MCP, conversation history, device unbinding, and more. Unbinding from the StackChan device or from the mobile app has the same effect: it clears AI Agent settings, deletes conversation history, disconnects the mobile app, and allows the device to be rebound to another M5Stack account after restart.
If you have flashed custom firmware to StackChan using Arduino, UiFlow, or other methods, or need to restore the factory firmware due to unexpected issues, you can use the M5Stack unified flashing tool, M5Burner, on your computer:
Open M5Burner, search for StackChan, check Only Official, and click Download to get the latest firmware version.
Connect the computer and StackChan using a USB-C cable. Both USB-C ports support data transfer, but it is recommended to use the one on the base to avoid accidental movement. Press the power button once to turn on the device. On macOS, if a permission prompt appears, please allow it.
In M5Burner, click Burn, then select the corresponding port of the device. Click Start and wait for the progress bar to complete the flashing process.
If you are not sure which port corresponds to the device, expand the port list, disconnect the device and note which port disappears, then reconnect the device. If the device port does not appear, press and hold the RST button for 3 seconds. The indicator next to the button will turn green, indicating that the device has entered download mode. Then release the button.