ESP32-CAM – Camera Streaming
Trung cấp20/6/2024

ESP32-CAM – Camera Streaming

Stream video qua WiFi với ESP32-CAM module giá rẻ

CameraStreamingESP32-CAMWeb Server
756 lượt thích1.2k người đã làm30 phút5 bước3 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Phần 4: Điều khiển camera từ xa và tích hợp với ứng dụng IoT

1. Giới thiệu về khả năng điều khiển từ xa, 2. Viết code để điều khiển camera (chụp ảnh, quay video), 3. Tích hợp với ứng dụng IoT để hiển thị video, 4. Cách gửi dữ liệu từ ESP32-CAM đến ứng dụng IoT, 5. Kiểm tra và tối ưu hóa hiệu suất.

Cập nhật 31/05/2026

Phần 4: Điều khiển camera từ xa và tích hợp với ứng dụng IoT

Trong phần này, chúng ta sẽ tìm hiểu cách điều khiển camera từ xa sử dụng module ESP32-CAM. Chúng ta sẽ viết mã để chụp ảnh và quay video, tích hợp với ứng dụng IoT để hiển thị video, và gửi dữ liệu từ ESP32-CAM đến ứng dụng IoT. Cuối cùng, chúng ta sẽ kiểm tra và tối ưu hóa hiệu suất.

1. Giới thiệu về khả năng điều khiển từ xa

ESP32-CAM là một module mạnh mẽ cho phép chúng ta thực hiện nhiều chức năng khác nhau, bao gồm việc điều khiển camera từ xa qua WiFi. Điều này có nghĩa là bạn có thể chụp ảnh hoặc quay video từ một khoảng cách xa mà không cần kết nối dây. Việc này rất hữu ích cho các ứng dụng IoT như giám sát an ninh, điều khiển thiết bị từ xa, và nhiều hơn nữa.

2. Viết code để điều khiển camera (chụp ảnh, quay video)

Để điều khiển camera, chúng ta cần viết một đoạn mã sử dụng thư viện ESP32-CAM. Dưới đây là mã mẫu để chụp ảnh và quay video:


#include "esp_camera.h"
#include <WiFi.h>

// Thông tin mạng WiFi
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

// Thiết lập camera
void startCameraServer();

void setup() {
  Serial.begin(115200);
  
  // Kết nối WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Đang kết nối đến WiFi...");
  }
  Serial.println("Đã kết nối đến WiFi");
  
  // Khởi động camera
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL;
  config.ledc_timer = LEDC_TIMER;
  config.pin_d0 = 5;
  config.pin_d1 = 18;
  config.pin_d2 = 19;
  config.pin_d3 = 21;
  config.pin_d4 = 36;
  config.pin_d5 = 39;
  config.pin_d6 = 34;
  config.pin_d7 = 35;
  config.pin_xclk = 0;
  config.pin_pclk = 22;
  config.pin_vsync = 25;
  config.pin_href = 23;
  config.pin_sscb_sda = 26;
  config.pin_sscb_scl = 27;
  config.pin_pwdn = 32;
  config.pin_reset = -1;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.frame_size = FRAMESIZE_SVGA;
  config.jpeg_quality = 12;
  config.fb_count = 2;

  // Khởi tạo camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.println("Khởi tạo camera thất bại");
    return;
  }

  // Khởi động server camera
  startCameraServer();
}

void loop() {
  // Chờ để thực hiện các lệnh điều khiển từ xa
}

void startCameraServer() {
  // Thêm mã để khởi động server và xử lý các yêu cầu
}

Mã trên sẽ thiết lập camera và kết nối đến mạng WiFi. Bạn cần thay thế YOUR_SSIDYOUR_PASSWORD bằng thông tin mạng của bạn. Hàm startCameraServer() sẽ được sử dụng để khởi động server và xử lý các yêu cầu từ xa.

3. Tích hợp với ứng dụng IoT để hiển thị video

Để tích hợp video vào ứng dụng IoT, bạn có thể sử dụng một server web đơn giản để phát video từ camera. Sau khi khởi động server trong hàm startCameraServer(), bạn có thể thêm mã như sau:


#include <WebServer.h>

WebServer server(80);

void startCameraServer() {
  server.on("/", HTTP_GET, [](WebServer *server) {
    server.send(200, "text/html", "<html><body><h1>Camera Streaming</h1><img src=\"/stream\"></body></html>");
  });

  server.on("/stream", HTTP_GET, []() {
    // Phát video từ camera
    // Thêm mã để phát video
  });

  server.begin();
  Serial.println("Server đã khởi động");
}

Mã trên sẽ tạo một server web đơn giản với trang chính hiển thị video từ camera. Bạn cần thêm mã để phát video trong hàm xử lý /stream.

4. Cách gửi dữ liệu từ ESP32-CAM đến ứng dụng IoT

Để gửi dữ liệu từ ESP32-CAM đến ứng dụng IoT, bạn có thể sử dụng giao thức HTTP hoặc MQTT. Dưới đây là một ví dụ về cách gửi hình ảnh chụp từ camera đến một server IoT qua HTTP:


void captureAndSend() {
  camera_fb_t *fb = esp_camera_fb_get();
  if (!fb) {
    Serial.println("Không thể lấy frame buffer");
    return;
  }

  // Gửi dữ liệu đến server IoT
  WiFiClient client;
  if (client.connect("YOUR_IOT_SERVER", 80)) {
    client.println("POST /upload HTTP/1.1");
    client.println("Host: YOUR_IOT_SERVER");
    client.println("Content-Type: image/jpeg");
    client.print("Content-Length: ");
    client.println(fb->len);
    client.println();
    client.write(fb->buf, fb->len);
    client.println();
  }
  esp_camera_fb_return(fb);
}

Trong mã trên, bạn cần thay thế YOUR_IOT_SERVER bằng địa chỉ server IoT của bạn. Hàm captureAndSend() sẽ chụp ảnh từ camera và gửi nó đến server qua HTTP.

5. Kiểm tra và tối ưu hóa hiệu suất

Sau khi hoàn thành các bước trên, bạn cần kiểm tra ứng dụng của mình để đảm bảo mọi thứ hoạt động như mong đợi. Dưới đây là một số điều cần lưu ý:

  • Kiểm tra kết nối WiFi để đảm bảo rằng ESP32-CAM có thể kết nối ổn định.
  • Thử nghiệm với các kích thước khung hình khác nhau để tối ưu hóa chất lượng video và băng thông.
  • Kiểm tra tốc độ tải lên hình ảnh đến server IoT để đảm bảo rằng nó hoạt động trong thời gian thực.
Tip: Sử dụng một công cụ giám sát mạng để theo dõi băng thông và hiệu suất của ứng dụng IoT của bạn. Điều này sẽ giúp bạn phát hiện các vấn đề và tối ưu hóa ứng dụng tốt hơn.

Với những bước trên, bạn đã hoàn thành việc điều khiển camera từ xa bằng ESP32-CAM và tích hợp nó với ứng dụng IoT. Hãy thử nghiệm và sáng tạo với các ứng dụng khác nhau mà bạn có thể xây dựng từ dự án này!