← Back to Projects

Personal Project · 2024

Bertie

C++C#PythonESP32ArduinoPlatformIOTCPE-inkSpeech-to-Text

Bertie is a desktop companion robot built around a distributed client-server architecture. The hardware — an ESP32 devkit on an aluminium frame with two servos for head rotation, an e-ink display for expressive eyes, a microphone, a button, and an IR positioning sensor — acts as a thin client. The 'brain' lives on a server the robot connects to via TCP: the robot forwards sensor readings and current state, and the server returns instructions.

Pressing the button triggers a state machine that activates the microphone and streams audio to a Python server handling speech-to-text transcription. The transcription result flows back through the C# server, which parses the recognised speech into commands and dispatches servo animations and e-ink eye state updates simultaneously. The firmware is written in C++ using PlatformIO, with dual power rails — 4× AA batteries for the servos and USB-C for the ESP32 — a split that caused some early hardware failures before proper power management was in place.

Key Contributions

01

Distributed architecture: ESP32 TCP client forwarding state to a C# server brain

02

Python speech-to-text layer handling microphone streaming and transcription

03

State machine-driven button and microphone handling on the embedded side

04

Coordinated servo animation and e-ink eye state updates from a single transcription result

05

2-DOF aluminium-framed head with dual power rails (servo + logic separated)

06

IR positioning sensor with LED tracking capability