I'm still new with arduinoIDE codes and IoT. I had successfully transfer the data to the cloud but I don't know how to manipulate the refresh rate. I want to make the refresh rate to 2s, 5s, and also 10s. Right now I don't have any control to manipulate the refresh rate. Please help me to know what I can do in the code for this to happen.
post your code (with code tag. don't post keyword/IDs information)
I’m interested too. I’m having many problems in updating variables values
I think I just done it but I still share. If you have any comment on a better way I'm all ears
this is my code:
#include "settings.h"
#include <ArduinoOTA.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <ModbusMaster.h>
#include <ESP8266WiFi.h>
//////////////
#include <SoftwareSerial.h> // ( NODEMCU ESP8266 )
SoftwareSerial pzem1(D1,D2); // (TX,RX) connect to TX,RX of PZEM for NodeMCU
SoftwareSerial pzem2(D5,D6); // (TX,RX) connect to TX,RX of PZEM
#include <ModbusMaster.h>
ModbusMaster node1;
ModbusMaster node2;
//////////////
BlynkTimer timer;
double voltage_usage1, current_usage1, active_power1, active_energy1, frequency1, power_factor1, over_power_alarm1;
double voltage_usage2, current_usage2, active_power2, active_energy2, frequency2, power_factor2, over_power_alarm2;
uint8_t result; uint16_t data[6];
#define BLYNK_AUTH_TOKEN "" //Enter your blynk auth token
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = ""; //Enter your WIFi name
char pass[] = ""; //Enter your WIFI password
void setup() {
WiFi.setSleepMode(WIFI_NONE_SLEEP);
Serial.begin(115200);
Serial.println("Start serial");
pzem1.begin(9600);
pzem2.begin(9600);
Serial.println("Start PZEM serial");
node1.begin(1, pzem1);
node2.begin(1, pzem2);
Serial.println("Start PZEM"); // 1 = ID MODBUS
Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
/////set the data refresh rate
timer.setInterval(10000L, sendtoBlynk); // send values blynk server every 10 sec (10000ms)
/////
}
void sendtoBlynk() {
Blynk.virtualWrite(vPIN_VOLTAGE1, voltage_usage1);
Blynk.virtualWrite(vPIN_CURRENT_USAGE1, current_usage1);
Blynk.virtualWrite(vPIN_ACTIVE_POWER1, active_power1);
Blynk.virtualWrite(vPIN_ACTIVE_ENERGY1, active_energy1);
Blynk.virtualWrite(vPIN_FREQUENCY1, frequency1);
Blynk.virtualWrite(vPIN_POWER_FACTOR1, power_factor1);
Blynk.virtualWrite(vPIN_OVER_POWER_ALARM1, over_power_alarm1);
Blynk.virtualWrite(vPIN_VOLTAGE2, voltage_usage2);
Blynk.virtualWrite(vPIN_CURRENT_USAGE2, current_usage2);
Blynk.virtualWrite(vPIN_ACTIVE_POWER2, active_power2);
Blynk.virtualWrite(vPIN_ACTIVE_ENERGY2, active_energy2);
Blynk.virtualWrite(vPIN_FREQUENCY2, frequency2);
Blynk.virtualWrite(vPIN_POWER_FACTOR2, power_factor2);
Blynk.virtualWrite(vPIN_OVER_POWER_ALARM2, over_power_alarm2);
}
void pzemdata1(){
result = node1.readInputRegisters(0x0000, 10);
if (result == node1.ku8MBSuccess)
{
voltage_usage1 = (node1.getResponseBuffer(0x00) / 10.0f);
current_usage1 = (node1.getResponseBuffer(0x01) / 1000.000f);
active_power1 = (node1.getResponseBuffer(0x03) / 10.0f);
active_energy1 = (node1.getResponseBuffer(0x05) / 1000.0f);
frequency1 = (node1.getResponseBuffer(0x07) / 10.0f);
power_factor1 = (node1.getResponseBuffer(0x08) / 100.0f);
over_power_alarm1 = (node1.getResponseBuffer(0x09));
}
Serial.print("VOLTAGE1: "); Serial.println(voltage_usage1); // V
Serial.print("CURRENT_USAGE1: "); Serial.println(current_usage1, 3); // A
Serial.print("ACTIVE_POWER1: "); Serial.println(active_power1); // W
Serial.print("ACTIVE_ENERGY1: "); Serial.println(active_energy1, 3); // kWh
Serial.print("FREQUENCY1: "); Serial.println(frequency1); // Hz
Serial.print("POWER_FACTOR1: "); Serial.println(power_factor1);
Serial.print("OVER_POWER_ALARM1: "); Serial.println(over_power_alarm1, 0);
Serial.println("====================================================");
}
void pzemdata2(){
result = node2.readInputRegisters(0x0000, 10);
if (result == node2.ku8MBSuccess)
{
voltage_usage2 = (node2.getResponseBuffer(0x00) / 10.0f);
current_usage2 = (node2.getResponseBuffer(0x01) / 1000.000f);
active_power2 = (node2.getResponseBuffer(0x03) / 10.0f);
active_energy2 = (node2.getResponseBuffer(0x05) / 1000.0f);
frequency2 = (node2.getResponseBuffer(0x07) / 10.0f);
power_factor2 = (node2.getResponseBuffer(0x08) / 100.0f);
over_power_alarm2 = (node2.getResponseBuffer(0x09));
}
Serial.print("VOLTAGE2: "); Serial.println(voltage_usage2); // V
Serial.print("CURRENT_USAGE2: "); Serial.println(current_usage2, 3); // A
Serial.print("ACTIVE_POWER2: "); Serial.println(active_power2); // W
Serial.print("ACTIVE_ENERGY2: "); Serial.println(active_energy2, 3); // kWh
Serial.print("FREQUENCY2: "); Serial.println(frequency2); // Hz
Serial.print("POWER_FACTOR2: "); Serial.println(power_factor2);
Serial.print("OVER_POWER_ALARM2: "); Serial.println(over_power_alarm2, 0);
Serial.println("====================================================");
}
void loop() {
Blynk.run();
// ArduinoOTA.handle();
timer.run();
pzemdata1();
pzemdata2();
delay(1000);
}
The two software serial ports will put a toll on your system. Not sure how robust it is on an esp8266.
Thank you for highlight this to me. I just knew about the limitations of software serial port. I actually will use at least 3 PZEM. Can you suggest me other ways that is much more robust?
A better board with more hardware serial ports. An ESP32 can have 3
See GitHub - G6EJD/ESP32-Using-Hardware-Serial-Ports: How to use ESP32 hardware serial ports (first Google hit)
I see, thank you for your sharing
using separate esp for every PZEM
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.