Braino!

A 31-game educational console for young children, running as open firmware on a E32R28T-1 touchscreen board. No accounts, no telemetry, no SD card — every game is baked into flash.

v5.0.0 31 games 55 generated stills ESP32 · E32R28T-1 Flash 2,347,725 / 3,145,728 (74.6%) RAM 72,524 / 327,680 (22.1%)

Ready-made flashing is for the target board: use this E32R28T-1 / ESP32-32E board.

Launcher: Wide layout
Launcher: Wide layout
Counting
Counting
Flags: name the country
Flags: name the country
Shape Arith
Shape Arith
Trace: uppercase and digits
Trace: uppercase and digits
GRE Words: quiz
GRE Words: quiz
Maze
Maze
Settings: power
Settings: power
Profiles
Profiles
Scores: device best
Scores: device best
System Info: memory
System Info: memory
Screen saver
Screen saver

These 55 stills are rendered mock-ups, redrawn on a PC from the exact rectangles, fonts and colours in the C++ source — the board does not wire the panel's MISO line, so true screenshots are not possible. The flag artwork is the real pixel data the device draws from.

Install it from this page

Plug the board into a USB port and flash it here: no toolchain, no PlatformIO, nothing to download by hand.

Use the exact target board for the ready-made image. The web flasher below is built for the E32R28T-1 board. Buy or use this Amazon listing; other ESP32 boards may flash, but the display and touch pins will not match this firmware.

Web flashing needs Web Serial, so it wants desktop Chrome, Edge or Opera. Firefox and Safari cannot do it — the manual instructions below work everywhere. This page has to be served over HTTPS to reach a serial port. Takes about a minute over USB.
Flashing replaces the firmware; erasing wipes the child data. The touch calibration, the five profiles, their scores and their mastery data all live in the ESP32's NVS partition. A plain install leaves NVS alone; if the installer offers Erase device, that is what throws it away.

If your browser cannot, or you would rather use a terminal

Every build here is also a plain set of .bin files. With esptool installed:

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash \
  0x1000  bootloader.bin \
  0x8000  partitions.bin \
  0xe000  boot_app0.bin \
  0x10000 firmware.bin

What you need

Board E32R28T-1 (ESP32-32E, sold as a 2.8-inch "cheap yellow display"): ILI9341 320×240 panel, XPT2046 resistive touch, 4 MB flash, no PSRAM, onboard single-cell Li-ion charging. For the ready-made browser flash image, use this board on Amazon.
Cable A USB data cable. Charge-only cables are common and look exactly like a dead board.
Driver A CH340 or CP210x USB-serial driver, if your OS does not already have one.
Power Optional 3.7 V LiPo on the board's battery connector; the firmware reports the charge level.

Other ESP32 boards will accept the binary, but the pin map, the screen rotation and the touch controller are compiled in for this one, so a different board most likely gives you a blank screen. Build from source with your own pins in include/BoardConfig.h instead.

First run

  1. The device boots into Profiles. Pick a child, or Guest — Guest deliberately saves nothing.
  2. Resistive touch needs calibrating once: Settings → Calibrate, then tap the three targets.
  3. Wi-Fi is optional and used for one thing, the clock: Settings → Wi-Fi.
  4. Pare the launcher down to what one child needs in Settings → Games.

The 31 games

Every one can be hidden per child. Flags and the three US States games use spaced repetition, so a missed item comes back sooner and a mastered one fades into the background.

Tic-Tac-Toe
Tic-Tac-Toe

Tic-Tac-Toe

Tic-Tac-Toe

Play Xs and Os on a 3x3 board.

Game 01classic grid

Memory
Memory

Memory

Memory

Flip cards to find matching pairs.

Game 02match pairslower score is better

Math
Math

Math

Math

Practice arithmetic with timed rounds.

Game 03addition & subtractionhigher score is better

Multiply
Multiply

Multiply

Multiply

Practice multiplication facts.

Game 04times tableshigher score is better

Time
Time

Time

Time

Read the clock and pick the time.

Game 05read clockshigher score is better

Whack
Whack

Whack

Whack

Tap the mole before it escapes.

Game 06hit targetshigher score is better

Cinnamon Says
Cinnamon Says

Cinnamon

Cinnamon

Watch the pattern, then repeat it.

Game 07repeat patternhigher score is better

Microku
Microku

Microku

Microku

Solve tiny Sudoku-style boards.

Game 08mini sudokuhigher score is better

Shapes
Shapes

Shapes

Shapes

Match each shape to its outline.

Game 09match outlineslower score is better

Counting
Counting

Counting

Counting

Count objects, tap the number.

Game 10tap numberhigher score is better

Money
Money

Money

Money

Count coins and make change.

Game 11count coinshigher score is better

Fractions
Fractions

Fractions

Fractions

Match the pie chart.

Game 12pie sliceshigher score is better

Maze
Maze

Maze

Maze

Drag the dot to the exit.

Game 13drag dothigher score is better

Sorting
Sorting

Sorting

Sorting

Order numbers up or down.

Game 14order numshigher score is better

Color Mix
Color Mix

Color Mix

Color Mix

Mix two colours.

Game 15mix colorshigher score is better

Slide
Slide

Slide

Slide

Slide tiles into order.

Game 16number puzzle

Odd One
Odd One

Odd One

Odd One

Find the one that differs.

Game 17find differenthigher score is better

Shape Arith
Shape Arith

Shape Arith

Shape Arith

Add and take away shapes.

Game 18add & subtract

Fingers: count them
Fingers: count them
Fingers: show me N
Fingers: show me N

Fingers

Fingers

Count on two hands.

Game 19count on hands

Calendar
Calendar

Calendar

Calendar

Days and months in order.

Game 20days & months

Number Line
Number Line

Number Line

Number Line

Hop along a number line.

Game 21jump to number

Flags: name the country
Flags: name the country
Flags: capital bonus
Flags: capital bonus

Flags

Flags

Name the flag, then its capital.

Game 22guess the flag

US States
US States

US States

US States

US states and their capitals.

Game 23states & capitalshigher score is better

Trace: uppercase and digits
Trace: uppercase and digits
Trace: lowercase
Trace: lowercase

Trace

Trace

Trace big and small letters.

Game 24ABC abc 123

State Flags
State Flags

State Flags

State Flags

Name the state flag, then capital.

Game 25name the flaghigher score is better

State Maps
State Maps

State Maps

State Maps

Name the state outline, then capital.

Game 26name the outlinehigher score is better

Percent Circle
Percent Circle

Percent

Percent

Percentages on a circle.

Game 27circle partshigher score is better

GRE Words: quiz
GRE Words: quiz
GRE Words: study
GRE Words: study

GRE Words

GRE Words

Learn GRE vocabulary.

Game 28vocabularyhigher score is better

Dice
Dice

Dice

Dice

Throw one, two or three dice.

Game 29roll the dice

Coinflip
Coinflip

Coin Flip

Coin Flip

Spin a coin, best of 1, 3 or 5.

Game 30heads or tails

Elements: the periodic table
Elements: the periodic table
Elements: one element up close
Elements: one element up close
Elements: find it in the table
Elements: find it in the table

Elements

Elements

Explore the periodic table.

Game 31periodic tablehigher score is better

Apps, settings and sleep

The launcher, profiles, settings, Wi-Fi, scores, About, System Info and the screen saver are shown with the same generated stills as the games.

Launcher: Wide layout
Launcher: Wide layout
Launcher: Tall layout
Launcher: Tall layout

Runtime screen

Launcher

Wide and Tall home layouts with live profile, clock, Wi-Fi, BLE and battery status.

Profiles
Profiles
Profiles Pin
Profiles Pin
Profiles: per-child games
Profiles: per-child games

System app

Profiles

Boot-time player choice, five children, Guest mode that deliberately saves nothing, a PIN-guarded admin profile, and per-child game visibility only the admin can set.

Settings: device
Settings: device
Settings: power
Settings: power
Settings Admin
Settings Admin
Settings Pin
Settings Pin

System app

Settings

Device controls, brightness, screen saver and sleep policy -- readable by anyone, changeable only by the admin.

Wi-Fi and clock
Wi-Fi and clock
Time zone picker
Time zone picker

System app

Wi-Fi

Optional Wi-Fi for NTP time only, with a timezone picker for daylight-saving rules.

Scores: this player
Scores: this player
Scores: device best
Scores: device best

System app

Scores

Per-player best and worst scores, plus device-wide records and record holders.

System Info: memory
System Info: memory
System Info: BLE
System Info: BLE

System app

System Info

Live board, memory, network, BLE, NVS and watchdog diagnostics for hardware triage.

About: what the radios do
About: what the radios do

System app

About

Parent-readable documentation on the device, including exactly what the radios broadcast.

Nearby
Nearby

System app

Nearby

Opt-in, anonymous score sharing with other Brainos in range -- device tags only, never names.

Screen saver
Screen saver

Runtime screen

Screen Saver

Self-playing Pong before panel sleep, with rally colour mirrored on the case LED.

Privacy

The device collects nothing and sends nothing anywhere. No accounts, no telemetry, no analytics. Scores and mastery data live in the ESP32's own flash and never leave it.

  • Wi-Fi connects only to reach an NTP server, plus one lookup to ip-api.com to guess the time zone on first connect. You can skip Wi-Fi entirely.
  • Bluetooth LE is off by default. Switched on, it advertises a device name (Braino-<id>) and two bytes of the factory Bluetooth MAC — and the device shows you a hex dump of the exact bytes on air, read back from the same buffer that was handed to the radio.
  • Nearby play is a second opt-in on top of that, also off by default. Turned on, the beacon additionally carries which game is open and the best score for it, so consoles in the same room can see each other's records. No child name, no profile name, nothing profile-scoped: a peer is four hex digits of its own hardware id and nothing else, and there is no path from a score back to a child. Listening is passive, so a console that is only watching transmits nothing extra. Turned off, the two fields are absent from the payload rather than sent as zeroes.
  • This page talks to your board over Web Serial, inside your browser. The firmware is fetched from GitHub Pages; nothing about your device is sent anywhere.

Help wanted

Braino targets one board properly today. The CYD family has many variants that differ in ways that fail quietly — different backlight pins, different touch controllers, the same GPIO meaning different things. If you own one and want it supported, AGENTS.md has a written checklist for adding a board.

Much of this firmware was written by coding agents under human direction, so bug reports and code critique are especially welcome. If you spot a mistake, please open an issue — and if you can, say how you would fix it.

Open an issue · Contributing guide