Hướng dẫn ESP32 Light Sensor – Cách dùng cảm biến ánh sáng BH1750 với ESP32

Trong bài này, IoTZone sẽ hướng dẫn bạn về chủ đề ESP32 Light Sensor – Cách dùng cảm biến ánh sáng dựa trên mạch ESP32, thông qua Arduino IDE.

Cảm biến cường độ ánh sáng BH1750 sử dụng giao thức I2C để giao tiếp với ESP32. Mình sẽ hướng dẫn bạn cách:

  • Kết nối cảm biến ánh sáng BH1750 với ESP32
  • Cài đặt các thư viện cần dùng
  • Lập trình 1 chương trình đơn giản để đọc cường độ ánh sáng trong môi trường

Giới thiệu cảm biến ánh sáng BH1750

Đây là cảm biến có thể đo được cường độ ánh sáng xung quanh và trả về theo đơn vị lux. Phạm vi đo thông thường của cảm biến này thường nằm trong khoảng từ 1 đến hơn 60 000 lux.

Cảm biến này có thể có nhiều dòng khác nhau, mỗi dòng đều có ưu nhược điểm riêng. Bạn có thể cân nhắc và chọn mua dòng nào phù hợp nhất với mình.

Hướng dẫn ESP32 Light Sensor - Một số loại cảm biến BH1750
Hướng dẫn ESP32 Light Sensor – Một số loại cảm biến BH1750

BH1750 hỗ trợ 2 chế độ đo khác nhau: Chế độ đo liên tục và chế độ đo một lần. Tùy vào nhu cầu của dự án ESP32 Light Sensor mà bạn có thể sử dụng các chế độ khác nhau:

  • Đo liên tục: Cảm biến liên tục đo và trả về cường độ ánh sáng từ môi trường
  • Đo một lần: Đo giá trị ánh sáng xung quanh 1 lần, sau đó tắt, không hoạt động nữa, trừ khi có hiệu lệnh mới từ mạch điều khiển

Với cảm biến ánh sáng này, chúng ta có thể xây dựng nhiều dự án thú vị, ví dụ như:

  • Kiếm tra thời gian hiện tại là ban ngày hay ban đêm
  • Làm hệ thống đèn thông minh: trời tối thì tự bật đèn
  • Điều chỉnh độ sáng của đèn tùy theo độ sáng của môi trường xung quanh
  • Điều chỉnh độ sáng của màn hình LCD
  • Kiểm tra xem đèn LED có đang bật không
  • ….. (và nhiều ứng dụng thú vị khác)

Sơ đồ các chân của cảm biến BH1750:

  • VCC: Chân nguồn (3,3V hoặc 5V)
  • GND
  • SCL
  • SDA (chân dữ liệu)
  • ADD (chọn địa chỉ)

Ghi chú: Chân ADD thường dùng để cấu hình địa chỉ I2C:

  • Nếu điện áp trên chân nhỏ hơn 0,7VCC, địa chỉ là 0x23.
  • Ngược lại, địa chỉ là 0x5C

Tổng quan dự án ESP32 Light Sensor

Chúng ta đã tìm hiểu về cảm biến light sensor BH1750 ở trên. Dưới đây, chúng ta hãy cùng làm 1 dự án đơn giản để biết cách sử dụng chúng nhé!

Chuẩn bị phần cứng

  • Cảm biến ánh sáng BH1750
  • ESP32
  • Breadboard
  • Dây jumer

Sơ đồ kết nối ESP32 và BH1750

Trong dự án ESP32 Light Sensor này, mình sẽ kết nối cảm biến BH1750 với chân I2C trên mạch ESP32, cụ thể như hình:

Cách kết nối cho dự án ESP32 Light Sensor
Cách kết nối cho dự án ESP32 Light Sensor
BH1750ESP32
VCC3,3V
GNDGND
SCLGPIO 22
SDA (Dữ liệu)GPIO 21
ADD*Không kết nối

Khi không kết nối chân ADD, địa chỉ I2C sẽ là 0x23.

Nếu bạn muốn đổi thành 0x5C, bạn hãy kết nối với 3.3V.

Hiện thực dự án

Trước tiên, bạn phải đảm bảo đã cài ESP32 trên Arduino IDE của bạn nhé!

Nếu chưa cài, bạn có thể tham khảo hướng dẫn bên dưới:

Cài đặt thư viện BH1750

Bạn mở Arduino IDE, truy cập theo đường dẫn: Sketch >> Include Library >> Manage Libraries rồi tìm kiếm tên “BH1750“:

Cài thư viện cảm biến ánh sáng BH1750
Cài thư viện cảm biến ánh sáng BH1750

Sau đó, bạn nhấn vào Install và chờ thư viện được cài nhé!

Chương trình mẫu – Đọc giá trị cảm biến ánh sáng qua ESP32

Dưới đây là đoạn code mẫu có sẵn trong thư viện (có tên là BH1750test), bạn có thể mở File > Examples > BH1750 > BH1750test trong Arduino IDE là sẽ thấy:

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

void setup(){
  Serial.begin(9600);

  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  Wire.begin();
  // On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
  // For Wemos / Lolin D1 Mini Pro and the Ambient Light shield use Wire.begin(D2, D1);

  lightMeter.begin();

  Serial.println(F("BH1750 Test begin"));
}

void loop() {
  float lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

Chương trình trên sẽ giúp hệ thống đo cường độ ánh sáng từ môi trường, và hiển thị lên màn hình Serial của Arduino IDE.

Ngoài ra, trong thư viện BH1750 còn nhiều đoạn code thú vị khác, bạn có thể lần lượt khám phá thử nhé!

Giải thích chương trình mẫu

Khai báo các thư viện cần thiết (Wire.h để sử dụng giao thức I2C và BH1750 để đọc giá trị từ cảm biến):

#include <Wire.h>
#include <BH1750.h>

Tạo 1 object BH1750 và đặt tên là lightMeter (đồng hồ đo ánh sáng):

BH1750 lightMeter;

Trong setup(), bạn khởi tạo Serial Monitor với tốc độ baud là 9600:

Serial.begin(9600);

Khởi tạo giao thức I2C, chúng sẽ bắt đầu truyền thông trên các chân I2C mặc định của ESP32.

Wire.begin();

Khởi tạo cảm biến bằng cách dùng begin() trên object BH1750 có tên là (lightMeter) đã tạo lúc nãy:

lightMeter.begin();

Trong vòng lặp loop(), chúng ta tạo 1 biến tên là lux để lưu giá trị cường độ đo được. Để nhận giá trị, bạn cần gọi hàm readLightLevel() trong object (lightMeter):

float lux = lightMeter.readLightLevel();

Hiển thị giá trị đo được từ cảm biến lên Serial Monitor trên Arduino IDE:

Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");

Cho phép hiển thị kết quả sau mỗi giây:

delay(1000);

Đến đây, chúng ta đã hoàn thành dự án ESP32 Light Sensor đơn giản:

Demo dự án

Bạn hãy nạp đoạn code ESP32 Light Sensor trên vào bo mạch của mình. Sau đó, hãy mở màn hình Serial Monitor của Arduino IDE ở tốc độ 9600 và nhấn nút RST trên ESP32 nhé!

Bạn sẽ thấy các giá trị về độ sáng sẽ được in và hiển thị trên màn hình Serial liên tục sau mỗi giây:

Demo dự án ESP32 Light Sensor

Lời kết

Trên đây, IoTZone đã hướng dẫn bạn chi tiết cách thực hiện một dự án ESP32 Light Sensor đơn giản: Đo cường độ ánh sáng từ môi trường xung quanh và hiển thị lên màn hình Serial Monitor. Bạn đã hiện thực được dự án này chưa? Chia sẻ với chúng tôi nhé!

IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *