Hôm nay, mình sẽ giới thiệu đến các bạn một dự án cực kỳ thú vị. Đó là dùng ESP32 (cụ thể là ESP32-CAM) đọc chỉ số công tơ điện / nước rồi đưa lên Home Assistant. Trong một bài viết trước thì các bạn cũng đã biết ESP32 đủ mạnh để dùng cho dự án nhận diện khuôn mặt, thì hôm nay nó sẽ nhận dạng các số trên đồng hồ của công tơ
CHUẨN BỊ
- ESP32-CAM (nên mua kèm luôn đế nạp để dễ thao tác) https://shp.ee/4t43kmx
- Thẻ nhớ (để chứa ít dữ liệu nên không cần dung lượng cao đâu nhé)
- Bìa cứng để làm vỏ bao (hoặc in 3D theo link của tác giả cho sịn sò 😘)
- Tải firmware và các thứ cần thiết https://github.com/jomjol/AI-on-the-edge-device/archive/refs/heads/master.zip
LÀM VỎ BAO
Cái này khá quan trọng để giúp cho ảnh chụp bởi ESP32-CAM luôn đồng nhất ánh sáng, không bị ảnh hưởng bởi môi trường. Bên dưới là mình lấy bìa cứng để làm
NẠP FIRMWARE CHO ESP32-CAM
Đơn giản nhất là các bạn dùng ESP32-Flasher-GUI có thể tải ở đây nha https://github.com/neoxharsh/ESP32-GUI-Flasher
Sau đó mở các file trong thư mục firmware
Chọn đúng cổng com (trên windows sẽ là COM1, COM2, ... còn mình đang dùng linux nên sẽ là /dev/ttyUSB0 nhé) rồi ấn nút Flash All là xong nha 👏
===========================
Cách bên dưới dùng esptools này sẽ khó khăn cho bạn mới làm
Có rất nhiều phần mềm giúp nạp ESP32 một cách dễ dàng, nhưng mình dùng esptools vì nó là cơ bản nhất nhé. Bác nào chưa biết cách dùng esptools thì có thể tham khảo thêm ở đây https://docs.espressif.com/projects/esptool/en/latest/esp32/installation.html
Trong file zip tải về ở phần chuẩn bị, sau khi giải nén các bạn sẽ có 3 files ở trong thư mục firmware là:
- bootloader.bin
- firmware.bin
- partitions.bin
Dùng esptools để nạp cho ESP32-CAM như sau:
esptool write_flash 0x01000 bootloader.bin 0x08000 partitions.bin 0x10000 firmware.bin
THẺ NHỚ VÀ CONFIG WIFI
Các bạn mở file sd-card > wlan.ini sau đó thay đổi cài đặt ssid và password thành tên wifi và password của bạn
Sau đó chép toàn bộ file và thư mục bên trong thư mục sd-card vào thẻ nhớ và gắn vào ESP32-CAM
Bây giờ ESP32-CAM đã sẵn sàng hoạt động rồi, bạn chỉ cần cấp nguồn chờ ESP32-CAM kết nối với wifi và tìm IP local của nó (mình thường sử dụng phần mềm fing có trên cả android và ios để kiếm IP của các thiết bị trong mạng)
THIẾT LẬP
Các bạn truy cập vào IP local của ESP32-CAM sẽ ra được một website hướng dẫn sơ sơ về thiết lập ban đầu như hình bên dưới
Các bạn ấn Next để qua bước tiếp theo. Bước này trên phần mềm dùng để thiết lập ảnh mẫu. Tuy nhiên chúng ta sẽ cần chỉnh focus cho ống kính để cho bức ảnh được rõ nét nhất.
Các bạn ấn vào nút Create New Reference trước, rồi sau đó mỗi lần muốn chụp thử một bức ảnh mới thì ấn tiếp vào nút Take Image
Chỉnh Focus:
Ống kính của camera sẽ có 2 phần như ảnh dưới
Cho phép chúng ta xoay chỉnh được, tuy nhiên camera mới sẽ có một lớp keo, nên ban đầu rất khó để xoay được ống kính. Các bạn phải hết sức cẩn thận kẻo làm hỏng!
Các bạn cứ xoay chỉnh và ấn nút Take Image để kiểm tra cho đến khi nào ảnh rõ nét thì thôi nhé
Chỉnh ảnh mẫu:
Sau khi ảnh ra đã rõ nét, thì các bạn chỉnh tiếp 2 thông số Pre-rotate Angle để xoay ảnh và LEDIntensity để tăng giảm độ sáng của đèn LED (có sẵn trên ESP32-CAM dùng để chiếu sáng mặt đồng hồ)
Khi ảnh đã ngay ngắn rồi thì ấn Update Reference Image để lưu lại và ấn Next để qua bước tiếp theo
Đánh dấu 2 điểm đối chiếu để cân đối ảnh
Ở bước này chúng ta phải đánh dấu 2 ảnh tĩnh (chữ, logo ...) để giúp cho phần mềm tự căn chỉnh được ảnh. Vì vậy cần chọn các phần không có chuyển động như logo, chữ viết tĩnh.
- Select Reference: chọn để thiết lập ảnh 1 hoặc ảnh 2 (phải thiết lập đủ 2 ảnh)
- x, y, dx, dy: là tọa độ và độ rộng, độ cao của khung ảnh đối chiếu (để chỉnh chi tiết, có thể thao tác chọn ảnh nhỏ trực tiếp trên ảnh mẫu đang hiển thị)
- Update Reference: ấn nút này để cập nhật ảnh ảnh đối chiếu
Sau khi chỉnh xong rồi các bạn nhớ ấn nút Save all to Config.ini để lưu lại và ấn Next để qua bước tiếp theo
Chọn vị trí chỉ số công tơ
Ở bước này, các bạn cần đánh dấu cho phần mềm biết từng ô dùng để nhận dạng chữ số của của công tơ
- Number: Nếu có nhiều nhóm dãy số cần nhận dạng khác nhau (ví dụ công tơ điện các bạn muốn nhận dang luôn cả số volt ...) thì thêm bớt ở đây. Còn mình dùng cho công tơ nước chỉ có một dãy số nên cứ để nguyên cái main như mặc định.
- x, y, dx, dy: là tọa độ và độ rộng, độ cao của khung từng chữ số. Thường mình chọn trực tiếp trên ảnh rồi dùng số này để tùy chỉnh lại. Nếu cần thêm bớt ô số thì ấn vào nút New ROI (after current) / Delete ROI và phải lưu ý về thứ tự các ô trong danh sách.
Sau khi làm xong hết các số trong danh sách thì nhớ ấn nút Save all to Config.ini để lưu lại nha.
Tiếp tục ấn Next để qua bước tiếp theo. Bước tiếp theo cũng như bước vừa rồi nhưng dùng để nhận dạng chỉ số dạng kim quay tròn (Analog). Cái này đồng hồ nào cũng có nhưng hóa đơn thì chỉ tính đến m3, không tính chi li đến 0,0001 nên mình bỏ qua. Bằng cách bỏ dấu check ở Edit Analog rồi ấn Next để hoàn thành
Bước cuối cùng là config:
- DecimalShift: vị trí của dấu phân cách thập phân, như mình lấy đến 0,1m3 nên số này để là -1
- MQTT: cài đặt MQTT để liên kết vào Home Assistant
Sau đó Next qua bước khởi động lại là OK rồi nha 👍
ĐƯA LÊN HOME ASSISTANT VỚI MQTT
Sau khi khởi động lại nếu nó nhận dạng chính xác và mục error không báo lỗi gì là ok 👌 nha.
Trên Home Assistant chúng ta thêm vào config sensor như sau:
- platform: mqtt
name: "Đồng hồ nước"
icon: mdi:water-pump
state_topic: "wasserzaehler/main/raw"
value_template: "{{ value }}"
unit_of_measurement: "m3"
Và đây là thành quả khi lên Home Assistant:
Đăng nhận xét