Canonical build checklist for Tiny Engineer. Each step: open the linked doc, finish the exit criterion, return here. Mechanical joins live in assembly.md; this page owns overall order.
Robot already on Wi-Fi? Jump to step 8.
Read this before you power anything. Optional why: Ch. 01 and Ch. 07. Full primer is parallel reading, not a gate — From Code to Circuits.
- Logic is 3.3 V. Servos and the amp need 5 V / ≥2 A. Never power servos from the ESP32 3.3 V pin.
- PCA9685 VCC (logic, 3.3 V) must not short to V+ (servo rail, 5 V).
- Every module shares GND.
- Speaker connects to SPK+ and SPK− only. SPK− is not ground.
- Leave the C3-Zero ceramic antenna clear of metal and dense plastic.
Shop → print → wire → flash → assemble (one run) → setup wizard → prove → agent hooks.
flowchart LR
shop[Shop]
print[Print]
wire[Wire]
flash[Flash]
mech[Assemble]
wiz[Wizard]
prove[Prove]
agent[Agent]
shop --> print --> wire --> flash --> mech --> wiz --> prove --> agent
- Open: the Safety card on this page.
- Until: you know 3.3 V vs 5 V, VCC ≠ V+, common GND, SPK− ≠ GND, and 2 A.
- Return here.
- Open: shopping.md.
- Until: cart in hand — electronics, M2 screws/nuts, 5 V / ≥2 A supply, data USB cable, and a print path (filament or a service order). Default servos: Tower Pro SG90.
- Return here.
- Open: 3d_models/README.md (home print; testers first) or 3d/order-parts.md (no printer).
- Until: printed set for your servo model ready.
- Return here.
- Open: hardware/wiring.md and the diagram wiring/Tiny Engineer.drawio.png.
- Until: pre-power checks pass (common GND; PCA9685 VCC = 3.3 V vs V+ = 5 V not shorted; OLED clock on SCL; speaker on SPK+/SPK− only). Harness stays on the desk.
- Return here.
- Open: flash.md.
- Until: firmware + LittleFS uploaded; serial boot OK; PCA9685 found; Move all to 90° or one
/test/servomoves a channel. Do not finish the Wi-Fi wizard yet. - Return here. Keep boards on the desk — do not seat the harness in the chest.
- Open: 3d/assembly.md from §1 through §19 (Head/Hat, centering, joins, channels, arms, lamp).
- Until: all joins done; PCA9685 channels plugged per the guide.
- Return here.
- Open: 3d/assembly.md §20.
- Until: wizard finished, power-cycled, robot on home 2.4 GHz Wi-Fi.
- Return here.
Open http://tiny-engineer.local/ (or the IP on the OLED) for the web UI.
curl http://tiny-engineer.local/health
curl -X POST "http://tiny-engineer.local/anim?name=ring"- Until:
/healthOK andringruns (motion; sound if LittleFS uploaded). If.localis slow, use the OLED IP orcurl -4. - Return here. Full API: api.md.
- Open: hooks.md (Cursor) or integration.md (Antigravity, Claude Code, raw REST).
- Until: optional — an agent event triggers an animation.
- Done.
| Symptom | What to try |
|---|---|
| What to buy? | shopping.md |
| Which wires / voltages? | hardware/wiring.md, hardware/pinout.md |
| What to print? | 3d_models/README.md |
| How to assemble printed parts? | 3d/assembly.md |
| Flash / serial / LittleFS | flash.md |
.local slow or fails |
OLED IP; curl -4 http://… |
OLED shows join AP / 192.168.4.1 |
Wi-Fi not saved or STA failed — finish assembly §20 |
| Welcome / ring silent (servos move) | LittleFS missing WAVs — pio run -t uploadfs (flash.md) |
| Hooks never move the robot | Node 18+, hook timeout ≥ 30, HTTPS tarball npx — see hooks.md |
| Servos twitch / board resets on motion | Power budget — hardware/power.md |
| Other boot / I2C / audio failures | hardware/testing.md |