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

IMG_20251206_154026.jpg

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:

  1. Automatic brightness control
  2. Smart agriculture (light monitoring for plants)
  3. Indoor lighting automation
  4. Solar energy projects
  5. Smart homes & IoT dashboards


Supplies

  1. ESP32 Dev Board
  2. BH1750 Light Intensity Sensor
  3. Jumper wires
  4. Breadboard
  5. A Wi-Fi connection
  6. Your V-VAC MQTT topic (given by V-VAC)

Wiring the BH1750 to ESP32 (Easy Pin Connections)

Screenshot 2025-09-20 014338.png

Connect the Esp32 and Sensor according to the connection Diagram.

Install Required Arduino Libraries

  1. WiFi by Arduino // This library is usually built-in, but verify that it is installed.
  2. PubSubClient by Nick O'Leary
  3. BH1750 by Christopher Laws
  4. OneWire by Paul Stoffregen

VVAC Cloud Setup

Steps to Connect V-VAC :

  1. Log in to your V-VAC account. (Create a new account if not signed up already.)
  2. In the Devices section add a new device.
  3. Select common device and enter the details of the device.
  4. Copy the Device Token and paste it in the MQTT section of the code.
  5. 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

Screenshot 2025-11-17 165449.png
  1. In Dashboard section you can configure widgets for your required data.
  2. Click “Create Dashboard”.
  3. Give your dashboard a name (e.g., Door Status Dashboard).
  4. Click the 3rd icon in the dashboard to open the dashboard.
  5. Inside the dashboard editor, click “Edit” and click "Add Widget" to add new widgets.
  6. In the selection menu choose the required widget.
  7. Link widget to a Device telemetry key (the data your device sends).
  8. After customizing your widget, click the Show on Dashboard button to display it on the dashboard.
  9. To save your changes, click the Save button at the top-right corner of the dashboard.
  10. 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.