How to Build a Voice-Controlled Robot Face
A little ESP32-S3 character with audio, movement, and a colour display
Updated

What you'll build
This guide builds the control surface for a small robot character: an ESP32-S3 project with a colour display, Wi-Fi control code, and enough structure to turn a desk build into a face that can listen, react, and grow into a proper animatronic toy.
The verified starter focuses on the deployable core: ESP32-S3 firmware, ST7735 display wiring, a local control surface, and calibration notes for screen pins, offsets, and future motion/audio behaviour. That gives you a working base before you add servos, a microphone, or a speaker enclosure.
The fun is in making the object feel alive. Once the starter is flashed, you can add idle expressions, simple voice-command states, servo eyebrow movements, or a tiny speaker. The guide treats calibration as part of the product, because tiny robot faces get charming only after the screen, timing, and reactions feel intentional.
Wiring diagram
Wiring diagram
Components needed
| Component | Type | Qty | Buy |
|---|---|---|---|
| ESP32-S3 development board | board | 1 | |
| ST7735 colour TFT display | display | 1 | |
| I2S microphone module | sensor | 1 | |
| MAX98357A I2S amplifier | actuator | 1 | |
| Small 8Ω speaker | actuator | 1 |
Assembly
Wire the robot face
Connect the listed modules using the pin table below, keeping all grounds common and checking voltage markings before powering the board.
Upload the sketch
Flash the starter code from Schematik, then open Serial Monitor at 115200 baud to confirm the device starts cleanly.
Test the behaviour
Exercise the main input/output path and adjust pin constants only if your board revision uses different labels.
Code
#include <Arduino.h>
// robot face starter. Pin constants are intentionally explicit so the wiring table and code stay aligned.
#define TFT_CS_PIN 10
#define TFT_DC_PIN 9
#define TFT_RST_PIN 8
#define I2S_BCLK_PIN 4
#define I2S_LRCLK_PIN 5
#define I2S_DOUT_PIN 6
#define I2S_DIN_PIN 7
void setup() {
Serial.begin(115200);
delay(200);
Serial.println("Starting robot face");
}
void loop() {
Serial.println("robot face running");
delay(1000);
}
// Run this and build other cool things at schematik.ioReady to build this?
Open this project in Schematik to get the full wiring diagram, pin assignments, and deployable code for the Voice-Controlled Robot Face.
Open in Schematik →