#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// Network credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Settings
const char* mqttServer = "ihub.vloginnovations.com";
const int mqttPort = 1883;
const char* accessToken = "pfj6qqab44awd3naexui";
// GPIO pins for LEDs
const int led1Pin = 27;
const int led2Pin = 19;
const int led3Pin = 18;
float kWh = 0;
unsigned long lastmillis = millis();
WiFiClient wiFiClient;
PubSubClient mqttClient(wiFiClient);
JsonDocument doc;
#define vCalibration 106.8
#define currCalibration 0.52
void setupWiFi() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi..");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected.");
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]: ");
String message;
for (unsigned int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
deserializeJson(doc, message);
String method = doc["method"];
const bool params = doc["params"];
String led1= "led1";
const char* led2= "led2";
const char* led3= "led3";
Serial.println(method );
Serial.println( led1);
Serial.println(method == led1);
if (method== led1){
if (params == 0) digitalWrite(led1Pin, LOW);
if (params == 1) digitalWrite(led1Pin, HIGH);
}
if (method== led2){
if (params == 0) digitalWrite(led2Pin, LOW);
if (params == 1) digitalWrite(led2Pin, HIGH);
}
if (method== led3){
if (params == 0) digitalWrite(led3Pin, LOW);
if (params == 1) digitalWrite(led3Pin, HIGH);
}
}
void setup() {
setupWiFi();
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setCallback(callback);
// Connect to MQTT Broker
while (!mqttClient.connected()) {
Serial.print("Connecting to MQTT Broker...");
if (mqttClient.connect("ESP32Client", accessToken, NULL)) {
Serial.println("connected");
// Subscribe to RPC topics
mqttClient.subscribe("v1/devices/me/rpc/request/+");
} else {
Serial.print("failed with state ");
Serial.print(mqttClient.state());
delay(2000);
}
}
}
void sendCurrentSensorDataToTB(float CurrentSensor1) {
String jsonData = "{\"CurrentSensor1\":" + String(CurrentSensor1, 5) +"}";
mqttClient.publish("v1/devices/me/telemetry", jsonData.c_str());
Serial.println("Data sent");
}
void loop() {
mqttClient.loop();
}