#define BLYNK_TEMPLATE_ID "TMPL3M1ryAygj"
#define BLYNK_TEMPLATE_NAME "EV Parameters Monitoring"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
char auth[] = "V1rmG5iCxIl2PsAD3FJsfa6SI5vPrPh7";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const int speedPin = 34;
const int torquePin = 35;
const int batteryPin = 32;
#define ONE_WIRE_BUS 14
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const float totalBatteryCapacityKWh = 5.0;
const float chargingPower = 0.5;
float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
float estimateCapacity(float voltage) {
return mapFloat(voltage, 2.5, 5, 0, 100);
}
float remainingHoursToCharge(float capacityPercentage) {
float remainingCapacityKWh = totalBatteryCapacityKWh * (1 - (capacityPercentage / 100.0));
return remainingCapacityKWh / chargingPower;
}
void setup() {
Serial.begin(9600);
sensors.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Blynk.begin(auth, ssid, pass);
}
void loop() {
int speedValue = analogRead(speedPin);
int torqueValue = analogRead(torquePin);
int sensorValue = analogRead(batteryPin);
sensors.requestTemperatures();
float voltage = sensorValue * (5.0 / 4095.0);
float speed = speedValue * (100.0 / 4095.0);
float torque = torqueValue * (10.0 / 4095.0);
float capacity = estimateCapacity(voltage);
float temperatureC = sensors.getTempCByIndex(0);
float remainingHours = remainingHoursToCharge(capacity);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Motor Speed: ");
display.print(speed);
display.println(" %");
display.println("Motor Torque: ");
display.print(torque);
display.println(" Nm");
display.println("Capacity: ");
display.print(capacity);
display.println(" %");
display.println("Temperature: ");
display.print(temperatureC);
display.println(" °C");
display.println("Remaining Hours: ");
display.print(remainingHours);
display.println(" h");
display.display();
Serial.print("Capacity: ");
Serial.print(capacity);
Serial.println(" %");
Serial.print("Speed: ");
Serial.print(speed);
Serial.println(" %");
Serial.print("Torque: ");
Serial.print(torque);
Serial.println(" Nm");
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" °C");
Serial.print("Remaining Hours: ");
Serial.print(remainingHours);
Serial.println(" h");
Blynk.virtualWrite(V0, remainingHours);
Blynk.virtualWrite(V1, capacity);
Blynk.virtualWrite(V2, speed);
Blynk.virtualWrite(V3, torque);
Blynk.virtualWrite(V4, temperatureC);
Blynk.run();
delay(1000);
}