Desktop Robot
An expressive ESP32-S3 desktop companion robot with an LCD face, touch-to-pair phone control, differential drive, and piezo sound.
- Home
- Open source
- arduino
- 3D printable
Suggested by Robotheca, created by @Nicolassalazar-pro (opens in a new tab), from github.com/Nicolassalazar-pro/desktop-robot (opens in a new tab). Pinned to commit bcd3b0b (opens in a new tab).
- Hardware license
- CERN-OHL-S-2.0 (opens in a new tab)
- Software license
- MIT (opens in a new tab)
- Commercial use
- Allowed
This repository contains executable files that Robotheca doesn't check. Only run them if you trust the creator.
Which files (10 scripts)
- test/run_motor_host_tests.ps1 (opens in a new tab)
- test/test_setup_midi_keyboard.ps1 (opens in a new tab)
- tools/flash.ps1 (opens in a new tab)
- tools/host_preview/build.ps1 (opens in a new tab)
- tools/setup_midi_keyboard.ps1 (opens in a new tab)
- tools/start_midi_bridge.ps1 (opens in a new tab)
- tools/web_preview/build.ps1 (opens in a new tab)
- tools/web_preview/hotspot.ps1 (opens in a new tab)
- tools/web_preview/serve_app.ps1 (opens in a new tab)
- tools/web_preview/serve.ps1 (opens in a new tab)
Photo and 3D model
3D preview converted from github.com/Nicolassalazar-pro/desktop-robot at bcd3b0b, under CERN-OHL-S-2.0. View the original files from GitHub (51.0 MB) (opens in a new tab)
What it can do
Written by Robotheca from the project's documents.
- Shows expressive eye faces with 16 moods, gaze direction, blinking, and idle wandering on a 240x280 LCD.
- Drives on two continuous-rotation servos in a differential-drive configuration with closed-loop gyro turns and heading hold.
- Plays mood-linked generated melodies and direct tones through a piezo buzzer.
- Reacts to capacitive touch and pull-down gestures, including a temporary Wi-Fi softAP pairing screen with QR codes.
- Accepts phone control over a token-gated WebSocket after joining its temporary WPA2 softAP.
- Detects bumps, shakes, and being lifted from accelerometer signatures, and fails safe through drive leases and timers.
- Accepts serial CLI commands over native USB for status, moods, calibration, heading, and bench measurements.
- Has a sleep, wake, and power-button shutdown sequence with a Garage startup animation.
Bill of materials
This repository has no parts list Robotheca can read yet.
Build guide
The guide appears here as you scroll.
Guide by @Nicolassalazar-pro (README.md), under CERN-OHL-S-2.0 (hardware) and MIT (software).
More guides
Wiring and electronics
Notes written by Robotheca from the project's documents.
Main parts
- ESP32-S3R8 controller (Waveshare ESP32-S3-Touch-LCD-1.69 board) with 8 MB PSRAM and 16 MB flash.
- ST7789V2 240x280 IPS LCD driven over SPI.
- CST816T capacitive touch controller on shared I2C.
- QMI8658C 6-axis IMU for heading, bump, shake, and lift sensing.
- Two MG90D continuous-rotation servos for differential drive.
- Passive piezo buzzer for sound.
- LiPo battery with latched board power and a separate external 5 V servo supply rail, with a buck-boost enable.
Connections
- Touch and IMU share an I2C bus.
- The LCD is connected over SPI at 40 MHz with a 20 px row offset.
- Servo control pulses are generated per servo with calibrated pulse curves, and the servos are powered from the external 5 V rail.
- The buck-boost enable (SYS_EN) must be driven HIGH early in setup() or the board can lose power.
- Full pin assignments and power design are documented in HARDWARE.md, which is not included in the provided documents.