Build guide · Stage 1 · Bluetooth

Build a robot that talks with the Anybody brain

A face on a tiny screen, a head that turns, an arm that waves, a light, and a touch pad. Your phone or laptop is its ears, its voice, and its link to the brain over Bluetooth. The shell is yours to design.

HK$220in parts at the listed prices, before shipping
9 partsplus a phone or laptop you already have
No solderingwith the pre-soldered board
Chrome + Bluetoothto flash, test, and talk

How Stage 1 works

The robot moves. Your phone listens and speaks.

The body has no microphone or speaker yet, so it stays cheap and simple. It talks to your phone or laptop over Bluetooth, and the phone talks to the brain over the internet.

The robot

ESP32-S3 body

Screen face, head servo, arm servo, light, touch pad. Runs only the moves in its body file.

Bluetooth LE

Your phone or laptop

Chrome page

Microphone, voice, and Web Bluetooth. Starts listening when you touch the robot.

HTTPS

The cloud

Anybody brain

Decides, replies, and calls tools: web search and shop search. Streams back words and moves.

  1. TouchYou touch the pad. The robot sends touch over Bluetooth.
  2. ListenThe page listens with the phone's microphone and turns your words into text.
  3. ThinkThe text and the robot's body file go to the brain. It answers, searches the web, looks up products, remembers, or moves.
  4. ReplyThe brain streams sentences with tags such as [face:happy] and [do:wave].
  5. Speak and moveThe phone speaks each sentence and sends face happy, do wave, led 30 90 255 to the robot.
  6. Safe on its ownUnknown commands are refused. If Bluetooth drops, the robot goes back to rest.

Voice from the robot

Pair a small Bluetooth speaker with your phone and hide it inside the shell. The voice then comes from the robot itself.

Next: Stage 1b

The same body with a microphone, a speaker, and Wi-Fi on the board, so it works without a phone. The brain and the body file stay the same.

Step 1 · Parts

Nine parts. About HK$220.

Each part shows a listing we checked and the exact type to look for. Press Live prices to check Google Shopping for Hong Kong again. Many listings are overseas shops that ship to Hong Kong, so shipping is extra. One Taobao or AliExpress order is usually cheapest, and electronics shops in Sham Shui Po usually stock servos, breadboards, wires, and capacitors.

Parts total

HK$220.46

Sum of the listings above, with two servos and both wire packs, before shipping. Prices as listed on 6 October 2026.

You also need

  • A phone or laptop with Chrome or Edge: Android, Windows, macOS, or ChromeOS. iPhones cannot use Web Bluetooth.
  • Power after flashing: a USB power bank or a 5 V, 2 A phone charger.
  • Scissors or a craft knife, glue or double-sided tape, a small screwdriver for the servo horns.

Nice to have

Step 2 · Wiring

Wire it with the USB cable unplugged

The breadboard carries two kinds of power. 5V runs the servos and the light. 3V3 runs the screen and the touch pad. Every part also needs GND.

Signal wires go straight to the board's left pins. Power wires go to the rails at the bottom.

  1. Board. Push the XIAO into the breadboard across the middle gap, USB-C facing out.
  2. Rails. XIAO 5V to the red + rail on one side and GND to the blue − rail next to it. XIAO 3V3 to the + rail on the other side. One short wire joins the two − rails.
  3. Capacitor. Across the 5V rails, close to the servos. The long leg goes to +, the striped leg to −.
  4. Servos. Brown to GND, red to 5V, orange to D0 for the head and D1 for the arm. Use male-to-male wires in the servo plugs.
  5. Light. DIN to D2, 5V to 5V, GND to GND. Use the in side of the board, not out.
  6. Touch pad. I/O to D3, VCC to 3V3, GND to GND.
  7. Screen. SDA to D4, SCL to D5, VCC to 3V3, GND to GND. Read the labels on your screen: some put GND first, some VCC first.
Before you plug in

Nothing from the 5V rail may touch a 3V3 pin or a D pin. Check the capacitor's stripe: backwards, it can burst. The screen must be the 4-pin I2C type.

Step 3 · Firmware

Flash it from this page

No Arduino setup. Chrome or Edge on a computer writes the Anybody Body firmware over USB.

  1. Plug the XIAO into your computer with a data USB-C cable.
  2. Press Install and pick the port named USB JTAG/serial or ESP32-S3.
  3. Wait until it says the installation is complete. The screen shows sleepy eyes and a name such as Anybody-1A2B. That is your robot waiting for Bluetooth. If the screen stays dark, press the R (reset) button once.
This browser cannot flash boards. Open this page in Chrome or Edge on a computer. Flashing needs a secure page (https).

No port in the list? Unplug, hold the B (BOOT) button, plug in, let go, and try again. Close any Arduino Serial Monitor: it keeps the port busy.

Prefer Arduino IDE

  • Boards Manager: esp32 by Espressif Systems, version 3.x
  • Board: ESP32S3 Dev Module or XIAO_ESP32S3
  • Tools: USB CDC On Boot: Enabled
  • Library Manager: U8g2 by oliver
  • Open the sketch, then Upload

v1.0.0 · Arduino core 3.3.12 · ESP32-S3 · BLE GATT · U8g2

Serial Monitor at 115200

The same commands work by typing: face happy, do wave, led 0 120 255, stop. Handy for testing without Bluetooth.

Step 4 · Test the body

Check every part before the shell

Power the robot, connect here over Bluetooth, and press the buttons. Each check turns green when the robot answers.

    Body file from the robot

    Connect to read it.

    Faces

    Moves

    Light

    Mode

    Events from the robot

    Touch the pad after connecting. You should see touch.

    Step 5 · Talk to it

    Touch the pad. Say hello.

    1. Open the live demo on the device that will be the robot's ears.
    2. Press the mic once and allow the microphone.
    3. Press Connect my robot and pick Anybody-…. It waves when it joins.
    4. Touch the pad and speak. Touch and hold to make it stop talking.
    5. Pick your language at the top of the chat. Child mode is on by default.

    Things to try

    • "Hello! What can you do?"
    • "Dance for me."
    • "今天香港天氣怎樣?" (it searches the web)
    • "Find me a cheap SG90 servo." (it searches shops and shows products, never pays)
    • "Remember that my favourite colour is green."

    Step 6 · Your shell

    Make its shell. The design is yours.

    Cardboard, a 3D print, a plush toy, LEGO, a paper cup. Anything works if it follows five rules. Make it look like a cat, a rocket, a dumpling, or your teacher's favourite mug.

    1A window for the face

    The picture on the screen is about 22 × 11 mm. Cut a 25 × 14 mm window and tape the screen behind it.

    2Head on the head servo

    The head turns about 50° each way. Leave room around it and 5 cm of slack on the four screen wires.

    3Arm on the arm servo

    Glue a light arm to the servo horn. It swings through about 120°, from down at the side to up high.

    4Touch through a thin wall

    The touch pad works through thin card or plastic. No metal or foil in front of it.

    5Let light and power out

    Put the light behind something thin or white, and keep the USB-C port reachable.

    Sizes to design around

    XIAO ESP32S321 × 17.8 mm Screen moduleabout 27 × 27 mm SG90 servoabout 23 × 12 × 31 mm, 32 mm across the tabs Half breadboardabout 83 × 55 mm Body boxat least 90 × 65 × 60 mm inside

    Start from our head box

    Printable template for a cardboard head box with a face window

    Print at actual size on A4, cut, fold, glue. Then draw on it, cover it, or throw it away and design your own.

    Download the A4 template

    Cardboard

    A cereal box and the template. One evening, no tools beyond scissors and glue.

    3D print

    PLA with 2 mm walls. Design around the sizes above and leave a door for the USB cable.

    Plush

    Open a seam, put the head servo in the neck, cut a face window, and stitch around the screen.

    LEGO

    Glue a servo horn under a 2 × 2 plate and build the head on top of it.

    Safe shells

    Small parts: not for children under 3. A grown-up builds it with younger children. Round off sharp edges. Keep the power bank where air can reach it, and never use a swollen or damaged battery. Avoid metal tins: they block Bluetooth and the touch pad.

    For makers

    Your body, same brain

    The brain learns what a body can do from its body file. Add a move to the firmware and to the body file, flash it, and the brain can use the new move the next time the robot connects. No change to the brain.

    Bluetooth part
    UUID
    Use
    Service
    8ebdad55-98c6-4622-93ff-67063ff407ee
    Anybody Body Protocol v1
    BODYread
    674ab5d3-427a-4d25-b050-c11e6fe22b45
    The body file, as JSON
    CMDwrite
    f4bd48ac-536d-4e13-8a00-ab6933a7a63a
    One text command
    EVTnotify
    069c1557-e669-4a98-b6e4-f20487ae3817
    Text events

    Commands and events

    • face neutral|happy|sad|surprised|sleepy|love|think
    • do shake|look_left|look_right|wave|dance
    • state idle|listen|think|talk · led r g b · led off · stop
    • Events: touch · touch_long · ok … · err … · done …
    // the body file this robot sends
    {
      "v": 1, "name": "desk-bot", "kind": "doll",
      "faces": ["neutral", "happy", "sad", ...],
      "actions": [
        { "id": "wave", "say": "wave the arm for hello or bye" },
        { "id": "nod", "say": "nod for yes" }  // your new move
      ],
      "light": true, "inputs": ["touch"],
      "limits": { "servo_deg": [20, 160] }
    }
    
    // in the sketch: the keyframes for the new move
    static const Key NOD[] = {{0, 70, 220}, {0, 110, 220}, {0, 90, 300}};
    ACTION("nod", NOD),

    The say text is what the brain reads to decide when to use the move. Keep each move short; the robot stops moving on its own if the link drops.

    Help

    When something doesn't work

    The screen stays dark

    Check that it is the 4-pin I2C type and that VCC goes to 3V3 and GND to GND, using the labels printed on your screen. Then swap SDA and SCL. The Serial Monitor at 115200 prints "OLED found" or "OLED not found" at start-up.

    The board restarts when a servo moves

    The servos pull more current than some laptop ports give. Power the robot from a power bank or a 2 A charger, check the 470 µF capacitor across the 5V rails, and keep the servo wires short.

    The light shows the wrong colour or flickers

    Some lights need a stronger data signal at 5V. Move the light's power wire from the 5V rail to the 3V3 rail. It gets a little dimmer, and this usually fixes it.

    Bluetooth cannot find the robot

    Use Chrome or Edge, turn Bluetooth on, and make sure the screen shows the robot's name. Only one device can connect at a time, so close the tester or the demo in other tabs. iPhones and Safari cannot use Web Bluetooth.

    Touching the pad does nothing

    I/O goes to D3, VCC to 3V3. Leave the A and B jumpers on the touch board open: the default sends a high signal while you touch it. Press the mic once in the demo first so the page can use the microphone.

    The install button doesn't see the board

    Use a cable that carries data, not a charge-only cable. Hold the B button while you plug in, close other programs that use the port, and try again.

    The voice comes from the phone, not the robot

    That is how Stage 1 works. Pair a small Bluetooth speaker with the phone and put it inside the shell. Stage 1b puts a speaker on the board.

    Stage 1 pass test

    Done when all six are ticked

    The last check is the Stage 1 test on the Anybody roadmap. Ticks stay in this browser.