IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

ESP32-S3-DevKitC N16R8 CAM: Bài 09 — Camera DVP 24-pin – phân biệt OV2640/OV5640 & cấu hình cơ bản

Bài 09 giúp bạn hiểu rõ giao tiếp camera DVP 24-pin trên ESP32-S3-DevKitC N16R8 CAM, phân biệt hai loại camera phổ biến OV2640 và OV5640, và cách cấu hình cơ bản để camera hoạt động ổn định.

Mục tiêu bài học

Sau bài này, bạn sẽ:

  • Hiểu camera DVP 24-pin là gì và vì sao ESP32-S3 phù hợp
  • Phân biệt OV2640 và OV5640 (độ phân giải, RAM, ứng dụng)
  • Biết điều kiện bắt buộc để camera hoạt động (PSRAM, xclk, nguồn)
  • Cấu hình camera cơ bản bằng Arduino IDE

1. Tổng quan camera DVP 24-pin trên ESP32-S3

Camera DVP (Digital Video Port) là kiểu giao tiếp song song, truyền dữ liệu ảnh qua nhiều chân đồng thời, khác với camera SPI hay USB.

ESP32-S3 hỗ trợ DVP vì:

  • Có PSRAM ngoài (N16R8)
  • Có bộ điều khiển I2S song song (parallel)
  • Đủ băng thông cho camera và WiFi

2. Cấu trúc chân DVP 24-pin (tổng quan)

Cụm camera 24-pin bao gồm:

  • XCLK: đồng hồ cấp cho camera
  • PCLK: đồng hồ dữ liệu
  • VSYNC / HREF: đồng bộ frame
  • DATA0 – DATA7: dữ liệu ảnh
  • SCCB (I2C): cấu hình camera

Lưu ý: các chân này đã được board CAM nối sẵn, KHÔNG tự ý đổi GPIO.

3. Phân biệt OV2640 và OV5640

OV2640

  • Độ phân giải tối đa: 2MP (1600×1200)
  • Tiêu thụ bộ nhớ ít hơn
  • Ổn định, được hỗ trợ rất tốt
  • Phù hợp: camera web, snapshot, project IoT

OV5640

  • Độ phân giải tối đa: 5MP (2592×1944)
  • Cần PSRAM tốt và nhiều hơn
  • Cấu hình phức tạp hơn
  • Phù hợp: chụp ảnh chất lượng cao

Gợi ý: người mới nên bắt đầu với OV2640.


4. Điều kiện bắt buộc để camera hoạt động

Trước khi code camera, cần đảm bảo:

  • PSRAM bật và hoạt động (N16R8)
  • Nguồn cấp ổn định (không dùng cổng USB yếu)
  • Không dùng các GPIO camera cho ngoại vi khác

Nếu thiếu PSRAM: camera sẽ init thất bại hoặc crash.

5. Thư viện cần dùng (Arduino IDE)

#include "esp_camera.h"

Thư viện này đã có sẵn khi cài ESP32 core chính thống.

6. Cấu hình camera cơ bản (OV2640)

camera_config_t config;

config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer   = LEDC_TIMER_0;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;

config.frame_size   = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count     = 2;

esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
  Serial.println("Camera init failed");
}

Giải thích các tham số quan trọng

  • xclk_freq_hz: thường 20MHz để camera ổn định
  • frame_size: QVGA, VGA, SVGA, UXGA
  • jpeg_quality: 10–15 là hợp lý
  • fb_count: >=2 nếu có PSRAM

7. Lỗi thường gặp và cách xử lý

Lỗi 1: Camera init failed

  • Kiểm tra PSRAM
  • Kiểm tra đúng model camera

Lỗi 2: Reset ngẫu nhiên

  • Nguồn yếu
  • Frame size quá lớn

Lỗi 3: Ảnh đen hoặc vỡ màu

  • XCLK sai
  • Pixel format sai

8. Best practices khi dùng camera

  • Luôn test camera trước khi kết hợp SD/WiFi
  • Giảm frame size khi debug
  • Không vừa stream vừa ghi SD liên tục