Updated Uabid
Updated Uabid
h>
#include "RTClib.h"
#include <ZMPT101B.h>
#include <Robojax_AllegroACS_Current_Sensor.h>
#include <SD.h>
#include <SPI.h>
// RTC
RTC_DS1307 rtc;
DateTime now;
char daysOfTheWeek[7][12] = { "Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday" };
// Voltage Sensor
#define SENSITIVITY 500.0f
ZMPT101B voltageSensor(A6, 50.0);
// SD Card
int CS_PIN = 53;
File myFile;
char data;
// Current Sensor
const int VIN = A3;
const int MODEL = 3;
Robojax_AllegroACS_Current_Sensor robojax(MODEL, VIN);
void setup() {
Serial.begin(9600); // Serial Monitor
Serial1.begin(115200); // Serial communication with ESP32
// SD Card Initialization
Serial.println("Initializing SD card...");
pinMode(CS_PIN, OUTPUT);
if (SD.begin(CS_PIN)) {
Serial.println("SD card is ready to use.");
} else {
Serial.println("SD card initialization failed");
return;
}
// RTC Initialization
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1) delay(10);
}
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime currentDateTime = rtc.now();
updateVoltage();
updateCurrent();
calculatePower();
calculateEnergy();
sendDataToESP32(currentDateTime);
writeData(currentDateTime);
delay(1000); // Delay to avoid flooding the serial communication
}
void updateVoltage() {
voltage = voltageSensor.getRmsVoltage();
Serial.print("Voltage: ");
Serial.println(voltage); // Print the voltage for debugging
}
void updateCurrent() {
current = robojax.getCurrentAverage(300);
Serial.print("Current: ");
Serial.println(current); // Print the current for debugging
}
void calculatePower() {
power = voltage * current;
Serial.print("Power: ");
Serial.println(power); // Print the power for debugging
}
void calculateEnergy() {
unsigned long currentTime = millis();
unsigned long timeDiff = currentTime - lastTime;
energy += (power * timeDiff) / (3600.0 * 1000.0); // Convert milliseconds to
hours and accumulate energy
lastTime = currentTime;
Serial.print("Energy: ");
Serial.println(energy); // Print the energy for debugging
}
Serial1.println(dataToSend);
}
Serial.print("Voltage: ");
Serial.print(voltage, 2);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current, 2);
Serial.println(" A");
Serial.print("Power: ");
Serial.print(power, 2);
Serial.println(" W");
Serial.print("Energy: ");
Serial.print(energy, 2);
Serial.println(" Wh");
Serial.println();
ESP32
void setup() {
Serial.begin(115200); // Initialize serial monitor
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Initialize UART2 (TX2=17,
RX2RX2=16)
}
void loop() {
if (Serial2.available()) {
String receivedData = Serial2.readStringUntil('\n');
Serial.println(receivedData);
}
}
Webpage
#include <WiFi.h>
#include <WebServer.h>
// WiFi credentials
const char* ssid = "Talha_desktop";
const char* password = "Bitcoin00";
void setup() {
Serial.begin(115200); // Initialize serial monitor
Serial2.begin(115200, SERIAL_8N1, 16, 17); // Initialize UART2 (TX2=17, RX2=16)
// Connect to Wi-Fi
Serial.println();
Serial.println("Connecting to Wi-Fi");
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("Wi-Fi connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
void loop() {
// Check if data is available from the Arduino
if (Serial2.available()) {
receivedData = Serial2.readStringUntil('\n'); // Read the incoming data
Serial.println(receivedData); // Print the received data to the serial monitor
}