Smart Light Intensity Monitoring Using ESP32, BH1750 Sensor and VVAC Cloud Dashboard
by vvaciot in Circuits > Electronics
26 Views, 0 Favorites, 0 Comments
Smart Light Intensity Monitoring Using ESP32, BH1750 Sensor and VVAC Cloud Dashboard
In this DIY project, you will learn how to build a Smart Light Intensity Monitoring System using the BH1750 Digital Light Sensor and the ESP32, with data displayed live on the VVAC IoT Cloud Platform.
The BH1750 is a high-precision lux sensor widely used in:
- Automatic brightness control
- Smart agriculture (light monitoring for plants)
- Indoor lighting automation
- Solar energy projects
- Smart homes & IoT dashboards
Supplies
- ESP32 Dev Board
- BH1750 Light Intensity Sensor
- Jumper wires
- Breadboard
- A Wi-Fi connection
- Your V-VAC MQTT topic (given by V-VAC)
Wiring the BH1750 to ESP32 (Easy Pin Connections)
Connect the Esp32 and Sensor according to the connection Diagram.
Install Required Arduino Libraries
- WiFi by Arduino // This library is usually built-in, but verify that it is installed.
- PubSubClient by Nick O'Leary
- BH1750 by Christopher Laws
- OneWire by Paul Stoffregen
VVAC Cloud Setup
Steps to Connect V-VAC :
- Log in to your V-VAC account. (Create a new account if not signed up already.)
- In the Devices section add a new device.
- Select common device and enter the details of the device.
- Copy the Device Token and paste it in the MQTT section of the code.
- Copy the username and password from the setup in devices section and paste it in the MQTT section of the code.
For further details check out (How to connect to V-VAC).
ESP32 + BH1750 Code
#include <WiFi.h>
#include <PubSubClient.h>
#include <BH1750.h>
#include <Wire.h>
BH1750 lightMeter;
// WiFi Configuration
const char* ssid = "Your_Wifi_SSID"; // eg. ssid = "ssid"
const char* password = "Your_Wifi_Password"; // eg. password = "password"
// MQTT Configuration
const char* mqtt_broker = "data.volkkommen.com";
const int mqtt_port = 1883;
const char* mqtt_username = "Your_MQTT_Username"; // eg. mqtt_username = "mqtt_username"
const char* mqtt_password = "Your_MQTT_Password"; // eg. mqtt_password = "mqtt_password"
const char* device_token = "Your_Device_Token"; // eg. device_token = "6810eb7g27560f46"
WiFiClient espClient;
PubSubClient mqttClient(espClient);
void setupWiFi() {
Serial.println();
Serial.print("Connecting to WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void connectMQTT() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection... ");
if (mqttClient.connect(device_token, mqtt_username, mqtt_password)) {
Serial.println("connected to MQTT broker");
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" trying again in 5 seconds");
delay(5000);
}
}
}
String sensor_working() {
// Example data (modify with your sensor/data)
float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(1000);
String payload = "{\"Light\":" + String(lux) + "}";
return payload;
}
void publishData() {
String payload = sensor_working();
String topic_p = "data/v1/" + String(device_token);
if (mqttClient.publish(topic_p.c_str(), payload.c_str())) {
Serial.println("Message published successfully " + payload);
} else {
Serial.println("Failed to publish message");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(115200);
setupWiFi();
mqttClient.setServer(mqtt_broker, mqtt_port);
Wire.begin();
lightMeter.begin();
Serial.println(F("BH1750 Test begin"));
}
void loop() {
if (WiFi.status() != WL_CONNECTED) { // Maintain WiFi connection
setupWiFi();
}
if (!mqttClient.connected()) { // Maintain MQTT connection
connectMQTT();
}
mqttClient.loop();
static unsigned long lastPublishTime = 0; // Publish data every 2 seconds
if (millis() - lastPublishTime >= 2000) {
publishData();
lastPublishTime = millis();
}
}
Real-Time Light Monitoring on VVAC
- In Dashboard section you can configure widgets for your required data.
- Click “Create Dashboard”.
- Give your dashboard a name (e.g., Door Status Dashboard).
- Click the 3rd icon in the dashboard to open the dashboard.
- Inside the dashboard editor, click “Edit” and click "Add Widget" to add new widgets.
- In the selection menu choose the required widget.
- Link widget to a Device telemetry key (the data your device sends).
- After customizing your widget, click the Show on Dashboard button to display it on the dashboard.
- To save your changes, click the Save button at the top-right corner of the dashboard.
- You can now remotely see the Door status from anywhere around the world.
For more IoT projects and tutorials, visit the official V-VAC Platform - V-VAC.