GrowBot

Build your GrowBot

No coding, soldering or prior experience needed.

Building a different body?

Build in 30 min or free

How are you building?

Pick one to see your steps.

Stuck? Ask your AI. Paste the guide into ChatGPT or Claude.
Download
A finished GrowBot standing on its two black legs, red and teal body, phone mounted camera end up as its face, showing the creature.
body design: Todd Murphy
00Your computer + robot phone

1 · Setup computer

A desktop or laptop with Chrome or Edge, to connect to your Pico. Keep this guide in one tab from step 02 to step 09, so the pairing scan can save your robot's Wi-Fi setup password.

Checking this browser…

2 · Robot phone

A separate phone that passes the GrowBot check.

On that phone, open: growbot.dev/check

Trouble with this step?

The status above checks this computer only. Run the phone check on the phone you’ll mount on the robot.

If browser USB setup is blocked, the manual Thonny option is in step 02.

01Get the partsCheck your kit
  • Raspberry Pi Pico 2 W with headers attached ×1 · Amazon
  • Waveshare Pico Servo Driver ×1 · Waveshare / Amazon
    want to use another board?
    The Kitronik Robotics Board (5329) is also tested; socket numbers and minimum voltage differ. The Kitronik Simply Robotics (5348) needs GPIO_PINS = {1: 15, 3: 13} in PicoRobotics.py (sockets 0 and 2). For ESP32, use the existing ESP32 build guide. This walkthrough shows Waveshare.
  • MG90S metal-gear micro servos ×2 · Amazon — this Miuzei pair fits; horns and screws included.

In your kit

  • Raspberry Pi Pico 2 W, headers already soldered
  • Waveshare Pico Servo Driver
  • 2× MG90S metal-gear servos, with horns and screws
  • 4×AA battery holder
  • 3D printed body, backplate and two legs
Raspberry Pi Pico 2 W, Waveshare Pico Servo Driver, and two MG90S servos with horns and screws.
Pico · Waveshare carrier · two MG90S servos

Body, power and tools

  • Body + legs · STL files / cut-from-anything template
    Order the body prints instead
  • 4× rechargeable lithium AA batteries · Amazon — tested rechargeable pack.
    Start fresh or fully charged. Fresh alkaline AAs work but do not last as long.
  • 4×AA battery holder · Amazon
    Low-profile, no cover, exposed wire ends. Covered holders won’t fit.
  • Double-sided foam tape
  • Small Phillips screwdriver (×) — servo screws
  • Tiny flat-head screwdriver — battery terminal
Printed body and legs, the low-profile four-AA holder with no cover and red and black bare leads, foam tape, and tools.
Battery holder: no cover, exposed wire ends.

You add

  • 4× AA batteries: rechargeable lithium recommended (the pack we use). Fresh alkalines work but do not last as long.
  • Double-sided foam tape
  • Small Phillips screwdriver, for the servo screws
  • Tiny flat-head screwdriver, for the battery terminal
Trouble with this step?

Something is missing or broken. Email info@growbot.dev with a photo and your order number.

My Pico has no header pins. Get the version with headers already soldered on for this build.

Can I use SG90 servos? Use the linked MG90S pair; its metal gears and fit are tested here.

I have a different carrier board. Open “want to use another board?” above for the existing alternatives.

02Wake the board

Start with the Pico on its own. Leave the Waveshare aside.

A Pico by itself, with a USB cable entering its own port while a finger holds BOOTSEL.
BOOTSEL button + USB port

2A · Install MicroPython

Already installed? Skip to 2B.

  1. Hold BOOTSEL while connecting the Pico’s own USB port to your computer. Release it.
  2. Open the drive called RP2350.
  3. Download MicroPython (.uf2) and drag the downloaded file onto RP2350.
  4. The drive disappears. That’s expected; leave USB connected.
Find BOOTSEL / no drive?

No RP2350 drive. Unplug, hold BOOTSEL and reconnect. Use a data-capable USB cable in the Pico’s own port.

A finger holding the Pico’s BOOTSEL button beside its USB connector; this reference photo has the carrier already fitted.
BOOTSEL is on the Pico. This photo shows a fitted carrier; leave yours off until step 04.
2B · Connect and set up Browser installer
Checking this browser…
Manual option By hand, with Thonny

Install MicroPython in 2A first. Disconnect this page from the Pico, then open Thonny.

Connect: Run > Configure interpreter > MicroPython (Raspberry Pi Pico). Select the Pico’s serial port (usbmodem… / COM…, or auto-detect).

Download the body kit. Open each file from your computer, then File > Save As > Raspberry Pi Pico:

  • PicoRobotics.py → PicoRobotics.py
  • act_engine.py → act_engine.py
  • secrets.example.py → enter your Wi-Fi name and password, then save as secrets.py
  • relay_chip.py → main.py

Restart the Pico and read its actual pairing code in the Shell. Keep USB connected for step 03.

This route skips travel Wi-Fi (the robot's own setup network for new places). The USB installer adds it.

Command-line alternative

With Python 3 installed, run pip install mpremote. In the extracted kit folder, copy secrets.example.py to secrets.py and enter your Wi-Fi details. Close Thonny and disconnect the browser first.

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
mpremote repl

Read the pairing code in the output and leave USB connected.

Trouble with this step?

No Pico in the picker. Finish MicroPython installation in 2A, try a data-capable cable, and close Thonny or other USB tabs.

Connection not confirmed yet. Keep USB connected. Open “GrowBot already installed?” to restart and check, or copy diagnostics under Technical details.

Need to change Wi-Fi? Edit the network name and password, then use “Save Wi-Fi & install GrowBot”. This writes the credentials and GrowBot files again.

Network compatibility. Pico uses 2.4 GHz Wi-Fi. If your router has separate network names, use its 2.4 GHz name. A delayed or failed connection alone does not identify a password or band problem.

No pairing code appears. Open Technical details and copy diagnostics. If using Thonny, check its Shell.

03Say hello

Leave USB connected.

Connect in step 02, or enter the code from your manual setup.

Once online, continue to step 04.

Trouble with this step?

Still waiting for online? Check the pairing code and USB power. Return to step 02 to check the saved connection.

Using the manual setup? Enter the actual code from Thonny or the terminal above.

The computer uses another network. That’s fine; both it and the Pico need an internet connection.

This checks the connection without moving the servos.

04Mount and wire
POWER OFF · Waveshare switch OFF. Unplug USB.

4A · Insert the Pico

Push the Pico into Waveshare, matching the USB marking.

Pico 2 W seated on the Waveshare Pico Servo Driver with its USB connector aligned to the board’s printed USB marking.
Match the USB ends. Leave the cable unplugged.

4B · Mount the parts

The printed plate laid flat and horizontal, with SERVO BOARD moulded into one end, GROWBOT and two screw holes in the middle, and BATTERY at the other end.
SERVO BOARD at one end, BATTERY at the other
  • Waveshare over SERVO BOARD, header pins up, on double-sided foam tape.
  • Battery holder over BATTERY, also on foam tape.
  • Fit the servos with shafts pointing outward. Secure them with hot glue or screws.
Waveshare carrier, two servos and the low-mounted battery holder in the printed body plate, before the legs are attached.
Board + battery taped down; servos secured.

4C · Connect the battery holder

  • Red wire → board + / VIN
  • Black wire → − / GND

Use the carrier’s power terminal, never the Pico’s own pins.

Battery wires secured in the Waveshare screw terminal: red on 4.5–26V positive, black on GND.
Red → + terminal · black → GND

4D · Plug in the servos

Left and right are the robot’s own. With the plate in front of you and the batteries at the bottom, they are exactly as marked here:

Looking down at the plate with the batteries at the bottom, the servo on the left marked LEFT and the servo on the right marked RIGHT.
  • Left servo → socket 0
  • Right servo → socket 1
  • Other sockets stay empty.
  • Match the wires to the terminal colours: brown, red, yellow.
Servo plugs in Waveshare sockets 0 and 1, with wire colors matching the printed G V S order.
Sockets 0 and 1

4E · Put the batteries in

  • Slide 4 AA cells into the holder, each one matching the + and − marks.
  • We use these rechargeable lithium AAs, charged full.
  • Fresh alkalines work too. They just don’t last as long.
One tired battery causes most problems. Use four fresh or fully charged cells, all the same kind. A single weak cell is what makes servos twitch and the board restart later.

Leave the Waveshare switch OFF until step 05.

Trouble with this step?

A part feels loose. Check the foam tape under the board and holder, and the glue or screws holding each servo.

My servo wires are different colors. Match the board labels: G = brown/black, V = red, S = yellow/orange/white.

The plug colors don’t match the labels. Keep power off and turn the plug around. Check that all three pins are covered.

05First movement
Switch the board on and both servos will run a short movement check. It ends with both parked straight, which is how the legs go on in the next step.

Before you switch on

  1. Be sure the USB cord is unplugged from the Pico. From here on the robot runs on its batteries.
  2. Look down at it with the batteries at the bottom.
    Looking down at the plate with the batteries at the bottom, the servo on the left marked LEFT and the servo on the right marked RIGHT.
    in this orientation left and right reflect what GrowBot calls its own left and right leg
  3. Switch the carrier board on. The movement check starts by itself.

A good movement check does this quickly:

  1. both servos centre to 90° at the same moment
  2. the right servo alone sweeps back and forth
  3. the left servo alone sweeps back and forth
  4. both sweep together
  5. both settle at 90° and go quiet

Try it one more time to confirm.

Trouble with this step?

Nothing moves. Board switch on? Fresh batteries? Servos only ever move on battery, never on USB alone. On a carrier board other than the Waveshare or the Kitronik 5329, the driver may be talking to the wrong pins: see want to use another board? in the parts list.The kit’s Waveshare board needs no pin changes, so check that both battery wires are held tight in its screw terminal (4C).

Only one moves. Reseat the still one’s plug, and check it is in socket 0 or 1, no other socket does anything. Still dead? Swap the two servos between the sockets: if the fault moves with the servo it is the servo, if it stays put it is the socket.

They twitch and the board restarts. Weak power. Four fresh or fully charged AAs, or a 5-6 V supply that can give 2 A.

A servo buzzes hard or runs hot. Power off, check the plug isn’t shifted over by one pin.

It ran once and never again. The sequence only runs at power-on. Switch the board off, wait a second, switch it on.

06Attach legs to servos

The movement check ends by parking both servos at 90°, so you attach the legs right after it.

  1. Let the movement check finish. Both servos end up parked at 90°, ready for the legs.
  2. Attach each leg by dropping the horn into the slot.
    A servo horn seated in the slot of a printed leg, held by a screw.
    horn sits in the leg’s slot

    Need help with the servo horn? Watch a builder do it.

  3. Then screw it onto the servo shaft so the leg sits perpendicular to the body.
    Both printed legs screwed onto the servo shafts, sticking straight out at right angles to the body, batteries at the bottom.
    both legs perpendicular, batteries at the bottom

Now switch the board off and on once more. This is what the movement check should look like, check your legs move the same way.

the movement check with the legs on

✓ Success looks like: right leg first, then left leg, then the two of them wiggling together in opposite directions.

Wrong leg first? Switch off, swap the two servo plugs, then switch on again.

Trouble with this step?

A leg sits crooked at rest. Pop it off the shaft, rotate it one tooth, re-seat on the next 90° hold.

The leg works loose. The small screw is not optional.

A leg moves the other way to the video. The two servo plugs are swapped. Switch off, swap them between sockets 0 and 1, then switch on again.

It restarts part way through. Low batteries: the servos pull the voltage down and reset the Pico. Four fresh or fully charged cells.

07Straighten the legs (trim)
  1. Switch the robot off and on, then put its shell on: battery end first (it only fits that way), then press the other end down.
    With the shell on, switch it off and on with a pencil tip through the side slot, or pop the shell off and on the same way.
  2. Lay it face down, then tap This puts both servos at 90°.
  3. Look at it from the side. Tap − or + until the near leg hides the far one and both point straight up.
    Example of correct trim calibration
    Left0°
    Right0°
Trouble with this step?

It won’t connect. Is the robot on, on batteries? The code must match step 02.

A leg runs out of taps. Its horn is a whole tooth off. Turn it one tooth on the shaft (step 06), then try again.

08Mount the phone

Secure your phone with an elastic band or foam tape. Screen facing out, camera at the top, away from the batteries.

Common mistake: mounting it upside down. Put a small sticker at the top of the shell so you always remember.

A finished GrowBot standing on its two black legs, phone mounted camera end up, away from the batteries.
09Pair your phone

On the phone that will ride the robot, scan this. It pairs the robot, brings this robot’s saved trim along (the newer saved trim wins), and saves its Wi-Fi setup password from this install. That saved password is its robot passport. After that, just open growbot.dev on that phone; it remembers.

Your code fills in here once step 02 or 07 has your pairing code.

Reading this on that phone? Open GrowBot here.

Each time you open GrowBot, it connects to its legs by itself.

Not standing up?

In GrowBot, open Settings and tap Pair.

Still nothing? Switch the robot off, wait 5 seconds, switch it on, wait 20 seconds after its wiggle, then reload growbot.dev.

The robot remembers up to 8 Wi-Fi networks. Somewhere new, open GrowBot Settings and tap robot somewhere new?. The phone needs the passport saved from this install; the page guides you to join the robot’s setup network and enter the new Wi-Fi password.

Legs look uneven? Redo step 07, save after checking the legs, then scan this code again.

Still off, or a leg turns the wrong way? Optional fine-tuning tools.

✓Checkpoints
you didwhich proved
computer installer check passedthis browser can offer USB setup; Pico access is checked when you connect
pairing code printedthis board has an identity; Wi-Fi and server connection are checked separately
Pico online check passedthe relay reports that board online; movement is checked later
both servos movedpower + wiring + ports correct
legs on at 90°both legs start straight, so the walk begins from a known shape
right leg first, then lefteach command reaches the servo it names
legs line up, seen from the sidetrim saved: both legs match, so the walk goes straight
body assembledready to wake

Anything on this list failing? Its step above has a "trouble with this step?" panel, and the 🤖 box at the top of the page knows this whole guide.

Special thanks to Jason Taylor for early contribution to this build.