#include <WiFi.h>
#include <PZEM004Tv30.h>
#include "PubSubClient.h"
// MQTT Setting
char *mqttServer = "broker.emqx.io";
int mqttPort = 1883;
String myClientID = "001";
String Topic_1 = "edspert/data/tegangan";
String Topic_2 = "edspert/data/arus";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
#define RXD2 16 // Pin bisa diganti dengan yang laen
#define TXD2 17
// PZEM004Tv30 pzem_r(&Serial2);
PZEM004Tv30 pzem(Serial2, 16, 17); // Support Serial1 dan Serial2
float vr, ir, freq, pf_r, energy, power;
char* ssid = "sonyAlfa";
char* pass = "sonson123";
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); // ESP32 Serial2 Config
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");
init_to_broker(mqttServer, mqttPort); // ngasi tau ke EPS untuk alamat broker
connect_to_broker(myClientID);
}
void loop() {
// put your main code here, to run repeatedly:
baca_pzem();
Serial.print("Nilai Tegangan : ");
Serial.print(vr);
Serial.print(" Nilai Arus : ");
Serial.println(ir);
mqtt_publish(Topic_1, vr);
mqtt_publish(Topic_2, ir);
delay(1000); // this speeds up the simulation
}
void baca_pzem(){
vr = pzem.voltage();
ir = pzem.current();
freq = pzem.frequency();
pf_r = pzem.pf();
}
//Menghubungkan ke MQTT
void init_to_broker(char* myMqttServer, int myMqttPort) {
mqttClient.setServer(myMqttServer, myMqttPort); // Mengatur detail broker target yang digunakan
// jika kita ingin menerima pesan untuk langganan yang dibuat oleh klien sebagai subscriber
// mqttClient.setCallback(callback);
}
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.");
}
void mqtt_publish(String yourTopic, float yourPayload){
char yourPayloadString[8];
dtostrf(yourPayload, 1, 2, yourPayloadString);
mqttClient.publish(yourTopic.c_str(), yourPayloadString);
Serial.print(yourTopic);
Serial.print(" ==> ");
Serial.println(yourPayload);
}