No title

 

ঠিক আছে, আমি পুরো 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" ব্যবহার করতে পারবে

এখন তুমি সহজেই:

  1. Python GUI দিয়ে সার্বো পরীক্ষা করতে পারবে
  2. ESP32 LED blink দেখাবে যখন সার্বো চলবে
  3. Startup এ human-like ছোট movement হবে
  4. পরবর্তীতে ভয়েস কমান্ড যুক্ত করা যাবে

যদি চাও, আমি পরের ধাপে GUI + Voice Assistant একত্রে করে দিয়ে দিচ্ছি, যেখানে তুমি “Left Hand Up” বা “Head Left” বললেই সার্বো চলবে।

চাও কি সেটা করি?

Post a Comment

Previous Post Next Post