The Micro Wheeled-Leg Robot hosts a complete browser-based remote-control interface served directly from ESP32 flash memory — no app download or internet connection required. Once you join the robot’s access point and navigate to its IP address, a WebSocket connection is established between your browser and the on-board WebSocket server running on port 81. Every joystick movement, height adjustment, and button press sends a small JSON message over that socket, which the firmware parses in real time through theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/MuShibo/Micro-Wheeled_leg-Robot/llms.txt
Use this file to discover all available pages before exploring further.
RobotProtocol::parseBasic() handler.
Connecting to the Robot’s WiFi
The robot starts in Access Point (AP) mode by default.Network Credentials
SSID:
Password:
Robot IP:
WLROBOTPassword:
12345678Robot IP:
192.168.1.11Recommended Browsers
Chrome or Firefox on Android, iOS, Windows, macOS, or Linux.
The interface uses standard WebSocket APIs — no plugins required.
The interface uses standard WebSocket APIs — no plugins required.
- On your device, open WiFi settings and select WLROBOT.
- Enter the password 12345678 and wait for the connection to establish.
- Open Chrome or Firefox and go to http://192.168.1.11.
- The robot’s control page loads from ESP32 flash. The page opens a WebSocket connection to
ws://192.168.1.11:81automatically.
The web interface is served by a
WebServer instance on port 80. All control traffic flows through a separate WebSocketsServer instance on port 81. Both run concurrently on the ESP32 and are polled every loop iteration by web_loop().Control Interface Overview
Once the page loads and you have pressed “Robot go!” (see Startup), the following controls are available:| Control | WebSocket field | Description |
|---|---|---|
| Robot go! button | stable = 1 / 0 | Enables or disables the balance controllers. Press while holding the robot upright — wheels touching the ground. |
| Joystick X axis | joy_x (integer) | Yaw / turning left and right. Positive values rotate clockwise. |
| Joystick Y axis | joy_y (integer) | Forward and backward movement. Passed through lpf_joyy (Tf = 0.2) before reaching the speed controller. |
| Height slider | height (32 – 80) | Leg extension level. 32 = maximum squat, 80 = fully extended, default = 38. |
| Jump | dir = “jump” → “stop” | Triggers the jump sequence — see below. |
| Directional buttons | dir = “forward” / “back” / “left” / “right” / “stop” | Discrete movement commands (supplementary to joystick). |
Leg Height and Servo Positions
Theheight value maps linearly to servo positions using the formulas defined in leg_loop():
| Servo | Minimum position | Maximum position |
|---|---|---|
| ID 1 (left) | 2110 | 2510 |
| ID 2 (right) | 1586 | 1986 |
height = 38 the servos sit near the low end of travel, keeping the centre of mass low for stability. Increasing height raises the body and shifts the balance dynamics — the firmware compensates automatically via the adaptive speed gain.
Jump Maneuver
The jump is a timed open-loop leg sequence triggered by sendingdir = "jump" followed by dir = "stop". The firmware detects the transition (dir_last == JUMP and dir == STOP) and executes jump_loop():
Full extension
Both servos are commanded to the maximum extension equivalent to
height = 80 at maximum speed and zero acceleration limiting. This is the “push-off” phase that launches the chassis upward.Retraction (~30 loop cycles later)
After
jump_flag reaches 30 (approximately 30 ms at loop speed), the legs retract to mid height (height = 40 equivalent) to prepare for landing.WebSocket JSON Format
Every control update from the browser is a JSON object. The firmware’swebSocketEventCallback deserialises it with ArduinoJson and routes it to rp.parseBasic(). A representative message looks like this:
| Field | Type | Valid values | Notes |
|---|---|---|---|
mode | string | "basic" | Selects the parseBasic() handler |
dir | string | "forward", "back", "left", "right", "stop", "jump" | Maps to QR_State_t enum (0–5) |
height | integer | 32 – 80 | Leg extension; default 38 |
roll | integer | negative/positive | Roll compensation offset |
linear | integer | negative/positive | Forward speed bias |
angular | integer | negative/positive | Angular speed bias |
stable | integer | 0 or 1 | Enables (1) or disables (0) balance output |
joy_x | integer | negative/positive | Yaw axis; fed into yaw_loop() |
joy_y | integer | negative/positive | Speed axis; filtered by lpf_joyy |
STA Mode — Join an Existing Network
By default the robot creates its own hotspot. To connect it to a home or lab network instead, switch it to Station (STA) mode:Switch the WiFi init call
In
wl_pro_robot.ino, comment out WiFi_SetAP() and uncomment set_sta_wifi() in setup():In STA mode you can connect multiple devices to the robot simultaneously through your router, and the robot has internet access if needed for future firmware features. AP mode is simpler and requires no router.