Advertisement
mikroavr

baca_pzem

Jun 10th, 2022
1,331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  *  modif by mikroavr
  3.  *  jimmi sitepu
  4.  *  31-05-2022
  5.  */
  6.  
  7. #include <ModbusMaster.h>
  8. ModbusMaster node;
  9. static uint8_t pzemSlaveAddr = 1;
  10.  
  11. #define EN 2
  12. #define pzemSerial Serial1
  13.  
  14. float voltage,  current, power, energy, freq, pf;
  15.  
  16. void preTransmission()
  17. {
  18.   digitalWrite(EN, 1);
  19. }
  20.  
  21. void postTransmission()
  22. {
  23.   digitalWrite(EN, 0);
  24. }
  25.  
  26. void setup() {
  27.   pinMode(EN, OUTPUT);
  28.   digitalWrite(EN, 0);
  29.  
  30.   Serial.begin(115200);
  31.   pzemSerial.begin(9600, SERIAL_8N1, 17, 16);
  32.  
  33.  
  34.   node.begin(pzemSlaveAddr, pzemSerial);
  35.   node.preTransmission(preTransmission);
  36.   node.postTransmission(postTransmission);
  37.  
  38. }
  39. void loop() {
  40.  
  41.   uint8_t result;
  42.   result = node.readInputRegisters(0, 9); //read the 9 registers of the PZEM-014 / 016
  43.   if (result == node.ku8MBSuccess)
  44.   {
  45.     Serial.println("sukses modbus");
  46.     voltage = node.getResponseBuffer(0) / 10.0;
  47.  
  48.     uint32_t tempdouble = 0x00000000;
  49.  
  50.     tempdouble = node.getResponseBuffer(1);       //LowByte
  51.     tempdouble |= node.getResponseBuffer(2) << 8;  //highByte
  52.     current = tempdouble / 1000.0;
  53.  
  54.     tempdouble |= node.getResponseBuffer(3);       //LowByte
  55.     tempdouble |= node.getResponseBuffer(4) << 8;  //highByte
  56.     power = tempdouble / 10.0;
  57.  
  58.     tempdouble = node.getResponseBuffer(5);       //LowByte
  59.     tempdouble |= node.getResponseBuffer(6) << 8;  //highByte
  60.     energy = tempdouble;
  61.  
  62.     tempdouble = node.getResponseBuffer(7);
  63.     freq = tempdouble / 10.0;
  64.  
  65.     tempdouble = node.getResponseBuffer(8);
  66.     pf = tempdouble / 10.0;
  67.     print_data();
  68.  
  69.   } else {
  70.     Serial.println("Failed to read modbus");
  71.   }
  72.   delay(2000);
  73. }
  74.  
  75. void print_data() {
  76.   Serial.print(voltage);
  77.   Serial.print("V   ");
  78.  
  79.   Serial.print(current);
  80.   Serial.print("A   ");
  81.  
  82.   Serial.print(freq);
  83.   Serial.print("Hz   ");
  84.  
  85.   Serial.print(pf);
  86.   Serial.print("pf   ");
  87.   Serial.print("   ");
  88.  
  89.   Serial.print(power);
  90.   Serial.print("W  ");
  91.  
  92.   Serial.print(energy);
  93.   Serial.print("Wh  ");
  94.   Serial.println();
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement