Series
Lập Trình ESP32 Cơ Bản
  1. Series Lập Trình ESP32 Cơ Bản – Giới Thiệu: Lộ Trình 19 Bài Từ Số 0
  2. 1Lập trình ESP32 – Bài 1: ESP32 là gì? Hướng dẫn bắt đầu với ESP32 cho người mới
  3. 2Lập trình ESP32 – Bài 2: Kết nối WiFi và kiểm tra Internet với ESP32
  4. 3Lập trình ESP32 – Bài 3: Đọc nút nhấn và điều khiển LED với ESP32
  5. 4Lập trình ESP32 – Bài 4: Đọc nhiệt độ & độ ẩm với cảm biến DHT11
  6. 5Lập trình ESP32 – Bài 5: ESP32 Web Server – Điều khiển LED qua trình duyệt
  7. 6Lập trình ESP32 – Bài 6: Điều khiển LED RGB
  8. 7Lập trình ESP32 – Bài 7: Điều khiển Relay qua Web Server
  9. 8Lập trình ESP32 – Bài 8: WebSocket – Điều khiển LED realtime từ trình duyệt
  10. 9Lập trình ESP32 – Bài 9: Đọc cảm biến ánh sáng (LDR) và hiển thị realtime qua WebSocket
  11. 10Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server
  12. 11Lập trình ESP32 – Bài 11: Đọc các loại biến trở (Potentiometer / Analog Sensor)
  13. 12Lập trình ESP32 – Bài 12: Đọc cảm biến khoảng cách HC-SR04
  14. 13Lập trình ESP32 – Bài 13: ESP32 – Đọc cảm biến nhiệt độ, độ ẩm DHT11 và hiển thị dữ liệu realtime qua WebSocket
  15. 14Lập trình ESP32 – Bài 14: Hiển thị màn hình TFT (SPI)
  16. 15Lập trình ESP32 – Bài 15: Màn hình OLED SSD1306 (I2C)
  17. 16Lập trình ESP32 – Bài 16: Module SIM 4G A7680C – Gọi điện thoại, in thông tin SIM/Module, trạng thái 4G
  18. 17Lập trình ESP32 – Bài 17: Phát nhạc MP3 với module DFPlayer Mini
  19. 18Lập trình ESP32 – Bài 18: Đọc cảm biến khí gas MQ-2 và hiển thị lên màn hình OLED
  20. 19Lập trình ESP32 – Bài 19: Kết nối MQTT, Publish dữ liệu cảm biến & Subscribe điều khiển thiết bị
Kiến thức

Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server

Th11 2025
Lập trình ESP32 – Bài 10: Điều khiển Servo SG90 qua Web Server

Bài học này sẽ hướng dẫn cách điều khiển Servo SG90 bằng ESP32 thông qua giao diện Web. Dùng thanh trượt để thay đổi góc quay Servo theo thời gian thực.

Mục lục

  1. Giới thiệu
  2. Servo SG90 hoạt động thế nào?
  3. Phần cứng cần chuẩn bị
  4. Sơ đồ kết nối
  5. Mã nguồn điều khiển Servo
  6. Giải thích mã
  7. Demo & kết quả
  8. Gợi ý mở rộng

1) Giới thiệu

Servo là loại động cơ có khả năng xoay góc chính xác nhờ tín hiệu PWM.
Trong bài này, bạn sẽ học cách:

  • Kết nối Servo SG90 với ESP32
  • Điều khiển góc quay Servo từ trình duyệt Web

2) Servo SG90 hoạt động thế nào?

  • Servo nhận tín hiệu điều khiển dạng PWM (Pulse Width Modulation).
  • Chu kỳ tín hiệu: ~20ms (50Hz).
  • Độ rộng xung (pulse width) xác định góc quay:
    • 0.5ms → 0°
    • 1.5ms → 90°
    • 2.5ms → 180°

3) Phần cứng cần chuẩn bị

Linh kiệnSố lượngGhi chú
ESP32 DevKit V11Board điều khiển
Servo SG901Nguồn 5V
Nguồn ngoài 5V (tùy chọn)1Nếu nhiều servo
Dây nốiVài sợi
Breadboard1Khuyến khích

4) Sơ đồ kết nối (Connection Diagram)

  • Servo VCC → 5V (ESP32 hoặc nguồn ngoài)
  • Servo GND → GND
  • Servo Signal → GPIO13
  • ESP32 cấp nguồn qua USB
  • Laptop hoặc điện thoại truy cập Web Server để điều khiển góc.

5) Mã nguồn điều khiển Servo

#include <WiFi.h>
#include <WebServer.h>
#include <ESP32Servo.h>

#define SERVO_PIN 13

const char* ssid     = "YourWiFiName";
const char* password = "YourPassword";

Servo servo;
WebServer server(80);
int angle = 90;

const char HTML_PAGE[] PROGMEM = R"HTML(
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ESP32 Servo Control</title>
<style>
body{font-family:system-ui;text-align:center;padding:30px;}
input[type=range]{width:80%;margin-top:20px;}
h1{color:#0f766e;}
</style>
</head>
<body>
<h1>ESP32 Servo SG90 Control</h1>
<p>Góc hiện tại: <span id="val">90</span>°</p>
<input type="range" min="0" max="180" value="90" id="slider">
<script>
const s=document.getElementById('slider');
const v=document.getElementById('val');
s.oninput=()=>{v.textContent=s.value;fetch('/angle?val='+s.value);}
</script>
</body></html>
)HTML";

void handleRoot() {
  server.send_P(200, "text/html", HTML_PAGE);
}

void handleAngle() {
  if (server.hasArg("val")) {
    int val = server.arg("val").toInt();
    val = constrain(val, 0, 180);
    servo.write(val);
    angle = val;
    Serial.printf("Servo angle: %d°\n", val);
  }
  server.send(200, "text/plain", String(angle));
}

void setup() {
  Serial.begin(115200);
  servo.attach(SERVO_PIN);

  WiFi.begin(ssid, password);
  Serial.print("Connecting WiFi");
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("\n✅ WiFi connected: " + WiFi.localIP().toString());

  server.on("/", handleRoot);
  server.on("/angle", handleAngle);
  server.begin();
  Serial.println("✅ Web Server started");
}

void loop() {
  server.handleClient();
}

6) Giải thích mã

  • ESP32Servo.h hỗ trợ tạo xung PWM chính xác để điều khiển Servo.
  • HTML + Slider gửi giá trị góc qua /angle?val=....
  • Mỗi lần thay đổi thanh trượt → Servo quay tức thì đến góc tương ứng.

7) Demo & kết quả

  1. Nạp code, mở Serial Monitor để xem địa chỉ IP.
  2. Mở trình duyệt → truy cập: http://<ESP32_IP>/
  3. Dịch chuyển thanh trượt → Servo quay tương ứng theo góc.
  4. Có thể mở từ điện thoại để điều khiển không dây tiện lợi.

8) Gợi ý mở rộng

  • Điều khiển 2–4 Servo đồng thời bằng nhiều thanh trượt.
  • Thêm WebSocket để cập nhật góc realtime hai chiều.
  • Dùng Servo MG996R (mô-men lớn hơn).
  • Tạo giao diện joystick để điều khiển góc X/Y cho robot.