Furbygotchi
    Hardware

    Furbygotchi

    'Dad, could you make me a tamagotchi?' my kid asked. A real Tamagotchi built with an ESP32-S3, a color display and a 3D-printed case, with a full life cycle, energy and automatic sleep, and a web dashboard with messages from dad.

    ESP32
    C++
    PlatformIO
    3D Printing
    Kids

    What is it?

    A real Tamagotchi, built from scratch: a color display, a 3D-printed case and a life cycle faithful to the 1997 original. It's the ESP32-S3 variant ("Furbygotchi") of a firmware that also runs, with the same game engine, on a simpler ESP8266 with a monochrome OLED display. Egg, baby, kid, adult, old and ghost; hunger, mood, health and energy that decay over time; it falls asleep and wakes up on its own; and a web dashboard I use to send messages to my kid.

    Why I built it

    "Dad, could you make me a tamagotchi?" my kid asked. Instead of buying one, I decided to build it: geek spirit, electronics and programming, real product development, and AI as a multiplier. I didn't want a weekend prototype, but something that could survive a kid's daily use —power outages, a draining battery, "it died on me"— backed by persistence and tests. It was also an open question: would it turn into a product that actually works?

    How it works

    Life cycle and care

    • LifeFSM: egg → baby → kid → adult → old → ghost, with automatic transitions based on age and care; after a while as a ghost, it resurrects into a new egg.
    • StatsEngine: 7 stats (hunger, mood, health and energy among them) with real-time decay, and 6 actions —feed, play, clean, medicate, discipline and lights— from the physical button and from the REST API.
    • Faithful to the '97 Tamagotchi: energy governs sleep. It falls asleep on its own below 20 and wakes up on its own above 80. The "Lights" action only shows up while it's asleep: turning them off lets it rest at full recovery rate; leaving them on annoys it and penalizes mood and health, with the screen going black and a few Zs floating up.
    • Persistence on LittleFS with CRC32 and chained schema migrations (v1→v2→v3): survives power outages and power cycles.

    Color display and sprites

    • A JD9853 240×296 IPS TFT that doesn't boot with the standard ST7789 init sequence —I wrote it its own boot subclass. The framebuffer lives in PSRAM with double buffering, at 15 FPS with no flicker.
    • Pixel-art sprites in RGB565 generated in a separate project, with a magenta color key for transparency, served from LittleFS and cached in PSRAM depending on life stage and mood.

    Messages from dad

    • From the dashboard, or with POST /api/v1/message, I send it text that shows up on screen as a marquee. It travels through a lock-free producer-consumer channel that sanitizes UTF-8 down to printable ASCII, and gets dismissed with the physical button.

    Network, OTA and dashboard

    • Non-blocking WiFi, password-protected OTA and a REST dashboard with basic auth and rate limiting, served over mDNS at tamagotchi.local.
    • A network supervisor brings the dashboard and OTA back up on their own if they drop after a reconnect, and an anti-boot-loop watchdog prevents restart loops if the router is off.

    3D-printed case

    • Designed parametrically with a FreeCAD script, in two screwed-together pieces, exported to STL and sliced for a Bambu Lab printer in PLA.

    Stack

    LayerTechnology
    MicrocontrollerWaveshare ESP32-S3 Zero (ESP32-S3FH4R2, 4 MB flash, 2 MB PSRAM)
    FirmwareC++ with Arduino on PlatformIO; game domain shared with the ESP8266 variant
    DisplayJD9853 240×296 IPS TFT via Arduino_GFX, with a custom boot subclass
    PersistenceLittleFS with CRC32 and schema migrations
    NetworkWiFi STA, ArduinoOTA, async web server and mDNS
    Tests203 host-native tests (14 suites) validating the domain of both variants
    CaseFreeCAD (parametric script) + 3D printing in PLA

    Status

    Active development. The color variant's firmware builds, passes its 203 tests and already runs on real hardware —WiFi, OTA and the dashboard have been tested on the actual ESP32-S3 board. Pending:

    • Soldering the battery divider: firmware, API and icon are ready, only the hardware is missing.
    • Power management (auto screen off, WiFi power saving) to extend LiPo battery life.
    • An on-screen action menu navigable with a single button, to play without WiFi.

    Links

    MakerIsland

    Building digital treasures with code

    © 2026 Maker Island · handmade, no templatesThe workshop