#include <WiFi.h>
#include "PubSubClient.h"
#include <ArduinoJson.h>

// Setting Awal MQTT
char *mqttServer = "broker.emqx.io";
int mqttPort = 1883;
String myClientID = "001";
String Topic = "blksby/data";

//Membuat Object MQTT Client dan Jenis Koneksi
WiFiClient wifi;
PubSubClient mqttClient(wifi);

const int vr = 220;
const float ir = 0.78;
const float pf = 0.98;

char* ssid = "Wokwi-GUEST";
char* pass = "";

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Hello, ESP32!");
  WiFi.mode(WIFI_STA);    // Agar ESP32 menjadi mode Station
  WiFi.begin(ssid,pass);  // Meminta ESP untuk connect
  while(WiFi.status() != WL_CONNECTED){
    delay(100);
    Serial.println("*");
  }
  Serial.println(" ESP 32 telah berhasil Connect");
  // Memerintahkan EPS untuk tahu alamat broker
  init_to_broker(mqttServer, mqttPort); 
  //Memerintahkan untuk Connect ke Broker
  connect_to_broker(myClientID);

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("Nilai Tegangan : ");
  Serial.print(vr);
  Serial.print("  Nilai Arus : ");
  Serial.println(ir);
  Serial.print("  Faktor Daya : ");
  Serial.println(pf);

  sendDataSensor(Topic, vr, ir, pf);
  delay(1000); // this speeds up the simulation
}

//Membuat Json Banyak Data untuk di Publish
void sendDataSensor(String topic, int voltage, float current, float pf) {
  StaticJsonDocument<100> doc;
  doc["Tegangan"] = voltage;
  doc["Arus"] = current;
  doc["Faktor Daya"] = pf;

  char jsonBuffer[100];
  serializeJson(doc, jsonBuffer);

  mqttClient.publish(topic.c_str(), jsonBuffer);
}

//Fungsi untuk tahu alamat server dan port Broker
void init_to_broker(char* myMqttServer, int myMqttPort) {
  mqttClient.setServer(myMqttServer, myMqttPort); // Mengatur detail broker target  yang digunakan
}

//Fungsi untuk connect ke Broker
void connect_to_broker(String clientName) {
  Serial.println("Connecting to MQTT Broker...");
  String clientId = "ESP32Client-" + clientName;
  mqttClient.connect(clientId.c_str()); // Connecting to Broker
  while (!mqttClient.connected()) {
      Serial.print("failed, rc=");
      Serial.println(mqttClient.state());
      Serial.println("Reconnecting to MQTT Broker..");
      delay(1000);  
  }
  Serial.print(clientId);
  Serial.println(" Device to Broker Connected.");
}
Loading
esp32-devkit-v1