GrowBot · Body Build

Give the creature a body, two servo legs, a phone for a brain. No terminal, no coding, no prior hardware needed.

≈30 min, ~$30 parts, no soldering required

The finished GrowBot body standing on its two red servo legs on a desk, the phone mounted as its face and mind.
the finished body: two servo legs, a battery pack, and your phone as the whole mind
🤖 Stuck? Copy this into ChatGPT, Claude, or any AI and ask. It knows the whole build.
⬇ Download
01

What you need

Which battery should I get?
They all need ~5-6 V and ≥2 A, the servos spike when they move, so a weak supply browns out the Pico (the legs twitch then it resets).
  • The main pick, no solder: 4× AA lithium (Energizer Ultimate type ↗, the 1.5 V single-use kind) in a holder with switch ↗. Strong fast legs, hours of hard play, and it stays strong even when a leg gets grabbed or the pack runs low. ⚠️ Exactly these. NOT "rechargeable lithium" / USB-rechargeable 1.5V AAs (they cut out the moment the legs push hard), and NEVER 3.7 V "14500" AA-size cells (four of those will destroy the board and servos). Plain alkaline AAs are fine to start: heavier, weaker legs, and they fade sooner, swap all four when the walk goes lazy.
  • Advanced, compact + rechargeable: a 1S LiPo, 1000 mAh or more ↗ + a 5V/2A charge-boost board (example board ↗, or search "5V 2A lithium charge-boost / IP5306"). Charges over USB, puts out a stiff 5 V. ⚠️ Needs a little soldering (LiPo + board to the power input). ⚠️ The boost board's battery input is for a single 3.7 V LiPo only, never wire AA cells into it. Shortcut: a bare 1S LiPo straight in (no board) also runs it, legs a bit weaker; recharge it with a ~$2 TP4056 USB-C module ↗ and never drain it too low.
  • Already own a power bank? A small 5 V / 2 A USB power bank (power bank ↗) works: neatest is a solderless USB-C to screw-terminal adapter (~$10 ↗, pick one that says "C-to-C compatible / 5 V output", or use the bank's USB-A port), or cut a spare USB cable and strip the red (+5 V) and black (GND) wires into the board's power input (ignore the data wires). Legs a bit softer at 5 V, and some banks switch themselves off when the robot rests.
The build is solder-free with 4×AA (the main path) or a power bank + adapter; the LiPo + board is the compact rechargeable upgrade.
02

Power & signal

POWER IN 4×AA lithium or LiPo + boost + RAIL (5-6V) PICO 2 W logic + Wi-Fi 2× SERVO MG90S / SG90 GP0 · GP1 signal only GND, tie together: battery − · Pico GND · both servo −
FIG. 1: solid = power, dashed = signal. One rule: servos draw power from the battery rail, never the Pico's pins.

Carrier board (the easy path): the board already IS this circuit. Screw the battery holder's red wire into its + power terminal, black into -, done.
Direct wire (advanced): you build this circuit yourself, wiring map in step 03.
03

Connect the servos

Two ways, pick ONE.

1 · Easy · carrier board (what this guide uses)

Important: The front of the robot is the phone screen, mounted with the camera up top. That one choice fixes left/right, which is the robot's own left and right when looking forward from its screen camera (known as egocentric).

Top-down view of the plate: TOP marked at the top, L on the left servo, R on the right servo, the carrier board up top, the four AA lithium batteries at the bottom.
FIG. 2A: L and R are the robot's own sides. TOP is up when it stands, batteries ride the bottom.

Mount the two servos flat, shafts pointing out, then plug them into the board:

  • left servo → port 1
  • right servo → port 3
  • leave port 2 empty (it is dead)

Each plug: orange wire on SIG, brown on GND. The board prints both.

Now test it. Power the robot off, then on. Watch the wake-up wiggle: it moves the right leg first. If the left twitches first, swap the two plugs and you are set.

2 · Advanced · direct wire (no board; experimental)

USB PICO 2 W PIN 1 · GP0 · LEFT signal (orange) PIN 2 · GP1 · RIGHT signal (orange) PIN 3 · GND · both grounds (brown) top-left corner · USB at top
FIG. 2B: signal + ground only on the Pico's top-left corner. Both red + wires → the battery rail (FIG. 1), never a Pico pin. Not yet hardware-tested.
Board compatibility
  • Tested: Kitronik Robotics Board (5329), plug-and-play (what this guide uses).
  • 🟡 Other PCA9685 boards (e.g. Waveshare Pico Servo Driver, or a generic PCA9685 breakout): auto-detected if wired to GP8/GP9, otherwise set the pins/address at the top of PicoRobotics.py.
  • 🟢 ESP32 (optional path): works, see the community ESP32 guide by olie-o ↗.
  • ⚠️ Direct-wire, or another controller (Pi, other Wi-Fi MCUs): experimental, port to PROTOCOL.md and pass conformance.html.
04

Assemble the body

Top-down layout on the plate: carrier board with the Pico on one side, both servos flat in the middle with shafts out, the 4xAA battery pack on the other side.
⚠ Battery pack at the BOTTOM when it stands, screen + camera facing UP.FIG. 3: board on one side, servos flat in the middle (shafts out), power pack on the other. Leave the legs off, you glue them on at 90° in step 06.
05

Flash & install

The only computer step (laptop or desktop, your phone is the brain later). Two stages: Step 1 puts MicroPython on the board, Step 2 adds GrowBot's code.

↓ Download the kit (firmware, runtime & 3D prints)
1
Put MicroPython on the Pico. Once, skip if it already runs MicroPython. Hold the white BOOTSEL button, plug in USB, let go, a drive called RP2350 appears.
Hold the BOOTSEL button while plugging the Pico into USB [ image: hold BOOTSEL · plug in USB · let go ]
Drag the MicroPython runtime (.uf2) onto that drive. It reboots and the drive vanishes, now it runs MicroPython.

This is the only drag step. After it the Pico isn't a drive, so the code loads a different way (Step 2).

Step 2 · Add your Wi-Fi + GrowBot's code. The robot joins your Wi-Fi so your phone can reach it. This installs three files, PicoRobotics.py, act_engine.py, and the robot program relay_chip.py (saved as main.py), plus your network in secrets.py.

Easiest In your browser, one click
Free app Thonny, no terminal

A free editor for these chips. thonny.org ↗

  1. Open Thonny → bottom-right, pick interpreter MicroPython (Raspberry Pi Pico).
  2. Unzip the kit. File → Open PicoRobotics.py (in firmware/) → Save as… → Raspberry Pi Pico, same name.
  3. Same for act_engine.py.
  4. Open secrets.example.py, type your Wi-Fi name + password, → Save as… → Raspberry Pi Pico, name it secrets.py.
  5. Open relay_chip.pySave as… → Raspberry Pi Pico, name it main.py.
  6. Unplug/replug. In the shell, watch for PAIRING CODE: gb-…, that's your code for step 08.
Command line mpremote, terminal

Needs Python 3, then pip install mpremote. First copy secrets.example.pysecrets.py and put your Wi-Fi in it.

mpremote cp PicoRobotics.py :PicoRobotics.py
mpremote cp act_engine.py   :act_engine.py
mpremote cp secrets.py      :secrets.py
mpremote cp relay_chip.py   :main.py
mpremote reset

After reset, the serial output prints PAIRING CODE: gb-…, your code for step 08.

06

Center & attach the legs

Unplug USB, power on the battery. On every power-up the robot first runs a quick leg check:

  • 1 · CENTER, both to 90 (straight out)
  • 2 · RIGHT, right leg only (port 3)
  • 3 · LEFT, left leg only (port 1)
  • 4 · BOTH, both sweep at the same time
  • → HOLD, parks both at 90 for a moment, then relaxes and joins your Wi-Fi

Now attach the legs. No glue. Each leg has a slot for a servo horn (the plastic arm that came with your servo). Drop the horn into the slot, sit the leg on the servo shaft pointing straight out, then screw it down tight with the small screw from the servo bag.

Close-up: a black servo horn seated in the slot in the printed leg, held by a screw.
FIG. D: horn sits in the slot, screw it tight.
The printed leg attached to a servo, pointing straight out from the shaft.
FIG. E: leg on the servo, pointing straight out.

The servos park at 90 during the check, so a leg screwed on straight now is straight for the walk. Ended up crooked? Pop the horn off the shaft and re-seat it a tooth over. No-printer legs? Those have no slot, so glue that leg to a horn instead.

07

Verify

Glue set? Power-cycle and watch the legs run the 4-check again:

symptomfix
nothing movespower on? (battery + switch). PicoRobotics.py on the Pico?
only one leg movesreseat the still leg's plug, legs use GP0/GP1 (ports 1 & 3)
"RIGHT" waves the LEFT legthe two servo plugs are swapped
a leg sits crooked at restglued off-90, pop it and re-glue while it holds 90
buzzing / jitteryweak power, use fresh 4×AA (lithium best) or a solid 5-6V ≥2A supply

TABLE 2: both legs straight at rest + even sweeps = done. ✅

08

Connect your phone

Your phone becomes the brain, voice, face, and walking. It finds the robot by its pairing code, through the cloud, so the phone does not need to be on the same Wi-Fi (cellular works too).

  1. Battery on. After the leg check it joins your Wi-Fi (~10 s).
  2. On your phone, open the controller:
  3. Type your pairing code, then Wake robot:
    gb-……
    from step 05, or read it off the robot's serial output
  4. A green dot means it's connected. Tap Connect, then wiggle, the legs move. Manual, Policy & voice are now live.

No green dot? Give it ~20 s after power-on. Check the robot's network is 2.4 GHz and the code matches, all lowercase (phone keyboards auto-capitalize). The phone itself does NOT need the same Wi-Fi. Power-cycle the robot to re-show the code on serial.

Questions or stuck? info@growbot.dev · join the Discord