Chụp hình và lưu hình vào thẻ nhớ MicroSD với ESP32-CAM
Bài viết này hướng dẫn cách chụp hình và lưu vào thẻ nhớ microSD với ESP32-CAM và Arduino IDE.
ESP32-CAM ở deep sleep mode, khi ta nhấn nút reset, ESP32-CAM sẽ được đánh thức, sau đó chụp 1 tấm hình và lưu vào thẻ nhớ:
- ESP32-CAM with OV2640
- Thẻ nhớ microSD
- FT232R FTDI (mạch nạp)
- Dây cắm header cái – cái
Đầu tiên cần format thẻ nhớ. Có thể sử dụng công cụ format có sẵn của Windows hoặc bất kì phần mềm format thẻ nhớ nào khác.
1. Kết nối thẻ nhớ với máy tính thông qua đầu lọc thẻ nhớ. Vào This PC, click phải chuột vào ổ đĩa thẻ nhớ và chọn Format:
Lưu ý: Theo thông số kỹ thuật, ESP32-CAM chỉ hỗ trợ thẻ nhớ 4 GB. Tuy nhiên khi được thử với thẻ nhớ 16GB, ESP32-CAM vẫn hoạt động bình thường.
Để lập trình cho ESP32-CAM với Arduino IDE, trước tiên cần cài đặt Arduino IDE và các thư viện cần thiết. Làm theo hướng dẫn tại đây để cài đặt nếu bạn chưa cài.
Tạo chương trình mới trong Arduino IDE và copy đoạn chương trình dưới đây vào:
Đầu tiên khai báo các thư viện cần sử dụng:
Cần sử dụng thư viện EEPOM.h để làm việc với bộ nhơ flash.
#include <EEPROM.h>
Bạn có thể xem lại cách đọc, ghi dữ liệu vào bộ nhớ flash với ESP32 và Arduino IDE tại đây.
Khai báo dung lượng cần sử dụng, ở đây chỉ sử dụng 1 byte (có thể lưu 256 hình ảnh):
#define EEPROM_SIZE 1
Khai báo các chân cần sử dụng:
Lưu ý: Nếu bạn sử dụng bản ESP32-CAM khác với bản bài viết này hướng dẫn, hãy kiểm tra lại sơ đồ chân và khai báo tương ứng với bản ESP32-CAM của bạn.
Khởi tạo biến để tạo ra tên ảnh: picture1.jpg, picture2.jpg, …
int pictureNumber = 0;
Toàn bộ chương trình chính sẽ nằm trong hàm setup(). Chương trình này chỉ chạy 1 lần khi nút reset được nhấn, ESP32-CAM thức dậy. Sau khi thực hiện xong, ESP32-CAM sẽ bắt đầu rơi vào deep sleep mode.
Cài đặt các thông số camera:
Sử dụng đoạn code dưới đây cho các bản ESP32 có PSRAM:
Nếu ESP32-CAM không có PSRAM, hãy thêm đoạn code bên dưới:
Tiếp theo khởi tạo camera:
Khởi tạo thẻ nhớ microSD:
Đoạn chương trình tiếp theo thực hiện chụp ảnh:
Sau đó, khởi tạo EEPROM:
EEPROM.begin(EEPROM_SIZE);
Tên picture được tạo ra bởi cách ghép chuỗi picture với số được lưu trong EEPROM cộng 1:
pictureNumber = EEPROM.read(0) + 1;
String path = "/picture" + String(pictureNumber) +".jpg";
Tiếp theo là đoạn lệnh thực hiện lưu hình ảnh vào thẻ nhớ:
Sau khi lưu hình vào thẻ nhớ, ta lưu lại số hình ảnh hiện tại vào EEPROM để cập nhật tên hình trong lần chụp tiếp theo:
EEPROM.write(0, pictureNumber);
EEPROM.commit();
Khi ESP32-CAM chụp hình, đèn flash sẽ bật (GPIO 4):
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
rtc_gpio_hold_en(GPIO_NUM_4);
Cuối cùng, bắt đầu deep sleep mode khi ESP32-CAM đã thực hiện xong các nhiệm vụ:
esp_deep_sleep_start();
ESP32-CAM sẽ ở deep sleep mode cho tới khi được nhấn nút reset.
Xem bài viết hướng dẫn nạp chương trình cho ESP32-CAM tại đây.
Sau khi nạp chương trình thành công, chờ ESP32-CAM chụp hình (bạn sẽ quan sát được ESP32-CAM chụp hình qua tín hiệu từ đèn flash), sau đó nhấn RESET để tiếp tục chụp.
Mở Serial Monitor xem các thông báo được in ra để biết chương trình hoạt động đúng chưa:
Nếu mọi thứ đã hoạt động đúng như mong đợi, bạn có thể ngắt kết nối ESP32-CAM với mạch nạp FTDI và cấp nguồn cho ESP32-CAM thông qua nguồn điện riêng để dễ dàng di chuyển camera đi chụp hình…
Để xem các hình ảnh đã chụp được, cần kết nối thẻ nhớ vào máy tính, có thể lưu hoặc xóa các hình ảnh này thông qua các thao tác trên máy tính.
Đăng nhận xét