ESP32-CAM Đọc công tơ điện nước và đưa lên Home Assistant

ESP32-CAM Đọc công tơ điện nước và đưa lên Home Assistant

  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Ị

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 ssidpassword 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:


Bạn có thể thích những bài đăng này