Skip to content

Commit

Permalink
Constructor overload for better ESP32 support
Browse files Browse the repository at this point in the history
+ example

Closes #20

Signed-off-by: Emil Muratov <gpm@hotplug.ru>
  • Loading branch information
vortigont committed Apr 15, 2021
1 parent e7f2202 commit f3e64fe
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
19 changes: 19 additions & 0 deletions PZEM004Tv30.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,25 @@ PZEM004Tv30::PZEM004Tv30(HardwareSerial* port, uint8_t addr)
init(addr);
}

#ifdef ESP32
/*!
* PZEM004Tv30::PZEM004Tv30
*
* Hardware serial constructor with custom pin mapping (esp32)
*
* @param port Hardware serial to use
* @param rxpin gpio pin to map rx
* @param txpin gpio pin to map tx
* @param addr Slave address of device
*/
PZEM004Tv30::PZEM004Tv30(HardwareSerial* port, uint8_t rxpin, uint8_t txpin, uint8_t addr){
port->begin(PZEM_BAUD_RATE, SERIAL_8N1, txpin, rxpin);
this->_serial = port;
this->_isSoft = false;
init(addr);
}
#endif

/*!
* PZEM004Tv30::~PZEM004Tv30
*
Expand Down
5 changes: 5 additions & 0 deletions PZEM004Tv30.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ class PZEM004Tv30
PZEM004Tv30(uint8_t receivePin, uint8_t transmitPin, uint8_t addr=PZEM_DEFAULT_ADDR);
#endif
PZEM004Tv30(HardwareSerial* port, uint8_t addr=PZEM_DEFAULT_ADDR);

#ifdef ESP32
PZEM004Tv30(HardwareSerial* port, uint8_t rxpin, uint8_t txpin, uint8_t addr=PZEM_DEFAULT_ADDR);
#endif

~PZEM004Tv30();


Expand Down
61 changes: 61 additions & 0 deletions examples/ESP32HWSerial/esp32hwserial.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include <Arduino.h>
#include <PZEM004Tv30.h>

/* Hardware Serial1 is usually occupied by USB2Serial converter
* so we will use Serial2
*/
HardwareSerial PzemSerial(2); // HW Serial UART2 default mapping is at pins IO-16 (RX2) and IO-17 (TX2)

// But just for example we will remap it to pins 21 (rx) and 22 (tx)
PZEM004Tv30 pzem(&PzemSerial, 21, 22);

void setup() {
Serial.begin(115200); // Serial1 is used for console output
}

void loop() {
float voltage = pzem.voltage();
if(!isnan(voltage)){
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
} else {
Serial.println("Error reading voltage");
}

float current = pzem.current();
if(!isnan(current)){
Serial.print("Current: "); Serial.print(current); Serial.println("A");
} else {
Serial.println("Error reading current");
}

float power = pzem.power();
if(!isnan(power)){
Serial.print("Power: "); Serial.print(power); Serial.println("W");
} else {
Serial.println("Error reading power");
}

float energy = pzem.energy();
if(!isnan(energy)){
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
} else {
Serial.println("Error reading energy");
}

float frequency = pzem.frequency();
if(!isnan(frequency)){
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
} else {
Serial.println("Error reading frequency");
}

float pf = pzem.pf();
if(!isnan(pf)){
Serial.print("PF: "); Serial.println(pf);
} else {
Serial.println("Error reading power factor");
}
Serial.printf("End: %u\n", millis());

delay(5000);
}

0 comments on commit f3e64fe

Please sign in to comment.