Getting Started with XIAO 1.47'' IPS Display (ESP32-S3)
| XIAO 1.47'' IPS Display (ESP32-S3) |
|---|
![]() |
Introduction
The 1.47'' IPS Display is an expansion board designed for the XIAO series, powered by the XIAO ESP32-S3 Plus. It features a 172×320 color LCD with capacitive touch, onboard PDM microphone, 6-axis IMU (LSM6DS3), MicroSD card slot, and battery voltage measurement — all integrated into a compact form factor.
This combination makes it an ideal platform for portable HMI applications, IoT dashboards, wearable devices, and interactive prototyping. With the ESP32-S3's dual-core processor, Wi-Fi, and Bluetooth capabilities, it extends the dashboard into a wireless-connected hub.
| Specification | Detail |
|---|---|
| Product Positioning | Touch & Full Interaction |
| Core Controller | Seeed Studio XIAO ESP32-S3 Plus |
| Processor | ESP32-S3R8, Dual-Core, up to 240 MHz |
| Memory | 8 MB PSRAM + 16 MB Flash |
| Wireless Connectivity | 2.4 GHz Wi-Fi + BLE 5.0 |
| Display Type | 1.47" IPS TFT LCD |
| Resolution | 172 × 320 |
| Display Driver | JD9853A |
| Display Interface | SPI |
| Touch Input | Capacitive Touch |
| 6-Axis IMU | Yes |
| PDM Digital Microphone | Yes |
| MicroSD Card Slot | Yes |
| Grove I2C Connector | No |
| User Buttons | 2 |
| Battery Connector | 2-pin JST, 3.7 V LiPo |
| Battery Monitoring | Battery voltage monitoring via D16 ADC; battery level can be estimated from the measured voltage. Battery status detection is not supported. |
| Expansion Interfaces | 1x I2C pads, 1x I2S pads, 1x SWD pads, 2x user-button pads |
| Board Size | 26.4 × 51.4 × 12.6 mm |
| Best For | Touch UI, portable HMI, local media & data logging |
The ESP32-S3 Plus uses D16 for voltage measurement. The voltage demo does not display battery percentage, and no charging-status signal is connected to an ESP32-S3 GPIO.
Hardware Overview
Before we start, refer to the following image to understand the physical layout of the 1.47'' IPS Display.

Pin Map
The 1.47'' IPS Display breaks out all XIAO ESP32-S3 Plus pins. The table below lists every pin, its net name on the display board, its function, and how it is connected to onboard peripherals.
| XIAO Pin | Net Name | Function Description | Hardware Connection Notes |
|---|---|---|---|
| D0 | PDM_CLK | MIC_CLK | PDM digital microphone clock |
| D1 | MIC_DATA | PDM digital microphone data | Internally connected to PDM Mic |
| D2 | LCD_CS | Screen chip select signal | Internally connected to LCD driver IC |
| D3 | LCD_DC | Screen data/command switch | Internally connected to LCD driver IC |
| D4 | SDA | I2C data bus | Bus sharing: internally connected to IMU and touch IC; externally exposed as I2C expansion pads |
| D5 | SCL | I2C clock bus | Bus sharing: internally connected to IMU and touch IC; externally exposed as I2C expansion pads |
| D6 | SD_CS | SD card chip select signal | Internally connected to MicroSD card slot |
| D7 | TOUCH_INT | Touch interrupt signal | Internally connected to touch IC for asynchronous wake-up |
| D8 | SCK | Hardware SPI clock | Internally connected to LCD and SD card slot |
| D9 | MISO | Hardware SPI data input | Internally connected to SD card slot |
| D10 | MOSI | Hardware SPI data output | Internally connected to LCD and SD card slot |
| D11 | I2S_SD | Audio data line | Corresponds to I2S_SD default mapping, exposed to bottom pad group |
| D12 | I2S_SCK | Audio bit clock | Corresponds to I2S_SCK default mapping, exposed to bottom pad group |
| D13 | I2S_WS | Audio word select | Corresponds to I2S_WS default mapping, exposed to bottom pad group |
| D14 | IMU_INT | IMU motion interrupt | Function reassignment: used for motion wake-up and double-tap detection |
| D15 | BTN_B | Physical button 2 (USR2) | Function reassignment: user button 2. Externally exposed as button expansion pad |
| D16 | BAT_ADC | Battery voltage detection | Internally connected to voltage divider circuit (316K / 160K). Do not use externally |
| D17 | LCD_RST | Screen reset signal | Independent GPIO control for reliable startup |
| D18 | LCD_BL | Screen backlight control | Supports hardware PWM brightness adjustment |
| D19 | BTN_A | Physical button 1 (USR1) | User button 1. Externally exposed as button expansion pad |
Getting Started
This guide uploads a minimal "Hello, XIAO" sketch to the display board: the screen turns on its backlight, fills black, and prints "Hello," and "XIAO" as two centered lines of large green text. It is the fastest way to confirm the screen and your development environment are working before diving into the individual peripheral demos.
Software Preparation
You will need the following tools and libraries:
- Arduino IDE (version 1.8 or later)
- esp32 Boards by Espressif (3.3.11) — add the following URL to File > Preferences > Additional Boards Manager URLs:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
Then go to Tools > Board > Boards Manager, search for esp32 and install version 3.3.11.
- Seeed_GFX2 (Manual Installation) — this library is not available in the Library Manager and must be installed manually:
Step 1. Click the button above to download Seeed_GFX2 v1.0.0 as a ZIP file (pinned to a release tag so the tutorial stays reproducible). Alternatively, clone the repository from Seeed-Studio/Seeed_GFX2.
Step 2. In the Arduino IDE, go to Sketch > Include Library > Add .ZIP Library... and select the downloaded ZIP. The IDE reads library.properties and installs it into the correct Seeed_GFX2 folder automatically — you do not need to rename the extracted folder. (To install manually instead, unzip the archive and rename the extracted folder to Seeed_GFX2 before placing it in Documents/Arduino/libraries/.)
Step 3. Restart the Arduino IDE so the new library is detected.
- Seeed_GFX2 is Seeed Studio's graphics library built on a layered
Board+Panel Configarchitecture. Each demo initializes the display with a singledisplay.begin<Board_..., Config_...>()call — the Board template owns the pin map (CS/DC/SCK/MOSI/RST/BL), and the Panel Config bakes in the 172×320 resolution, color order (BGR), and orientation. Nodriver.hor manual pin setup is needed. - On this board the sketch uses
Board_XIAO_1inch47_Touch_Display<13, 12>(RST=13, BL=12) withConfig_Seeed_1inch47_Touch_JD9853A.
Download the Code
The example sketch is available on GitHub:
Navigate to code_GFX2/getting_started_code/xiao_esp32s3_147_hello/ and open xiao_esp32s3_147_hello.ino in the Arduino IDE. Download the complete folder rather than copying the .ino source from the GitHub web view.
Upload the Sketch
Step 1. Connect the XIAO ESP32-S3 Plus to your computer via the USB-C port.
Step 2. In Arduino IDE, select the board: Tools > Board > esp32 > XIAO_ESP32S3_PLUS.
Step 3. Select the correct Port under Tools > Port.
Step 4. Click the Upload button (→). The sketch will compile and upload to the board.
Expected Output
After uploading, the screen lights up with a black background and shows two centered lines of large green text — "Hello," on the first line and "XIAO" on the second. The greeting stays on screen without redrawing.

If the display fails to initialize, the sketch prints the library error message to the serial monitor at 115200 baud. Open Tools > Serial Monitor and set the baud rate to 115200 to read it.
What's Next
The display board packs several onboard peripherals. The Function page provides a standalone demo for each one:
| Peripheral | Demo |
|---|---|
| Screen | GraphicTest — ten graphics primitives with timing benchmarks |
| Touch | Touch Circle — tap to draw persistent circles; tap CLEAR to erase them |
| SD Card | BMP Reader — display a BMP from the MicroSD card |
| Microphone & Speaker | Volume Bar + SD Recorder — live PDM level meter and recording to SD |
| IMU | Electronic Quicksand + Raise to Wake — 6-axis motion effects and wake-on-motion |
| Buttons | User Button — read presses and debounce with interrupts |
| Battery | Battery Voltage Detection — measure the divider voltage |
FAQ
The board doesn't appear in the Tools > Board menu
Make sure you have added the ESP32 board package to Arduino IDE:
- Go to File > Preferences and paste the URL below into Additional Boards Manager URLs:
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Go to Tools > Board > Boards Manager, search for esp32, and install version 3.3.11.
- After installation, Tools > Board > esp32 > XIAO_ESP32S3_PLUS should appear in the menu.
If the board still doesn't show up, restart Arduino IDE and try again.
Resources
- 🗃️[PCB Design Files] XIAO 1.47'' IPS Display (ESP32-S3) KiCad Project
- 📄[Schematic] XIAO 1.47'' IPS Display (ESP32-S3) Schematic
- 📦[3D Model] XIAO 1.47'' IPS Display (STEP)
- 📄[Datasheet] 1.47 Inch Display Datasheet
- 💾[Factory Firmware] XIAO 1.47'' IPS Display (ESP32-S3) Factory Firmware
Tech Support & Product Discussion
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.
