Desk Buddy Web
Browser control panel
Desk Buddy is a full ecosystem — hardware, firmware, cloud, and AI — all connected over MQTT.
Every piece of the system communicates through a single MQTT broker. When you send a command from Desk Buddy Web, it travels as a JSON message to the ESP32 on your desk. Requests that need intelligence — object detection, motion planning, language — are routed to the Desk Buddy AI server.
Browser control panel
Dedicated account / user
Servos · camera · firmware
Language · vision · planning
Every action is a JSON message published to your device's command topic. The firmware replies with in_progress then completed (or failed). Every message includes a unique action_id so you can correlate requests and responses.
esp32_5/test
Send commands to the arm
esp32_5/HEARTBEAT
Live servo angles & telemetry
baseRotate — spin the 360° continuous baseservo — move elbow, wrist, or twistgripper — grab, drop, soft hold, or set anglecontrolik — inverse kinematics by distanceperch — move to stored rest positiondetect_object — vision: find objects by phrasedetect_color — vision: identify dominant colorsphoto — capture image from onboard cameracalibrate — save hover & perch calibrationsota_update — remote firmware update over Wi-Fi{
"action": "servo",
"action_id": "20",
"servoName": "ELBOW",
"position": 135,
"speed": 10,
"sender": "ai_server"
}
{
"action": "baseRotate",
"action_id": "69",
"controlType": "MAGNET",
"direction": "RIGHT",
"speed": "slow",
"value": 3,
"sender": "ai_server"
}
Desk Buddy is built entirely from off-the-shelf components. No custom PCBs, no proprietary parts — everything can be sourced independently.
The brains of Desk Buddy. Handles Wi-Fi, MQTT, servo control, and onboard camera capture — all in one compact module.
Standard hobby servos for elbow, wrist, and twist. Each moves 0–180° with configurable speed.
A continuous rotation servo drives the base. Controlled by magnet count, encoder ticks, or by homing to one of 12 origin magnets.
Servo-driven gripper with GRAB, DROP, and SOFTHOLD presets, plus raw angle positioning.
The S3 Cam module captures images on demand for object detection, color detection, and AI vision tasks.
Frame, brackets, and power supply are all generic and available from standard hobby and electronics suppliers worldwide.
Base rotation + elbow + wrist + twist — plus a gripper end effector.
Instead of HTTP's request/response model, MQTT uses a broker as a central hub. Clients publish messages to a topic and subscribers receive them instantly — no polling, no overhead. For Desk Buddy, the web app publishes a JSON command, the broker delivers it to your ESP32, and the ESP32 publishes its reply back — all in under a second.
No broker to install. Just point your ESP32 at the host and use your credentials.
All traffic is encrypted in transit. Your commands and telemetry stay private.
From the web app, workflow, or your own MQTT client.
Mosquitto delivers the message to your ESP32 subscriber.
status: "in_progress" then status: "completed", matched via action_id.
import paho.mqtt.client as mqtt
import json
client = mqtt.Client()
client.username_pw_set("your_username", "your_password")
client.connect("your_broker_host", 1883)
client.publish("esp32_5/test", json.dumps({
"action": "servo",
"action_id": "my-001",
"servoName": "ELBOW",
"position": 90,
"speed": 10,
"sender": "my_script"
}))
Any MQTT client works — same host, same credentials:
Desk Buddy AI is our own server that brings intelligence to the arm. It combines models we built ourselves with best-in-class open-source AI.
Homegrown models trained specifically for Desk Buddy's geometry. Given a target position, they output the servo angles needed to get there — no generic IK solver required.
Open-source vision models identify objects and colors in images captured by the onboard camera. Results feed back to the firmware as pick coordinates.
An open-source LLM lets you describe tasks in plain language. The AI translates your instructions into a sequence of MQTT actions sent to the arm.
The AI server communicates with the arm the same way everything else does — JSON over MQTT. No special integration required on the firmware side.