WOLFIEWEBROBOTICS / ELECTRONICS / BUILD LAB
BUILD LAB 01 · PROTOTYPE

Make the
message move.

A hidden magnet. Two moving axes. A message that glides across the board.

Build a Raspberry Pi + ESP32 magnetic message-board prototype, one tested stage at a time.

Try the interactive preview

Click to enlarge · AI concept illustration, not a tested build photo

Prototype reference design. The software is supplied for evaluation. ESP32 firmware, wiring and mechanics have not been bench-tested. Start in simulation. This version uses independent X/Y axes, not CoreXY.
NO HARDWARE NEEDED

Watch your message take shape.

This browser preview shows the planned route. It never connects to motors. The physical board moves slowly, pauses on each letter and glides across intermediate letters.

Type up to 32 letters and spaces.

A small machine with a big reveal.

Type a word in a Raspberry Pi browser. The Pi converts letters into coordinates and sends them over USB. An ESP32 drives two independent belt axes under a thin board. A hidden magnet pulls a lightweight token across the letters.

01 / Preview

Check the route before powering motors.

02 / Calibrate

Verify origin, direction and measured distance.

03 / Reveal

Add the token and spell your first message.

Inspired by Kat Shann’s OuijaCNC writeup. WolfieWeb’s code, layout and Cartesian reference design are separate. No microphone, AI response generation, or automatic homing is included.

Choose the parts before the code.

PartReference choiceImportant detail
Host + controllerPi 3 B+ or newer; original ESP32-WROOM DevKitPi runs the interface; ESP32 produces step pulses.
MotionTwo independent belt axes, two 200-step/rev bipolar motors, GT2 20-tooth pulleys2 mm belt pitch; 1/16 microstepping. Not a CoreXY belt path.
DriversTwo Pololu DRV8825 #2133 carriersMatch the documented pin labels and current-limit procedure.
Power + stopEnclosed 12 V 3 A supply; fuse and DC-rated cut-off; NC signal stopUSB powers logic. Motor power stays separate; grounds join.
ProtectionTwo 100 µF / 35 V electrolytic capacitors; two 10k pull-upsOne capacitor at each VMOT input. Pull up ENBL and GPIO32.
Mechanism + surface180 × 120 mm minimum clear travel; thin acrylic; captive magnets; lightweight tokenSoftware envelope is 160 × 100 mm. No CAD fabrication files supplied.

Mechanical assembly requires an existing Cartesian gantry or fabrication experience. Follow your rails’ assembly drawings. Secure the upper token’s magnets and reduce friction before increasing magnetic force.

Exact connection schedule.

For the original ESP32-WROOM DevKit and the specified DRV8825 carriers. GPIO numbers are not header positions. Remove power before wiring or changing motor connections.

SignalConnect to
X driver STEP / DIRGPIO25 / GPIO26
Y driver STEP / DIRGPIO27 / GPIO14
Both ENBLGPIO13, plus shared 10k pull-up to 3V3
Both RESET and SLEEPESP32 3V3
Both MODE0 / MODE1 / MODE2GND / 3V3 / GND (1/16 step)
Each VMOT / GNDProtected 12 V positive / motor ground; common ESP32 ground
Each motorOne measured coil pair A1/A2; other pair B1/B2
Signal stopGPIO32 → NC contact → GND; 10k from GPIO32 to 3V3
Each decoupling capacitor100 µF close to VMOT/GND, observing polarity
Never connect 12 V to the Pi or ESP32 logic rail. Use secure terminals for motor power. Keep a separate physical motor-power cut-off within reach. The web page’s idle-only Disarm button cannot stop an active sequence.

For the specified Pololu carrier only: current limit = 2 × VREF. Start at a 0.5 A limit (VREF 0.25 V) only with motors rated at least 0.5 A per phase. Follow the manufacturer’s measurement instructions. Clone carriers may use different sense resistors.

Build in six controlled stages.

  1. Assemble the axes. X moves the magnet carriage; Y moves the entire X rail. Leave at least 10 mm beyond the marked origin and free clearance throughout the 160 × 100 mm area.
  2. Check coupling by hand. With power removed, slide the lower magnet under a 2 mm test sheet. Keep the token light; try low-friction pads or captive ball bearings.
  3. Wire and limit current. Check carrier orientation, coil pairs, supply polarity and stop operation before applying motor power.
  4. Run simulation on the Pi. Install the pinned Python dependencies and launch the controller on loopback. No motion is sent by default.
  5. Upload and calibrate. Compile the supplied sketch with Arduino-ESP32 3.3.12. With motors off, place the carriage at the marked origin. Start hardware mode, confirm origin and arm. Test A without the token, then verify direction and measured distance.
  6. Add the overlay and token. Test A, I, S, Z before a full word. Re-zero after a stop, reset, power loss or manual movement.

Letter centres: A–I at x15…143 mm in 16 mm increments, y15; J–R on y45; S–Z on y75. Origin is top-left, +X right, +Y downward when viewed from above. The project README includes the full layout and calibration formula.

Expect slow motion: approximately 1 mm/s maximum on the major axis, with no acceleration planner. Software limits cannot detect stalls or an incorrect manual origin. Never leave the mechanism running unattended.

Download the project.

Download actual-size alphabet overlay

Includes the ESP32 sketch, Raspberry Pi Flask controller, simulation mode, letter mapping, setup guide and software tests. This uses a custom serial protocol, not G-code.

Download code + setup guide

Pi setup

sudo apt update
sudo apt install python3-venv
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python -m unittest -v
waitress-serve --listen=127.0.0.1:8080 --threads=2 app:app

Run from the extracted project directory. Open http://127.0.0.1:8080 on the Pi. The header must say SIMULATION. Use the README’s hardware-mode command only after the wiring checks.

Keep the controller on the Pi. Upload this article to Hostinger; do not upload the controller there. Use an SSH tunnel for a remote browser. Python target: 3.11+; reference packages Flask 3.1.2, pyserial 3.5, Waitress 3.0.2.

Before you call it a successful build.

These browser checkboxes record no test results and do not persist. Actual measurements must be taken on the physical build.

Study links & troubleshooting.

Original sources
Motor buzzes, scale is wrong, or token slips

Buzzing: power off and verify coil pairs and current limit. Wrong scale: check 1/16 straps and pulley pitch before changing steps/mm. Token slips: remove power and reduce surface friction or gap. Wrong direction: change the firmware axis inversion flag, upload again and re-zero. No serial access: close Serial Monitor and verify the device path and dialout permission.

No relevant full-build video has been verified for this original reference design. Hardware footage can be added after a bench build; the interactive route preview above is explicitly a simulation.

🤖 ↑Enlarged magnetic board schematic illustration