Server.send(); ESP8266

Olá pessoal. Estou compilando o sketch abaixo, ainda contém diversos erros e estou resolvendo-os. Mas tem um erro que não consegui resolver. A idéia é o sketch acordar como webserver SAP, e o usuário acessa a rede gerada para configurar os parâmetros para e sua rede. Nesta fase do sketch, na altura da linha 110 tem uma rotina chamada handlRoot(); Esta rotina contém a página que o usuário vai acessar de configuração, a qual ainda não está implementada, tem só um exemplo. A string site é construída e então tenho a instrução server.send(200, "text/html", site) que envia a página ao usuário. Essa instrução não está funcionando, a mensagem é que a classe wifiserver não possui um membro chamado send. Qual seria a instrução correta para esse envio?
´´´
#include <lwip/priv/tcp_priv.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <ESP8266WebServer.h>

#define RESET 4
#define byte_count 17 // No. de bytes do pacote
#define mod_func 16 // função Modbus
#define num_tx_server 12 // No. de bytes enviado ao server modbus
#define tot_bytes_rx 21 // total de bytes recebidos do server modbus
#define STX 0x02
#define ETX 0x03
#define ID_relogio 0x30
#define num_tx 11 // No. de bytes enviado ao relógio pelo ESP8266
#define pos_IP 0
#define pos_gtw 33
#define pos_masc 66
#define pos_ssid 99
#define pos_senha 132

void tcpCleanup()
{
while (tcp_tw_pcbs != NULL)
{
tcp_abort(tcp_tw_pcbs);
}
}

const char* ssid = "2.4Gviviane";
const char* password = "24151965";
unsigned char buffer_rx[25] = {0};
unsigned char buffer_rx2[25] = {0};
unsigned char buffer_tx[20] = {0};
unsigned char buffer_tx2[20] = {0};
unsigned char LRC;
unsigned char flag_eeprom;
String buf_configura = "";
String site = "";
WiFiServer server(502);

void setup()
{
unsigned char i,j;

pinMode(0,INPUT);
digitalWrite(0,HIGH); // gpio0 como entrada, com pullup, para ser o reset da configuração
EEPROM.begin(120);

if (EEPROM.read(0) != 'M' && EEPROM.read(1) != 'S')
{
flag_eeprom = 0;
ESP8266WebServer server(502); // server: http://192.168.4.1
IPAddress staticIP(192,168,4,1);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0); WiFi.mode(WIFI_AP); // aceita WIF_AP / WIFI_AP_STA / WIFI_STA
ssid = "mseletronica";
password = "admin";
WiFi.softAP(ssid,password);
IPAddress myIP = WiFi.softAPIP();
server.on("/", handleRoot);
server.on("/conf_ip", handle_ip);
server.on("/conf_gtw", handle_gtw);
server.on("/conf_masc", handle_masc);
server.on("/ssid", handle_ssid);
server.on("/senha", handle_senha);
server.begin();

while (flag_eeprom<5)
  {
    server.handleClient();
  }

WiFi.softAPdisconnect(true); // fecha o Access Point
}

buffer_tx[0] = STX; // inicializa buffer TX
buffer_tx[1] = ID_relogio;
buffer_tx[10] = ETX;

pinMode(RESET, INPUT);

Serial.begin(115200);
IPAddress staticIP(192,168,4,1);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);

WiFi.config(staticIP, gateway, subnet);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
Serial.println("Conected");
Serial.println(WiFi.localIP());
tcpCleanup();
}

void handleRoot()
{
site = "\n";
site += "Hello World\n";
site += "body style="color:blue"\n";
site += "Hello World do meu ESP8266</center\n";
site += "\n";
site += "/html>";

server.send(200, "text/html", site);

site = "";
}

void handle_ip() // recebeu valor do IP configurado
{
flg_eeprom++;
char i=0;
while (server.available()) // enquanto houver dado
{
EEPROM.write(pos_IP + i+1) = server.read(); // grava a partir do [1]
i++;
}
EEPROM.write(pos_IP + i); // no final grava no [0] o No. de caracteres
}

void handle_gtw()
{
flg_eeprom++;
char i=0;
while (server.available()) // enquanto houver dado
{
EEPROM.write(pos_gtw + i+1) = server.read(); // grava a partir do [1]
i++;
}
EEPROM.write(pos_gtw + i); // no final grava no [0] o No. de caracteres
}

void handle_masc()
{
flg_eeprom++;
char i=0;
while (server.available()) // enquanto houver dado
{
EEPROM.write(pos_masc + i+1) = server.read(); // grava a partir do [1]
i++;
}
EEPROM.write(pos_masc + i); // no final grava no [0] o No. de caracteres
}

void handle_ssid()
{
flg_eeprom++;
char i=0;
while (server.available()) // enquanto houver dado
{
EEPROM.write(pos_ssid + i+1) = server.read(); // grava a partir do [1]
i++;
}
EEPROM.write(pos_ssid + i); // no final grava no [0] o No. de caracteres
}

void handle_senha()
{
flg_eeprom++;
char i=0;
while (server.available()) // enquanto houver dado
{
EEPROM.write(pos_senha + i+1) = server.read(); // grava a partir do [1]
i++;
}
EEPROM.write(pos_senha + i); // no final grava no [0] o No. de caracteres
}

//*********************************************
// LOOP PRINCIPAL
//*********************************************
void loop()
{

// put your main code here, to run repeatedly:

WiFiClient client = server.available();
if (!client)
{
return;
}

while (!client.available())
{
delay(1);
}
for (char i=0;i<tot_bytes_rx; i++)buffer_rx[i] = client.read();

client.flush();
trata_rx();
client.write (buffer_tx,num_tx_server);
}

//*********************************************
// TRATA RECEPÇÃO DO PACOTE
//*********************************************
void trata_rx()
{
if (buffer_rx[5] == byte_count && buffer_rx[7] == mod_func) // buffer_rx[5] = No. de bytes restantes no pacote
// bytes_rx = 12, No. total de bytes no pacote
// buffer_rx[7] = função Modbus: 06 é escrita em um único registrador
{Serial.println("5,");

if (buffer_rx[8] == 0x00 && (buffer_rx[9]) == 1 && buffer_rx[10] == 0 && buffer_rx[11] == 3 && buffer_rx[12] == 6)
{Serial.println("6,");
buffer_rx[5] = 6; // prepara a resposta
// client.write(buffer_rx,num_tx_server); // envia resposta positiva ao server modbus
// prepara buffer de TX para o relógio
buffer_tx[2] = buffer_rx[14] / 10;
buffer_tx[3] = buffer_rx[14] % 10;
buffer_tx[4] = buffer_rx[16] / 10;
buffer_tx[5] = buffer_rx[16] % 10;
buffer_tx[6] = buffer_rx[18] / 10;
buffer_tx[7] = buffer_rx[18] % 10;
buffer_tx[8] = buffer_rx[20] / 10;
buffer_tx[9] = buffer_rx[20] % 10;
LRC = 0;
for (unsigned char i=0; i<num_tx; i++)LRC ^= buffer_tx[i];
buffer_tx[11] = LRC;
for (char i=0;i<12;i++)buffer_tx2[i] = buffer_tx[i] + 0x40;
Serial.write(buffer_tx, num_tx);
// Client.write (buffer_tx, num_tx);
delay(100);
Serial.write(buffer_tx, num_tx); // repete por segurança
}
}
}
´´´

Refazendo o sketch, a formatação não funcionou.

#include <lwip/priv/tcp_priv.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <ESP8266WebServer.h>

#define RESET           4
#define byte_count      17        // No. de bytes do pacote
#define mod_func        16        // função Modbus
#define num_tx_server   12        // No. de bytes enviado ao server modbus
#define tot_bytes_rx    21        // total de bytes recebidos do server modbus
#define STX             0x02
#define ETX             0x03
#define ID_relogio      0x30
#define num_tx          11        // No. de bytes enviado ao relógio pelo ESP8266
#define pos_IP          0
#define pos_gtw         33
#define pos_masc        66
#define pos_ssid        99
#define pos_senha       132


void tcpCleanup()
{
  while (tcp_tw_pcbs != NULL)
  {
    tcp_abort(tcp_tw_pcbs);
  }
}

const char* ssid = "2.4Gviviane";
const char* password = "24151965";
unsigned char buffer_rx[25] = {0};
unsigned char buffer_rx2[25] = {0};
unsigned char buffer_tx[20] = {0};
unsigned char buffer_tx2[20] = {0};
unsigned char LRC;
unsigned char flag_eeprom;
String buf_configura = "";
String site = "";
WiFiServer server(502);

void setup() 
{
  unsigned char i,j;

pinMode(0,INPUT);
digitalWrite(0,HIGH);         // gpio0 como entrada, com pullup, para ser o reset da configuração
EEPROM.begin(120);

 if (EEPROM.read(0) != 'M' && EEPROM.read(1) != 'S')
  { 
    flag_eeprom = 0;
    ESP8266WebServer server(502); // server: http://192.168.4.1 
    IPAddress staticIP(192,168,4,1);
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);    WiFi.mode(WIFI_AP); // aceita WIF_AP / WIFI_AP_STA / WIFI_STA
    ssid = "mseletronica";
    password = "admin";
    WiFi.softAP(ssid,password);
    IPAddress myIP = WiFi.softAPIP();
    server.on("/", handleRoot);
    server.on("/conf_ip", handle_ip);
    server.on("/conf_gtw", handle_gtw);
    server.on("/conf_masc", handle_masc);
    server.on("/ssid", handle_ssid);
    server.on("/senha", handle_senha);
    server.begin();

    while (flag_eeprom<5)
      {
        server.handleClient();
      }
  
  WiFi.softAPdisconnect(true);      // fecha o Access Point
 }

  buffer_tx[0] = STX;         // inicializa buffer TX
  buffer_tx[1] = ID_relogio;
  buffer_tx[10] = ETX;

 
  pinMode(RESET, INPUT);
  
  Serial.begin(115200);
  IPAddress staticIP(192,168,4,1);
  IPAddress gateway(192,168,0,1);
  IPAddress subnet(255,255,255,0);

  WiFi.config(staticIP, gateway, subnet);
  WiFi.begin(ssid, password);
 
   while (WiFi.status() != WL_CONNECTED) {
    delay(500);   
  } 
  server.begin();   
  Serial.println("Conected");
  Serial.println(WiFi.localIP());
    tcpCleanup();    
}

void handleRoot()
{
  site = "<html>\n";
  site += "<head><title>Hello World</title></head>\n";
  site += "body style=\"color:blue\"\n";
  site += "<center><hl>Hello World do meu ESP8266</hl></center\n";
  site += "</body>\n";
  site += "/html>";

  server.send(200, "text/html", site);

  site = "";
}

void handle_ip()        // recebeu valor do IP configurado
{
  flg_eeprom++;
  char i=0;
  while (server.available())    // enquanto houver dado
    {
     EEPROM.write(pos_IP + i+1) = server.read();    // grava a partir do [1] 
     i++; 
    }
  EEPROM.write(pos_IP + i);         // no final grava no [0] o No. de caracteres 
}

void handle_gtw()
{
  flg_eeprom++;
  char i=0;
  while (server.available())    // enquanto houver dado
    {
     EEPROM.write(pos_gtw + i+1) = server.read();    // grava a partir do [1] 
     i++; 
    }
  EEPROM.write(pos_gtw + i);         // no final grava no [0] o No. de caracteres 
}

void handle_masc()
{
  flg_eeprom++;
  char i=0;
  while (server.available())    // enquanto houver dado
    {
     EEPROM.write(pos_masc + i+1) = server.read();    // grava a partir do [1] 
     i++; 
    }
  EEPROM.write(pos_masc + i);         // no final grava no [0] o No. de caracteres 
}

void handle_ssid()
{
  flg_eeprom++;
  char i=0;
  while (server.available())    // enquanto houver dado
    {
     EEPROM.write(pos_ssid + i+1) = server.read();    // grava a partir do [1] 
     i++; 
    }
  EEPROM.write(pos_ssid + i);         // no final grava no [0] o No. de caracteres 
}

void handle_senha()
{
  flg_eeprom++;
  char i=0;
  while (server.available())    // enquanto houver dado
    {
     EEPROM.write(pos_senha + i+1) = server.read();    // grava a partir do [1] 
     i++; 
    }
  EEPROM.write(pos_senha + i);         // no final grava no [0] o No. de caracteres 
}


//*********************************************
//  LOOP PRINCIPAL
//*********************************************
void loop() 
{

  // put your main code here, to run repeatedly:

WiFiClient client = server.available();
if (!client) 
    {
      return;
    }
  
while (!client.available()) 
    {
      delay(1);  
    }
for (char i=0;i<tot_bytes_rx; i++)buffer_rx[i] = client.read();

client.flush();
trata_rx();
client.write (buffer_tx,num_tx_server);
}

//*********************************************
//  TRATA RECEPÇÃO DO PACOTE
//*********************************************
void trata_rx()
{
if (buffer_rx[5] == byte_count && buffer_rx[7] == mod_func) // buffer_rx[5] = No. de bytes restantes no pacote
                                // bytes_rx = 12, No. total de bytes no pacote
                                // buffer_rx[7] = função Modbus: 06 é escrita em um único registrador
  {Serial.println("5,");

  if (buffer_rx[8] == 0x00 && (buffer_rx[9]) == 1 && buffer_rx[10] == 0 && buffer_rx[11] == 3 && buffer_rx[12] == 6)
    {Serial.println("6,");
    buffer_rx[5] = 6;   // prepara a resposta
 //   client.write(buffer_rx,num_tx_server);    // envia resposta positiva ao server modbus
    //  prepara buffer de TX para o relógio
    buffer_tx[2] = buffer_rx[14] / 10;
    buffer_tx[3] = buffer_rx[14] % 10;
    buffer_tx[4] = buffer_rx[16] / 10;
    buffer_tx[5] = buffer_rx[16] % 10;
    buffer_tx[6] = buffer_rx[18] / 10;
    buffer_tx[7] = buffer_rx[18] % 10;
    buffer_tx[8] = buffer_rx[20] / 10;
    buffer_tx[9] = buffer_rx[20] % 10; 
    LRC = 0;
    for (unsigned char i=0; i<num_tx; i++)LRC ^= buffer_tx[i];
    buffer_tx[11] = LRC;
    for (char i=0;i<12;i++)buffer_tx2[i] = buffer_tx[i] + 0x40;
    Serial.write(buffer_tx, num_tx);
 //   Client.write (buffer_tx, num_tx);
    delay(100);
    Serial.write(buffer_tx, num_tx);   // repete por segurança
    }
  }
}