← All projects

TAMX

A pocket-sized ESP32 handheld in a Tamagotchi shell — Wi-Fi tools, an on-device AI chat, a graphing calculator, games and a PowerPoint remote.

2026active
  • esp32
  • cpp
  • embedded
  • hardware
  • groq

A handheld I designed, built and wrote from scratch: an ESP32, a 1.3" SSD1306 OLED, six tactile switches, a LiPo cell and a Tamagotchi-sized case. It scans Wi-Fi, talks to an LLM, plots functions, plays Snake, and drives a laptop slideshow.

The assembled device

What it does

  • Wi-Fi tools — scan networks, watch packets per second live, broadcast test beacons.
  • AI chat — Groq llama-3.1-8b-instant over Wi-Fi, typed on a virtual QWERTY keyboard drawn on a 128×64 display.
  • Calculator — full expressions, 2×2 linear and quadratic solvers, and a y = f(x) graph plotter.
  • Space news — live headlines from the Spaceflight News API.
  • Games — Snake, Pong, Dice.
  • PPT remote — control PowerPoint on a laptop over Wi-Fi, driven by a small Python server in extensions/tamx_ppt_remote.

Game screens

How it is built

A single Arduino sketch running a state-driven menu system. loop() delegates to menuController(), which renders the active screen and dispatches button presses to per-feature handlers. Every feature is a self-contained module with its own draw and input functions, so adding one never touches the others.

The case is built in layers, so the battery can be swapped or the buttons re-routed without reprinting the whole shell.

Component layer one

Component layer two

Wiring

SSD1306 on SPI — MOSI 23, CLK 18, DC 17, CS 5, RST 16. Six buttons pulled up internally: up 25, down 13, left 14, right 26, select 12, back 27.

Assembly steps

Controls

ButtonAction
Up / DownScroll menus
Left / RightPage scroll, change value
SelectEnter / confirm
BackCancel, go back

What I learned

Constraints are the design. Fitting a usable keyboard and a readable graph plotter into 128×64 pixels taught me more about interface design than any web project has — every pixel has to earn its place, and every state transition has to be reversible with one button.

C++ · Arduino · ESP32 · SSD1306 (SPI) · Groq API