Data refresh rate IoT

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.