ঠিক আছে, আমি পুরো ESP32 C++ কোড ঠিক করে দিয়ে দিচ্ছি, যেখানে:
- স্ট্যাটিক IP + mDNS দুটোই আছে
- 12টি সার্বো নিয়ন্ত্রণ করা যাবে
- সার্বো চলার সময় ESP32-এর LED blink করবে
- স্টার্টআপে ছোট human-like movement আছে
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <ESP32Servo.h>
const char* ssid = "Laptop_Hotspot";
const char* password = "12345678";
// 12 Servos
Servo servos[12];
int servoPins[12] = {13,12,14,27,26,25,33,32,15,4,16,17};
// LED for feedback
const int LED_PIN = 2;
// Static IP
IPAddress local_IP(192, 168, 137, 51); // Servo ESP32
IPAddress gateway(192, 168, 137, 1);
IPAddress subnet(255, 255, 255, 0);
// Web server
WebServer server(80);
// Handle Servo HTTP Request
void handleServo() {
int id = server.arg("id").toInt();
int angle = server.arg("angle").toInt();
if(id >=0 && id<12) {
servos[id].write(angle);
// Blink LED for feedback
digitalWrite(LED_PIN, HIGH);
delay(50);
digitalWrite(LED_PIN, LOW);
}
server.send(200, "text/plain", "OK");
}
// Startup movement
void startupMovement() {
for(int i=0;i<12;i++){
servos[i].write(45);
delay(100);
servos[i].write(135);
delay(100);
servos[i].write(90); // neutral
delay(100);
}
}
void setup() {
Serial.begin(115200);
// LED pin
pinMode(LED_PIN, OUTPUT);
// Servo attach
for(int i=0;i<12;i++) servos[i].attach(servoPins[i]);
// WiFi static IP
if (!WiFi.config(local_IP, gateway, subnet)) {
Serial.println("Static IP Failed");
}
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected! IP: ");
Serial.println(WiFi.localIP());
// mDNS
if (MDNS.begin("esp32-servo")) {
Serial.println("mDNS started: http://esp32-servo.local/");
} else {
Serial.println("Error starting mDNS");
}
// HTTP server route
server.on("/servo", handleServo);
server.begin();
// Startup human-like movement
startupMovement();
}
void loop() {
server.handleClient();
// Optional: Idle autonomous small movement
static unsigned long lastMove = 0;
if(millis() - lastMove > 5000){ // every 5 seconds
servos[0].write(random(60,120)); // head left-right
servos[1].write(random(70,110)); // head up-down
lastMove = millis();
}
}
✅ সার্বো পিন কানেকশন (ESP32)
| Servo No | ESP32 GPIO Pin | কাজ |
|---|---|---|
| 1 | 13 | মাথা বামে/ডানে |
| 2 | 12 | মাথা উপরে/নিচে |
| 3 | 14 | ডান হাত 1 (উপরে/নিচে) |
| 4 | 27 | ডান হাত 2 (সামনে/পিছে) |
| 5 | 26 | ডান হাত 3 (ডানে/বামে) |
| 6 | 25 | ডান হাত 4 (ডানে/বামে) |
| 7 | 33 | ডান হাত 5 (মুষ্টি) |
| 8 | 32 | বাম হাত 1 (উপরে/নিচে) |
| 9 | 15 | বাম হাত 2 (ডানে/বামে) |
| 10 | 4 | বাম হাত 3 (ডানে/বামে) |
| 11 | 16 | বাম হাত 4 (ডানে/বামে) |
| 12 | 17 | বাম হাত 5 (মুষ্টি) |
Power:
- Red → External 5–6V
- Brown/Black → GND
- ESP32 GND ↔ Power Supply GND একসাথে কানেক্ট
Python Interface (Slider)
import requests
import tkinter as tk
ESP32_IP = "192.168.137.51" # অথবা "esp32-servo.local"
def move_servo(servo_id, angle):
try:
requests.get(
f"http://{ESP32_IP}/servo",
params={"id": servo_id, "angle": angle},
timeout=1
)
except:
print(f"ESP32 not reachable for Servo {servo_id}")
def slider_change(val, servo_id):
angle = int(float(val))
move_servo(servo_id, angle)
root = tk.Tk()
root.title("ESP32 Servo Slider Control")
tk.Label(root, text="Move the slider → Servo rotates",
font=("Arial", 12)).pack(pady=5)
frame = tk.Frame(root)
frame.pack()
for i in range(12):
tk.Label(frame, text=f"Servo {i+1}").grid(row=i, column=0, padx=5, pady=5)
slider = tk.Scale(frame, from_=0, to=180, orient=tk.HORIZONTAL,
length=300, command=lambda val, i=i: slider_change(val, i))
slider.grid(row=i, column=1, padx=5, pady=5)
root.mainloop()
✅ স্ট্যাটিক IP + mDNS
- ESP32 Static IP:
192.168.137.51 - Wi-Fi এর Hotspot:
192.168.137.1 - mDNS hostname:
http://esp32-servo.local - Python এ চাইলে
ESP32_IP = "esp32-servo.local"ব্যবহার করতে পারবে
এখন তুমি সহজেই:
- Python GUI দিয়ে সার্বো পরীক্ষা করতে পারবে
- ESP32 LED blink দেখাবে যখন সার্বো চলবে
- Startup এ human-like ছোট movement হবে
- পরবর্তীতে ভয়েস কমান্ড যুক্ত করা যাবে
যদি চাও, আমি পরের ধাপে GUI + Voice Assistant একত্রে করে দিয়ে দিচ্ছি, যেখানে তুমি “Left Hand Up” বা “Head Left” বললেই সার্বো চলবে।
চাও কি সেটা করি?