Nodemcu client code

I am using nodemcu and Modbus RTU device. I am getting data from modbus RTU and trying to display over the client IP

Here is my example code

#include <ModbusMaster232.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "Tasker.h"
Tasker tasker;


unsigned int  data[100];

ModbusMaster232 node(1);// change device address here.

// Define one address for reading
#define address 1
// Define the number of bits to read
#define bitQty 30

const char* ssid = "HOT SPOT";
const char* password = "airtel123";

int ledPin = 13; // GPIO13
WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  node.begin(9600);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
  // timer.setInterval(1000, ModBusRead);  // Update Time Check every 10 seconds
  //tasker.setInterval(client_update, 2000);
}

void loop()
{



  int result =  node.readHoldingRegisters(address, bitQty);
  data[0] = node.getResponseBuffer(0);// holds value of Frequency
  data[1] = node.getResponseBuffer(1);
  data[2] = node.getResponseBuffer(2);// holds value of VRph
  data[3] = node.getResponseBuffer(3);
  data[4] = node.getResponseBuffer(4);// holds value of VYph
  data[5] = node.getResponseBuffer(5);

  data[6] = node.getResponseBuffer(6);// holds value of VBph
  data[7] = node.getResponseBuffer(7);
  data[8] = node.getResponseBuffer(8);// holds value of VRph-VYph
  data[9] = node.getResponseBuffer(9);
  data[10] = node.getResponseBuffer(10);// holds value of Vyph-Vbph
  data[11] = node.getResponseBuffer(11);

  data[12] = node.getResponseBuffer(12);// holds value of VBph-VYph
  data[13] = node.getResponseBuffer(13);
  data[14] = node.getResponseBuffer(14);// hold value of IRCurrent
  data[15] = node.getResponseBuffer(15);
  data[16] = node.getResponseBuffer(16);// hold value of IYCurrent
  data[17] = node.getResponseBuffer(17);

  data[18] = node.getResponseBuffer(18);// hold value of IBCurrent
  data[19] = node.getResponseBuffer(19);
  data[20] = node.getResponseBuffer(20);// hold value of PFR
  data[21] = node.getResponseBuffer(21);
  data[22] = node.getResponseBuffer(22);// hold value of PFY
  data[23] = node.getResponseBuffer(23);

  data[24] = node.getResponseBuffer(24);// hold value of PFB
  data[25] = node.getResponseBuffer(25);
  data[26] = node.getResponseBuffer(26);// hold value of TP
  data[27] = node.getResponseBuffer(27);
  data[28] = node.getResponseBuffer(28);// hold value of ACTPOWR
  data[29] = node.getResponseBuffer(29);

  data[30] = node.getResponseBuffer(30);// hold value of ACTPOWY
  data[31] = node.getResponseBuffer(31);
  data[32] = node.getResponseBuffer(32);// hold value of ACTPOWB
  data[33] = node.getResponseBuffer(33);
  data[34] = node.getResponseBuffer(34);// hold value of TotalACTPOWR
  data[35] = node.getResponseBuffer(35);
  data[36] = node.getResponseBuffer(36);// hold value of ACTENERR
  data[37] = node.getResponseBuffer(37);
  data[38] = node.getResponseBuffer(38);//hold value of ACTENERY
  data[39] = node.getResponseBuffer(39);

  data[40] = node.getResponseBuffer(40);//hold value of ACTENERB
  data[41] = node.getResponseBuffer(41);
  data[42] = node.getResponseBuffer(42);//hold value of Total Active power
  data[43] = node.getResponseBuffer(43);
  data[44] = node.getResponseBuffer(44);
  data[45] = node.getResponseBuffer(45);
  data[46] = node.getResponseBuffer(46);
  data[47] = node.getResponseBuffer(47);
  data[48] = node.getResponseBuffer(48);
  data[49] = node.getResponseBuffer(49);


  data[50] = node.getResponseBuffer(50);
  data[51] = node.getResponseBuffer(51);
  data[52] = node.getResponseBuffer(52);
  data[53] = node.getResponseBuffer(53);
  data[54] = node.getResponseBuffer(54);
  data[55] = node.getResponseBuffer(55);
  data[56] = node.getResponseBuffer(56);
  data[57] = node.getResponseBuffer(57);
  data[58] = node.getResponseBuffer(58);
  data[59] = node.getResponseBuffer(59);

  for (int i = 0; i < 15; i++)
  {
    Serial.println(data[i]);
  }
  Serial.println("........................");
  //delay(1000);
  // Read the first line of the request
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  Serial.println("new client");
  while (!client.available()) {
    client_update();
    delay(1);
  }


  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("                   ENERGY METER READING                  ");
  client.println("

");
  client.println("Frequency: ");
  client.println((data[0] / 10.0)); client.println("

");
  client.println("Rphase voltage: ");
  client.println((data[2] / 10.0)); client.println("

");
  client.println("Yphase voltage: ");
  client.println((data[4] / 10.0)); client.println("

");
  client.println("Bphase voltage: ");
  client.println((data[6] / 10.0));
  client.println("

");
  client.println("VR-VY voltage: ");
  client.println((data[8] / 10.0)); client.println("

");
  client.println("VY-VB voltage: ");
  client.println((data[10] / 10.0)); client.println("

");
  client.println("VB-VR voltage: ");
  client.println((data[12] / 10.0)); client.println("

");

  client.println("IR voltage: ");
  client.println((data[14] / 10.0)); client.println("

");
  client.println("IY voltage: ");
  client.println( data[16] / 10.0); client.println("

");
  client.println("IB voltage: ");
  client.println( data[18] / 10.0); client.println("

");

  client.println("PF R phase: ");
  client.println( data[20] / 10.0); client.println("

");
  client.println("PF Y phase: ");
  client.println( data[22] / 10.0); client.println("

");
  client.println("PF B phase: ");
  client.println( data[24] / 10.0); client.println("

");
  client.println("Total PF: ");
  client.println( data[26] / 10.0); client.println("

");
  client.println("

");
  // tasker.loop();
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");



}


void client_update()
{
  //WiFiClient client = server.available();

}

With Below code i could able to get datafrom modbus rtu device . But could not able to display the same parameter on client IP address. It always print 0.00.where as Serial data read the value properly and prints data.

  data[0] = node.getResponseBuffer(0);// holds value of Frequency
  data[1] = node.getResponseBuffer(1);
  data[2] = node.getResponseBuffer(2);// holds value of VRph
  data[3] = node.getResponseBuffer(3);
  data[4] = node.getResponseBuffer(4);// holds value of VYph
  data[5] = node.getResponseBuffer(5);

  data[6] = node.getResponseBuffer(6);// holds value of VBph
  data[7] = node.getResponseBuffer(7);
  data[8] = node.getResponseBuffer(8);// holds value of VRph-VYph
  data[9] = node.getResponseBuffer(9);
  data[10] = node.getResponseBuffer(10);// holds value of Vyph-Vbph
  data[11] = node.getResponseBuffer(11);

  data[12] = node.getResponseBuffer(12);// holds value of VBph-VYph
  data[13] = node.getResponseBuffer(13);
  data[14] = node.getResponseBuffer(14);// hold value of IRCurrent
  data[15] = node.getResponseBuffer(15);
  data[16] = node.getResponseBuffer(16);// hold value of IYCurrent
  data[17] = node.getResponseBuffer(17);

  data[18] = node.getResponseBuffer(18);// hold value of IBCurrent
  data[19] = node.getResponseBuffer(19);
  data[20] = node.getResponseBuffer(20);// hold value of PFR
  data[21] = node.getResponseBuffer(21);
  data[22] = node.getResponseBuffer(22);// hold value of PFY
  data[23] = node.getResponseBuffer(23);

  data[24] = node.getResponseBuffer(24);// hold value of PFB
  data[25] = node.getResponseBuffer(25);
  data[26] = node.getResponseBuffer(26);// hold value of TP
  data[27] = node.getResponseBuffer(27);
  data[28] = node.getResponseBuffer(28);// hold value of ACTPOWR
  data[29] = node.getResponseBuffer(29);

  data[30] = node.getResponseBuffer(30);// hold value of ACTPOWY
  data[31] = node.getResponseBuffer(31);
  data[32] = node.getResponseBuffer(32);// hold value of ACTPOWB
  data[33] = node.getResponseBuffer(33);
  data[34] = node.getResponseBuffer(34);// hold value of TotalACTPOWR
  data[35] = node.getResponseBuffer(35);
  data[36] = node.getResponseBuffer(36);// hold value of ACTENERR
  data[37] = node.getResponseBuffer(37);
  data[38] = node.getResponseBuffer(38);//hold value of ACTENERY
  data[39] = node.getResponseBuffer(39);

  data[40] = node.getResponseBuffer(40);//hold value of ACTENERB
  data[41] = node.getResponseBuffer(41);
  data[42] = node.getResponseBuffer(42);//hold value of Total Active power
  data[43] = node.getResponseBuffer(43);
  data[44] = node.getResponseBuffer(44);
  data[45] = node.getResponseBuffer(45);
  data[46] = node.getResponseBuffer(46);
  data[47] = node.getResponseBuffer(47);
  data[48] = node.getResponseBuffer(48);
  data[49] = node.getResponseBuffer(49);


  data[50] = node.getResponseBuffer(50);
  data[51] = node.getResponseBuffer(51);
  data[52] = node.getResponseBuffer(52);
  data[53] = node.getResponseBuffer(53);
  data[54] = node.getResponseBuffer(54);
  data[55] = node.getResponseBuffer(55);
  data[56] = node.getResponseBuffer(56);
  data[57] = node.getResponseBuffer(57);
  data[58] = node.getResponseBuffer(58);
  data[59] = node.getResponseBuffer(59);

60 lines of code to do what 4 lines of code could do, if three of them were a for statement and two curly braces? Get real.

But could not able to display the same parameter on client IP address. It always print 0.00.where as Serial data read the value properly and prints data.

Proof seems to be in really short supply.

  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

Doesn't what the client wants matter? Regardless of what the client asks for, you serve up the same response. Why?

I am just doing modification of code from Reading analogRead value. So i kept my syntax as is example.

Serial data is printing properly

you mean to say individually storing then writing code like below

 for(int i=0;i<60;i++
{
   data[i] = node.getResponseBuffer(i);
Serial.println(data[i]);
  
}
Serial.println(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,");

I have tried like this but i used to get improper values.

I have modified code like below. But max 30 byte can read, With Blynk application i could able to read up to 50 byte data

#include <ModbusMaster232.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "Tasker.h"
Tasker tasker;


unsigned int  data[100];

ModbusMaster232 node(1);// change device address here.

// Define one address for reading
#define address 1
// Define the number of bits to read
#define bitQty 30

const char* ssid = "HOT SPOT";
const char* password = "airtel123";

int ledPin = 13; // GPIO13
WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  node.begin(9600);
  delay(10);
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
  
}

void client_update()
{
  int result =  node.readHoldingRegisters(address, bitQty);
  data[0] = node.getResponseBuffer(0);// holds value of Frequency
  data[1] = node.getResponseBuffer(1);
  data[2] = node.getResponseBuffer(2);// holds value of VRph
  data[3] = node.getResponseBuffer(3);
  data[4] = node.getResponseBuffer(4);// holds value of VYph
  data[5] = node.getResponseBuffer(5);

  data[6] = node.getResponseBuffer(6);// holds value of VBph
  data[7] = node.getResponseBuffer(7);
  data[8] = node.getResponseBuffer(8);// holds value of VRph-VYph
  data[9] = node.getResponseBuffer(9);
  data[10] = node.getResponseBuffer(10);// holds value of Vyph-Vbph
  data[11] = node.getResponseBuffer(11);

  data[12] = node.getResponseBuffer(12);// holds value of VBph-VYph
  data[13] = node.getResponseBuffer(13);
  data[14] = node.getResponseBuffer(14);// hold value of IRCurrent
  data[15] = node.getResponseBuffer(15);
  data[16] = node.getResponseBuffer(16);// hold value of IYCurrent
  data[17] = node.getResponseBuffer(17);

  data[18] = node.getResponseBuffer(18);// hold value of IBCurrent
  data[19] = node.getResponseBuffer(19);
  data[20] = node.getResponseBuffer(20);// hold value of PFR
  data[21] = node.getResponseBuffer(21);
  data[22] = node.getResponseBuffer(22);// hold value of PFY
  data[23] = node.getResponseBuffer(23);

  data[24] = node.getResponseBuffer(24);// hold value of PFB
  data[25] = node.getResponseBuffer(25);
  data[26] = node.getResponseBuffer(26);// hold value of TP
  data[27] = node.getResponseBuffer(27);
  data[28] = node.getResponseBuffer(28);// hold value of ACTPOWR
  data[29] = node.getResponseBuffer(29);

  data[30] = node.getResponseBuffer(30);// hold value of ACTPOWY
  data[31] = node.getResponseBuffer(31);
  data[32] = node.getResponseBuffer(32);// hold value of ACTPOWB
  data[33] = node.getResponseBuffer(33);
  data[34] = node.getResponseBuffer(34);// hold value of TotalACTPOWR
  data[35] = node.getResponseBuffer(35);
  data[36] = node.getResponseBuffer(36);// hold value of ACTENERR
  data[37] = node.getResponseBuffer(37);
  data[38] = node.getResponseBuffer(38);//hold value of ACTENERY
  data[39] = node.getResponseBuffer(39);

  data[40] = node.getResponseBuffer(40);//hold value of ACTENERB
  data[41] = node.getResponseBuffer(41);
  data[42] = node.getResponseBuffer(42);//hold value of Total Active power
  data[43] = node.getResponseBuffer(43);
  data[44] = node.getResponseBuffer(44);
  data[45] = node.getResponseBuffer(45);
  data[46] = node.getResponseBuffer(46);
  data[47] = node.getResponseBuffer(47);
  data[48] = node.getResponseBuffer(48);
  data[49] = node.getResponseBuffer(49);


  data[50] = node.getResponseBuffer(50);
  data[51] = node.getResponseBuffer(51);
  data[52] = node.getResponseBuffer(52);
  data[53] = node.getResponseBuffer(53);
  data[54] = node.getResponseBuffer(54);
  data[55] = node.getResponseBuffer(55);
  data[56] = node.getResponseBuffer(56);
  data[57] = node.getResponseBuffer(57);
  data[58] = node.getResponseBuffer(58);
  data[59] = node.getResponseBuffer(59);

  for (int i = 0; i <30; i++)
  {
    Serial.println(data[i]);
  }
  Serial.println("........................");
}











void loop() {
  // Listenning for new clients
  WiFiClient client = server.available();

  if (client) {
    Serial.println("New client");
    // bolean to locate when the http request ends
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (c == '\n' && blank_line) {
          client_update();
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          // your actual web page that displays temperature
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");
          client.println("<body><h1>Energy Meter</h1>");
          client.println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");

          client.println("Frequency: ");
          client.println((data[0] / 10.0)); client.println("

");
          client.println("Rphase voltage: ");
          client.println((data[2] / 10.0)); client.println("

");
          client.println("Yphase voltage: ");
          client.println((data[4] / 10.0)); client.println("

");
          client.println("Bphase voltage: ");
          client.println((data[6] / 10.0));
          client.println("

");
          client.println("VR-VY voltage: ");
          client.println((data[8] / 10.0)); client.println("

");
          client.println("VY-VB voltage: ");
          client.println((data[10] / 10.0)); client.println("

");
          client.println("VB-VR voltage: ");
          client.println((data[12] / 10.0)); client.println("

");

          client.println("IR voltage: ");
          client.println((data[14] / 10.0)); client.println("

");
          client.println("IY voltage: ");
          client.println( data[16] / 10.0); client.println("

");
          client.println("IB voltage: ");
          client.println( data[18] / 10.0); client.println("

");

          client.println("PF R phase: ");
          client.println( data[20] / 10.0); client.println("

");
          client.println("PF Y phase: ");
          client.println( data[22] / 10.0); client.println("

");
          client.println("PF B phase: ");
          client.println( data[24] / 10.0); client.println("

");
          client.println("Total PF: ");
          client.println( data[26] / 10.0); client.println("

");
          client.println("

");
          
          break;
        }
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        }
        else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }
    // closing the client connection
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");
  }
}

Reading are fake value i dump it for testing
code taken from