Merubah address atau ID atau Alamat sensor PZEM 016 atau PZEM 004 sangat di perlukan jika ingin memonitoring banyak beban dengan menggunakan satu modul converter modbus aja. Jika ingin tahu lebih lanjut modul modbus bisa click button di bawah ini.
Setiap sensor PZEM-016 akan kita rubah address nya dan harus berbeda, misal nya adalah sebagai berikut,
- Sensor PZEM 016 pertama dengan Address 0x01(default)
- Sensor PZEM 016 ke dua dengan Address 0x02
- Sensor PZEM 016 ke tiga dengan Address 0x03
- dan seterus nya jika ingin menggunakan sensor PZEM 016 sampai 10 pcs misal nya
Dengan demikian akan sangat menghemat controller. Cukup satu controller bisa membaca sensor pzem 016 yang banyak.
Program Merubah address pzem 016 pzem 004
Address untuk pzem 016 dan 004 sama, jadi program ini bisa di gunakan untuk sensor pzem 004 juga. Sebelum merubah, silahkan download library modbusmaster, cukup click link di bawah ini,
Langkah selanjut nya adalah wiring secara bergantian sensor pzem 016 seperti gambar di bawah ini,
Setelah itu, pilih jenis Board ESP8266 Boards -> Generic ESP8266 Dev, kemudian copy paste program di bawah ini
#include <ModbusMaster.h>
ModbusMaster node;
static uint8_t old_address = 1; //default address 0x01
static uint8_t new_address = 2;
#include <SoftwareSerial.h>
SoftwareSerial pzemSerial(13, 14);
#define EN 12
void setup() {
Serial.begin(9600);
pzemSerial.begin(9600);
pinMode(EN, OUTPUT);
Serial.println();
delay(1000);
for (int i = 0; i < 2; i++) {
changeAddress(old_address, new_address);
delay(5000);
}
}
void loop() {
}
void changeAddress(uint8_t OldslaveAddr, uint8_t NewslaveAddr)
{
static uint8_t SlaveParameter = 0x06;
static uint16_t registerAddress = 0x0002; // Register address to be changed
uint16_t u16CRC = 0xFFFF;
u16CRC = crc16_update(u16CRC, OldslaveAddr);
u16CRC = crc16_update(u16CRC, SlaveParameter);
u16CRC = crc16_update(u16CRC, highByte(registerAddress));
u16CRC = crc16_update(u16CRC, lowByte(registerAddress));
u16CRC = crc16_update(u16CRC, highByte(NewslaveAddr));
u16CRC = crc16_update(u16CRC, lowByte(NewslaveAddr));
Serial.println("Changing Slave Address");
digitalWrite(EN, HIGH);//ditambah
delay(10);//ditambah
pzemSerial.write(OldslaveAddr);
pzemSerial.write(SlaveParameter);
pzemSerial.write(highByte(registerAddress));
pzemSerial.write(lowByte(registerAddress));
pzemSerial.write(highByte(NewslaveAddr));
pzemSerial.write(lowByte(NewslaveAddr));
pzemSerial.write(lowByte(u16CRC));
pzemSerial.write(highByte(u16CRC));
digitalWrite(12, LOW);//ditambah
delay(10);//ditambah
Serial.print("respon: ");
while (pzemSerial.available() > 0) {
Serial.print(pzemSerial.read(), HEX);
Serial.print(",");
}
Serial.println();
delay(1000);
}
Pada Program di atas kita akan merubah address default ( 0x01 ) menjadi 0x02, di address baru, upload program dan lihat di serial monitor. Jika respon nya adalah seperti ini gambar di bawah ini, maka artinya address berhasil untuk di rubah
Silahkan ganti adress pzem sensor yang lain dengan mengganti line code di bawah ini,
static uint8_t old_address = 1; //default address 0x01
static uint8_t new_address = 2;
Tutorial Selanjut nya
Selanjut nya kita akan mencoba membaca multiple sensor pzem-016 dengan modul converter kita di tutorial berikut nya. Wiring nya adalah seperti di bawah ini
Semoga Tutorial ini bermanfaat bagi teman-teman, Jika tertarik dengan modul converter modbus, silahkan tekan button di bawah ini
Terimakasih