ESP32 Cam là mạch thu phát Wifi có gắn camera, có nhiều biến thể khác nhau. ESP32-Eagle tương thích với đa số các biến thể và có thể cấu hình code tương ứng với loại mạch sử dụng. Các tính năng chính của nó bao gồm:
- Phát hiện chuyển động
- Gửi thông báo & ảnh về máy
- Stream thông qua web server
- Quản lí & cấu
hình camera qua web server
Link repository: Here
Mình sử dụng ESP32-S (AI-Thinker), camera OV2640 có đèn LED đi kèm với
đế nạp code cũng như cấp nguồn ESP32-CAM-MB. ESP32-CAM-MB cấp nguồn và
nạp code bằng cổng Micro USB.
Về vỏ ngoài của cam, bạn đọc có thể in 3D theo mẫu:
Here
Về phần mềm, code của mình được xây dựng dựa trên thư viện EloquentSurveillance. EloquentSurveillance có chứa các tính năng riêng lẻ cho camera như motion detect, web streaming, send notification. Code của ESP32-Eagle tích hợp và đồng bộ 3 tính năng đó chạy song song, đồng thời thêm trình quản lí camera (ESP32-Eagle System Manager). Bên dưới mình sẽ nói chi tiết hơn các thay đổi so với thư viện cũ.
Là file nạp code, file .ino này sẽ gọi đến (include) các file header
(.h). Bên cạnh đó, việc khởi tạo hệ thống camera cũng được thực thi ở
file .ino này. Do đó, việc cài đặt & cấu hình sensor của camera mình đặt
ở đây (thông qua hàm setSensor). Các file header sẽ truy cập ngược đến
file .ino và sử dụng function này.
Mình cũng thêm một số điều kiện
về tắt bật motion detect cũng như đồng bộ hoá giữa motion detect và
streaming. Ban đầu, nếu motion detect đang bật, máy ảnh đang được sử
dụng để chụp ảnh liên tục và so sánh với ảnh trước. Nếu người dùng sử
dụng tính năng stream sẽ gây xung đột và có thể khiến camera ngừng hoạt
động và phải khởi động lại mạch. Để giải quyết, mình sử dụng một biến
lưu trong globals.h để xác định khi nào có request stream
(StreamServer.h), không cho phép motion detect chiếm dụng camera và khởi
chạy stream sau 5s.
Ở globals.h, mình sử dụng nó như nơi lưu trữ data. Các data về cấu hình và trạng thái đều được lưu giữ ở đây, được lấy và gán thông qua 2 hàm getSensorData và setSensorData. Hàm setSensor ở file .ino được chuyển ngược về đây với tên sensorPtr.
Ban đầu, server chỉ xử lí uri "/stream". Mình đã thêm handler cho uri "/" (ESP32-Eagle System Manager), "/set-sensor" để thay đổi cấu hình từ xa, "/get-sensor" để mỗi khi vào ESP32-Eagle System Manager browser sẽ lấy cấu hình hiện tại từ server cập nhật cho trình quản lý.
Ở handler cho uri "/", server phải trả về file html. Data file html đó được lưu trong index.h để tránh làm rối code StreamServer.h. index.h là bản đã chuyển toàn bộ ngoặc kép qua ngoặc đơn và đưa về một dòng từ index.html.
Để cài đặt, bạn đọc sửa đổi các thông tin trong file .ino như sau:
- Tên và mật khẩu wifi
- Thông tin bot Telegram
- Loại camera, độ phân giải, độ rõ nét, thông số xác định
chuyển động
Sau đó chỉ cần nạp code vào ESP32 Cam là sẽ có tin nhắn gửi đến tài khoản Telegram về địa chỉ IP của web server
Về cách tạo bot và lấy mã, bạn đọc xem tại Here ở cuối trang
Sau đó bạn đọc có thể public server bằng cách vào default gateway để foward IP đó.
Lưu ý: nếu kết nối esp32 cam bị lỗi serial port hãy vào device manager mục port và uninstall driver của esp32 (phải tích vào mục xoá hết)