Skip to main content
Glama

Chotu Robo Server

by vishalmysore
haircare.ino5.63 kB
#include <WiFi.h> #include <WebServer.h> #include <ESP32Servo.h> // WiFi credentials const char* ssid = "**"; const char* password = "****"; // Web server runs on port 80 WebServer server(80); // Servo setup Servo myServo; int myServoPin = 14; Servo baseServo; int baseServoPin = 27; int baseAngle = 90; Servo shoulderServo; int shoulderServoPin = 26; Servo elbowServo; int elbowServoPin = 25; // Elbow servo on pin 25 void setup() { Serial.begin(115200); // Attach servos myServo.attach(myServoPin); myServo.write(90); // Neutral position baseServo.attach(baseServoPin); baseServo.write(baseAngle); shoulderServo.attach(shoulderServoPin); shoulderServo.write(90); // Start at neutral position elbowServo.attach(elbowServoPin); elbowServo.write(90); // Start at neutral position // Connect to Wi-Fi WiFi.begin(ssid, password); Serial.print("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi connected. IP address: "); Serial.println(WiFi.localIP()); // Define routes server.on("/scissor", handleScissorRequest); server.on("/rotateBase", handleBaseRotation); server.on("/rotateShoulder", handleShoulderRotation); server.on("/rotateElbow", handleElbowRotation); server.on("/scissorSlow", handleScissorSlowRequest); server.on("/scissorFast", handleScissorFastRequest); // Start server server.begin(); Serial.println("HTTP server started"); } void loop() { server.handleClient(); } // ----------- Scissor Method -------------- void scissor(bool slow = false) { int delayTime = (slow) ? 100 : 10; // Slow = 100ms delay, Fast = 10ms delay myServo.write(180); delay(delayTime); myServo.write(90); delay(delayTime); myServo.write(0); delay(delayTime); myServo.write(90); delay(20); } // ---------- HTTP Handler ---------------- void handleScissorRequest() { if (!server.hasArg("repeat")) { server.send(400, "text/plain", "Missing 'repeat' argument."); return; } int repeatCount = server.arg("repeat").toInt(); if (repeatCount <= 0) { server.send(400, "text/plain", "Invalid 'repeat' value."); return; } for (int i = 0; i < repeatCount; i++) { scissor(); } server.send(200, "text/plain", "Scissor action completed " + String(repeatCount) + " times."); } void handleScissorSlowRequest() { if (!server.hasArg("repeat")) { server.send(400, "text/plain", "Missing 'repeat' argument."); return; } int repeatCount = server.arg("repeat").toInt(); if (repeatCount <= 0) { server.send(400, "text/plain", "Invalid 'repeat' value."); return; } for (int i = 0; i < repeatCount; i++) { scissor(true); // Slow } server.send(200, "text/plain", "Slow scissor action completed " + String(repeatCount) + " times."); } void handleScissorFastRequest() { if (!server.hasArg("repeat")) { server.send(400, "text/plain", "Missing 'repeat' argument."); return; } int repeatCount = server.arg("repeat").toInt(); if (repeatCount <= 0) { server.send(400, "text/plain", "Invalid 'repeat' value."); return; } for (int i = 0; i < repeatCount; i++) { scissor(false); // Fast } server.send(200, "text/plain", "Fast scissor action completed " + String(repeatCount) + " times."); } // ---------- Base Rotation ---------------- void rotateBase(int targetAngle) { int currentAngle = baseServo.read(); int step = (targetAngle > currentAngle) ? 1 : -1; for (int angle = currentAngle; angle != targetAngle; angle += step) { baseServo.write(angle); delay(10); } baseServo.write(targetAngle); } void handleBaseRotation() { if (!server.hasArg("degree")) { server.send(400, "text/plain", "Missing 'degree' argument."); return; } int angle = server.arg("degree").toInt(); if (angle < 0 || angle > 180) { server.send(400, "text/plain", "Invalid angle. Must be between 0 and 180."); return; } rotateBase(angle); server.send(200, "text/plain", "Base rotated to " + String(angle) + " degrees."); } // ---------- Shoulder Rotation ---------------- void rotateShoulder(int targetAngle) { int currentAngle = shoulderServo.read(); int step = (targetAngle > currentAngle) ? 1 : -1; for (int angle = currentAngle; angle != targetAngle; angle += step) { shoulderServo.write(angle); delay(10); } shoulderServo.write(targetAngle); } void handleShoulderRotation() { if (!server.hasArg("degree")) { server.send(400, "text/plain", "Missing 'degree' argument."); return; } int angle = server.arg("degree").toInt(); if (angle < 0 || angle > 180) { server.send(400, "text/plain", "Invalid angle. Must be between 0 and 180."); return; } rotateShoulder(angle); server.send(200, "text/plain", "Shoulder rotated to " + String(angle) + " degrees."); } // ---------- Elbow Rotation ---------------- void rotateElbow(int targetAngle) { int currentAngle = elbowServo.read(); int step = (targetAngle > currentAngle) ? 1 : -1; for (int angle = currentAngle; angle != targetAngle; angle += step) { elbowServo.write(angle); delay(10); } elbowServo.write(targetAngle); } void handleElbowRotation() { if (!server.hasArg("degree")) { server.send(400, "text/plain", "Missing 'degree' argument."); return; } int angle = server.arg("degree").toInt(); if (angle < 0 || angle > 180) { server.send(400, "text/plain", "Invalid angle. Must be between 0 and 180."); return; } rotateElbow(angle); server.send(200, "text/plain", "Elbow rotated to " + String(angle) + " degrees."); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vishalmysore/choturobo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server