Pendahuluan
Pada tutorial kali ini kita akan melakukan update tutorial sebelumnya yaitu Cara Mengukur Penggunaan Daya Listrik AC Rumah Menggunakan Arduino dan Sensor PZEM-004T dengan LCD 20×4 I2C , yang mana pada tutorial tersebut kita sudah membuat kwh meter atau power meter menggunakan PZEM-004T dan ditampilkan pada LCD 20×4, Untuk memudahkan memantauan kali ini kita akan menggunakan Blynk supaya data penggunaan listrik kita dapat di monitoring secara online dan realtime lewat internet dengan menggunakan smartphone
Komponen Yang Digunakan
Berikut adalah daftar komponen yang digunakan dalam proyek ini, Teman teman dapat mendapatkan nya di Golite Store:
- Sensor PZEM-004T – Beli Disini
- ESP32 Development Board – Beli Disini
- Kabel Jumper – Beli Disini
- Breadboard – Beli Disini
- Smartphone (untuk aplikasi Blynk)
Skema Sistem

Konfigurasi Pinout
- Microcontroller (ESP32) -> Sensor PZEM-004T
- VIN -> VCC
- GND -> GND
- RX2 -> TX
- TX2 -> RX
- Trafo CT -> Sensor PZEM-004T
- Kabel Merah -> Terminal No 4
- Kabel Hitam -> Terminal No 3
- Input AC 220V -> Sensor PZEM-004T
- Netral -> Terimal No 1
- Fasa -> Terimal No 2 (Harus di masukan pasa trafo CT Sesuai dengan skema diatas)
Skema sistem ini akan menghubungkan ESP32 dengan PZEM 004T hanya menggunakan 4 kabel , yaitu kabel power sensor (vcc dan gnd) dihubungkan pada Vin dan GND, Sementara RX dan TX dihubungkan secara silang pada power Serial2 atau TX2 dan Rx2. Sementara trafo CT dihubungkan pada Teriminal No 4 dan 3, dan yang terakhir Input AC 220V Dihubungkan pada terimanal no 1 dan 2 yang mana salah satu kabelnya harus melewati trafo CT terlebih dahulu.
Konfigurasi Pada Aplikasi Blynk IoT
Pada aplikasi Blynk kita harus buat template terlebih dahulu,

Setelah template berhasil terbuat langkah selanjutnya kita harus menambahankan widget yang mau di pakai untuk menampung data dari ESP32, disini kita akan menggunakan Gauge, Labeled Value dan SuperChart.

Setelah itu buat datastream pada V1,V2, V3, V4, V5 dan V6 dengan unit yang di sesuaikan untuk Voltage, Current, Power, Energy, Frequency dan PF.

Setelah itu klik tombol widget yang tadi kita buat dan pilih dengan datastream yang sesuai.

Setelah itu masuk ke setting lagi dan pilih tab Code, untuk mendapatkan kredensial yang kita perlukan untuk di paste pada program Arduino IDE

Program Arduino/ESP32
#include <PZEM004Tv30.h>
#define BLYNK_TEMPLATE_ID "xxxx"
#define BLYNK_TEMPLATE_NAME "xxx"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
// Uncomment your board, or configure a custom board in Settings.h
#define USE_ESP32_DEV_MODULE
//#define USE_ESP32C3_DEV_MODULE
//#define USE_ESP32S2_DEV_KIT
//#define USE_WROVER_BOARD
//#define USE_TTGO_T7
//#define USE_TTGO_T_OI
#include "BlynkEdgent.h"
#if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN)
#define PZEM_RX_PIN 16
#define PZEM_TX_PIN 17
#endif
#if !defined(PZEM_SERIAL)
#define PZEM_SERIAL Serial2
#endif
#if defined(ESP32)
PZEM004Tv30 pzem(PZEM_SERIAL, PZEM_RX_PIN, PZEM_TX_PIN);
#elif defined(ESP8266)
//PZEM004Tv30 pzem(Serial1);
#else
PZEM004Tv30 pzem(PZEM_SERIAL);
#endif
float voltage, current, power, energy, frequency, pf;
void setup() {
Serial.begin(115200);
delay(100);
// pzem.resetEnergy()
BlynkEdgent.begin();
}
void loop() {
// Print the custom address of the PZEM
Serial.print("Custom Address:");
Serial.println(pzem.readAddress(), HEX);
// Read the data from the sensor
voltage = pzem.voltage();
current = pzem.current();
power = pzem.power();
energy = pzem.energy();
frequency = pzem.frequency();
pf = pzem.pf();
// Check if the data is valid
if (isnan(voltage)) {
Serial.println("Error reading voltage");
} else if (isnan(current)) {
Serial.println("Error reading current");
} else if (isnan(power)) {
Serial.println("Error reading power");
} else if (isnan(energy)) {
Serial.println("Error reading energy");
} else if (isnan(frequency)) {
Serial.println("Error reading frequency");
} else if (isnan(pf)) {
Serial.println("Error reading power factor");
} else {
// Print the values to the Serial console
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
Serial.print("Current: "); Serial.print(current); Serial.println("A");
Serial.print("Power: "); Serial.print(power); Serial.println("W");
Serial.print("Energy: "); Serial.print(energy, 3); Serial.println("kWh");
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
Serial.print("PF: "); Serial.println(pf);
Blynk.virtualWrite(V1, voltage);
Blynk.virtualWrite(V2, current);
Blynk.virtualWrite(V3, power);
Blynk.virtualWrite(V4, energy);
Blynk.virtualWrite(V5, frequency);
Blynk.virtualWrite(V6, pf);
}
Serial.println();
BlynkEdgent.run();
}
Untuk program lebih lengkap bisa download disini.
Penjelasan Program
- Include Library: Program ini menggunakan library sebagai berikut :
PZEM004Tv30.h: Library ini digunakan untuk mengakses sensor PZEM004T dengan komunikasi serialBlynkEdgent.h: Library ini berfungsi untuk menghubungkan program pada Blynk IoT
- Deklarasi Variabel Global dan Objek:
pzem: membuat objek dengan nama pzem dari libraryPZEM004Tv30.hvoltage, current, power, energy, frequency, pf: Variabel global untuk menampung nilai dari sensor#define BLYNK_TEMPLATE_ID "xxxx": Diganti dengan Template ID yang sebelumnya telah didapatkan pada Blynk IoT#define BLYNK_TEMPLATE_NAME "xxx": Diganti dengan Template Name yang sebelumnya telah didapatkan pada Blynk IoT
- Loop Function:
Serial.begin(115200): Mengaktifkan komunikasi serial pada serial monitor dengan baud rate 115200 untuk keperluan debugging.pzem.resetEnergy(): Mereset nilai energi (kWh) pada sensor PZEM004T, Jika tidak mau reset maka bisa di komen saja.
- Loop Function:
pzem.readAddress(): Membaca alamat sensor PZEM004T dan menampilkan dalam bentuk hexadecimal pada serial monitor.pzem.voltage(), pzem.current(), ...: Membaca data dari sensor PZEM004T untuk tegangan, arus, daya, energi, frekuensi, dan faktor daya.isnan(): Memeriksa apakah data yang dibaca valid atau tidak.- Jika data valid, nilai-nilai tersebut dikirimkan ke Blynk menggunakan
Blynk.virtualWrite();Function - Jika ada kesalahan pembacaan, pesan kesalahan ditampilkan pada Serial Monitor
BlynkEdgent.run(): Untuk mengupdate data ke Blynk
Konfigurasi Pada Aplikasi Blynk IoT Untuk Terhubung Ke ESP32
Setelah program berhasil di upload kita harus menghubungkan ESP32 ke WiFi melalui Aplikasi Blynk IoT,
Pilih tombol Plus (+) pada pojok kanan home aplikasi Blynk , Setelah itu klik “Find device nearby”, setelah itu ikuti step yang di perantahkan, disini pada dasarnya kita hanya perlu memilih board ESP32 yang telah kita program sebelumnya, Pastikan bluetooth dan wifi pada hp kita sudah aktif

Setelah itu pilih nama wifi 2.4ghz yang akan kita pakai dan masukan juga password untuk wifi tersebut,

Setelah berhasil memasukan password maka ESP32 sudah berhasil terkoneksi dengan Blynk, kita juga dapat mengganti nama ESP32 ini pada aplikasi blynk nya

Pengujian
Tampilan pada Blynk IoT saat ESP32 sudah terhubung dan data berhasil terkirim

Tampilan hardware tanpa beban listrik, hanya tegangan saja yang tampil

Berikut adalah tampilan hardware dengan pengujian menggunakan beban lem bakar, sekarang data tegangan, arus, daya, energi, frequency dan pf sudah tampil pada aplikasi Blynk IoT

Kesimpulan
Dengan menyelesaikan tutorial ini, Kita telah berhasil membuat sistem monitoring penggunaan daya listrik 220V menggunakan sensor PZEM-004T, ESP32, dan Blynk IoT. Anda dapat terus mengembangkan proyek ini dengan menambahkan fitur-fitur tambahan atau mengintegrasikannya dengan sistem lain untuk pemantauan yang lebih kompleks.
perkenalkan saya zenul,ingin bertanya utk rumus/kodingan cara mengitung berapa Rp /Kwh bagaimana ya.kalo boleh dikirim via email informasinya,terimakasih