ESP32-S3 N16R8 + OV5640: Tạo Streaming Camera xem trực tiếp trên trình duyệt
Trung cấp7/5/2026

ESP32-S3 N16R8 + OV5640: Tạo Streaming Camera xem trực tiếp trên trình duyệt

Trong bài này, chúng ta sẽ dùng ESP32-S3 N16R8 kết hợp camera OV5640 để tạo một camera streaming đơn giản, cho phép người dùng mở trình duyệt trên điện thoại hoặc máy tính và xem hình ảnh trực tiếp qua mạng Wi-Fi.

CameraStreamingMJPEGWeb ServerESP32-S3PSRAM
0 lượt thích6 người đã làm45 phút6 bước3 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Phần 3: Lập trình camera OV5640 với ESP32-S3

1. Giới thiệu về thư viện camera cho ESP32, 2. Hướng dẫn cài đặt và sử dụng thư viện camera, 3. Viết code để khởi tạo camera và kiểm tra hoạt động, 4. Cấu hình chế độ streaming MJPEG, 5. Thực hiện test đầu ra video từ camera.

Cập nhật 31/05/2026

Phần 3: Lập trình camera OV5640 với ESP32-S3

1. Giới thiệu về thư viện camera cho ESP32

ESP32 là một trong những vi điều khiển phổ biến nhất trong lĩnh vực IoT, đặc biệt là khi kết hợp với camera. Để lập trình camera OV5640 với ESP32-S3, chúng ta sẽ sử dụng thư viện ESP32 Camera do Espressif phát triển. Thư viện này hỗ trợ nhiều loại camera khác nhau và cho phép chúng ta dễ dàng thiết lập và điều khiển camera.

2. Hướng dẫn cài đặt và sử dụng thư viện camera

Để sử dụng thư viện camera cho ESP32, trước tiên bạn cần cài đặt nó thông qua Arduino IDE. Dưới đây là hướng dẫn từng bước:

  1. Mở Arduino IDE.
  2. Đi đến File > Preferences.
  3. Trong phần Additional Board Manager URLs, thêm đường dẫn sau: https://dl.espressif.com/dl/package_esp32_index.json.
  4. Đi đến Tools > Board > Boards Manager, tìm kiếm ESP32 và cài đặt.
  5. Cuối cùng, cài đặt thư viện camera bằng cách vào Sketch > Include Library > Manage Libraries và tìm kiếm ESP32 Camera.

3. Viết code để khởi tạo camera và kiểm tra hoạt động

Sau khi đã cài đặt xong thư viện, chúng ta cần viết code để khởi tạo camera và kiểm tra hoạt động của nó. Dưới đây là đoạn code mẫu để khởi tạo camera OV5640:


#include "esp_camera.h"

// Định nghĩa các thông số camera
#define CAMERA_MODEL_AI_THINKER // Thay đổi nếu bạn sử dụng mô hình khác

#include "camera_pins.h"

void setup() {
    Serial.begin(115200);
    camera_config_t config;
    config.ledc_channel = LEDC_CHANNEL;
    config.ledc_timer = LEDC_TIMER;
    config.pin_d0 = Y2;
    config.pin_d1 = Y3;
    config.pin_d2 = Y4;
    config.pin_d3 = Y5;
    config.pin_d4 = Y6;
    config.pin_d5 = Y7;
    config.pin_d6 = Y8;
    config.pin_d7 = Y9;
    config.pin_xclk = XCLK;
    config.pin_pclk = PCLK;
    config.pin_vsync = VSYNC;
    config.pin_href = HREF;
    config.pin_sscb_sda = SIOD;
    config.pin_sscb_scl = SIOC;
    config.pin_pwdn = PWDN;
    config.pin_reset = RESET;
    config.xclk_freq_hz = 20000000;
    config.pixel_format = PIXFORMAT_JPEG;

    // Nếu cần PSRAM, thiết lập pixel format
    if (psramFound()) {
        config.frame_size = FRAMESIZE_SVGA;
        config.jpeg_quality = 12; 
        config.fb_count = 2; 
    } else {
        config.frame_size = FRAMESIZE_VGA;
        config.jpeg_quality = 12; 
        config.fb_count = 1; 
    }

    // Khởi tạo camera
    esp_err_t err = esp_camera_init(&config);
    if (err != ESP_OK) {
        Serial.printf("Camera init failed with error 0x%x", err);
        return;
    }
    Serial.println("Camera initialized successfully");
}

void loop() {
    // Chương trình chính
}

Trong đoạn code trên, chúng ta đã định nghĩa các chân kết nối của camera và khởi tạo camera trong hàm setup(). Nếu camera khởi tạo thành công, nó sẽ in ra thông báo trên Serial Monitor.

4. Cấu hình chế độ streaming MJPEG

Để thiết lập chế độ streaming MJPEG, chúng ta cần cấu hình một server HTTP. Dưới đây là code mẫu để cấu hình server và bắt đầu streaming:


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

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

void startCameraServer() {
    // Thiết lập server
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to WiFi...");
    }
    Serial.println("Connected to WiFi");

    // Bắt đầu streaming
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
        request->send(SD, "/index.html", "text/html");
    });

    server.on("/stream", HTTP_GET, [](AsyncWebServerRequest *request){
        request->send(SD, "/stream", "multipart/x-mixed-replace; boundary=frame");
    });

    server.begin();
}

void setup() {
    // Khởi tạo camera như đã mô tả ở trên
    // ...
    startCameraServer();
}

void loop() {
    // Chương trình chính
}

Trong đoạn code này, chúng ta đã thiết lập một server HTTP để phục vụ trang web và stream video từ camera. Đừng quên thay thế YOUR_SSIDYOUR_PASSWORD bằng thông tin mạng của bạn.

5. Thực hiện test đầu ra video từ camera

Để kiểm tra đầu ra video từ camera, bạn cần tạo một file HTML đơn giản để hiển thị video stream. Tạo một file index.html với nội dung sau:


<!DOCTYPE html>
<html>
<head>
    <title>Camera Streaming</title>
</head>
<body>
    <h1>Camera Streaming</h1>
    <img src="stream" />
</body>
</html>

Để tải file HTML lên ESP32, bạn có thể sử dụng ESP32 Sketch Data Upload để upload file vào hệ thống tệp của ESP32. Sau khi đã tải lên, bạn có thể mở trình duyệt và truy cập vào địa chỉ IP của ESP32 để xem video stream.

Lưu ý: Đảm bảo rằng ESP32 và thiết bị của bạn đang kết nối cùng một mạng Wi-Fi để có thể xem video stream.

Bằng cách làm theo các bước trên, bạn đã có thể lập trình camera OV5640 với ESP32-S3 để tạo ra một camera streaming đơn giản. Hãy thử nghiệm và phát triển thêm các tính năng khác cho dự án của bạn!