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
}
}
}
´´´