Introduction

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

Hardware

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

Software

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ũ.

ESP32-CAM.ino

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

Ở 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.

StreamServer.h

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ý.

index.h & index.html

Ở 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.

Installation

Để 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)