#define BLYNK_TEMPLATE_ID "TMPL3MIBWZX6Y"
#define BLYNK_TEMPLATE_NAME "Battery Management"
#define BLYNK_AUTH_TOKEN "8qZNIj3zsgKYsiOFymFBE6hP0ceMCyXq"
#define ONE_WIRE_BUS 4 // GPIO pin for DS18B20 data line
#include "DHT.h"
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define DHTPIN 32 // GPIO pin connected to the DATA pin of the DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int warningLED = 16;
const int relayPin = 18;
void setup() {
Serial.begin(115200);
dht.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (1);
}
pinMode(warningLED, OUTPUT);
digitalWrite(warningLED, LOW);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW);
WiFi.begin( "Wokwi-GUEST"
, "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
Blynk.begin("8qZNIj3zsgKYsiOFymFBE6hP0ceMCyXq", "Wokwi-GUEST", "");
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Battery Manager");
display.display();
delay(2000);
}
void checkBatteryStatus(float batteryVoltage, float batteryCurrent, float temperature) {
bool warning = false;
if (batteryVoltage < 3.0) {
digitalWrite(warningLED, HIGH);
Blynk.virtualWrite(V1, 1);
Blynk.logEvent("battery_voltage_low");
Serial.println("Warning: Battery Voltage is low!");
digitalWrite(relayPin, LOW);
warning = true;
} else if (batteryCurrent > 2.0) {
digitalWrite(warningLED, HIGH);
Blynk.virtualWrite(V0, 1);
Blynk.logEvent("battery_current_high");
Serial.println("Warning: Battery current is high!");
digitalWrite(relayPin, LOW);
warning = true;
} else if (temperature > 60.0) {
digitalWrite(warningLED, HIGH);
Blynk.virtualWrite(V2, 1);
Blynk.logEvent("battery_temperature_high");
Serial.println("Warning: Battery crosses its threshold temperature!");
digitalWrite(relayPin, LOW);
warning = true;
}
if (!warning) {
digitalWrite(warningLED, LOW);
Blynk.virtualWrite(V3, 0);
Serial.println("It's Working!");
digitalWrite(relayPin, HIGH);
}
}
void loop() {
Blynk.run();
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected, trying to reconnect...");
WiFi.begin("YourSSID", "YourPassword");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Reconnected to WiFi");
}
// Read DHT22 sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
int voltageValue = analogRead(34);
float batteryVoltage = voltageValue * (3.3 / 4095.0) * 4;
int currentValue = analogRead(35);
float batteryCurrent = currentValue * (3.3 / 4095.0);
display.clearDisplay();
display.setCursor(0, 0);
display.print("Voltage: ");
display.print(batteryVoltage);
display.print(" V");
display.setCursor(0, 10);
display.print("Current: ");
display.print(batteryCurrent);
display.print(" A");
display.setCursor(0, 20);
display.print("Temp: ");
display.print(temperature);
display.print(" C");
display.display();
Blynk.virtualWrite(V1, batteryVoltage);
Blynk.virtualWrite(V0, batteryCurrent);
Blynk.virtualWrite(V2, temperature);
checkBatteryStatus(batteryVoltage, batteryCurrent, temperature);
delay(1000);
}