🥚 What TamaFi Actually Is
TamaFi is a pocket pet on a custom ESP32-S3 board. It tracks six stats, hunger, energy, happiness, health, curiosity, and comfort, and it reads WiFi and Bluetooth activity around it as its sensor input. In this build, that's read-only. No transmitting, no saved SSIDs or MAC addresses.
It runs fully standalone, no app required. There's also a desktop companion app now, TamaFi Lab, which I'll get into further down, including the USB issues that came with building it.

🔩 The Hardware
The board runs on an ESP32-S3-WROOM-1. Dual core, WiFi and Bluetooth built in, native USB.
The single most important constraint on this board is memory. It has no working PSRAM. That limits the display to one memory buffer for the entire face, 240 by 240 pixels. A second buffer fails to allocate, full stop.
The original TamaFi used a sprite sheet for its face, pre-made bitmaps swapped in and out. That needs more memory than this board has room for. So this version builds the face directly from code instead, drawing it fresh every frame rather than loading stored bitmaps. That one memory limit is the reason the entire face system had to be rewritten.
The rest of the board:
- Display: ST7789, 240 by 240, SPI
- Microphone: INMP441, listens for nearby speech
- Speaker: MAX98357A amplifier driving a real speaker, replacing the old basic buzzer. If free memory drops too low, sound disables itself automatically
- Motion: MPU6050 accelerometer and gyroscope, tilt and gestures, shake, tap, flip
- LEDs: four WS2812 addressable RGB LEDs for status feedback
- Buttons: six total, three for menus, three for direct shortcuts to pet status, environment, and a short activity log
- Power: single-cell lithium battery through a TP4056 charge controller, stepped down to 3.3V by an LF33 regulator
- Backlight control: SI2302 MOSFET, switched under firmware control
- Connectivity: USB-C for charging and flashing
There's also an OV2640 camera connector on the board, wired through a 24-pin FPC connector, the same camera used on ESP32-CAM boards. It doesn't work right now, and not because the firmware skips it. After building the library setup in Altium and following the camera's documentation, it wouldn't respond. Hours of debugging the actual hardware later, a closer look at the schematic against the real OV2640 module showed the connector's pin arrangement is reversed. That's a board-level mistake, not something firmware can fix, so it stays unused until a future revision corrects the connector layout. Several of its signal lines also share GPIOs with three of the buttons, so even once the pinout is fixed, the camera and those buttons still can't run at the same time.
An LDR light sensor and capacitive touch pins are planned for a future revision. Neither is on the current board.

🧠 The Brain Behind the Face
The original TamaFi reacted directly to input. WiFi count goes up, hunger goes down. Simple, and honestly, a little flat.
This version thinks first.
Age is tracked in minutes and determines life stage, baby, teen, adult, elder. A stage change triggers a stat bump and a specific animation. Stats decay on their own over time, and periodically, the device picks between four activities, hunting, discovering, resting, or idle behavior, using weighted odds instead of a fixed rule. It avoids repeating the same activity twice in a row, and there's roughly a 1-in-5 chance it changes its mind mid-decision instead of following through immediately.
Hunting checks nearby WiFi and Bluetooth activity and adjusts hunger and mood based on what's found. Discovering specifically hunts for hidden or open networks. Resting is a timed nap where stats recover and the face stays fully asleep.
👁️ The Face
On first power-on, the device runs a hatch animation, then the face becomes active. Every boot after that skips straight to a short intro.
The face is drawn fresh from code every frame, nothing loaded from stored...
看更多 »
CiferTech