for (int i = 0; i < request.length(); ++i)
{
EEPROM.write(i, request[i]);
}
for (int i = 0; i < request.length(); ++i)
{
esid += char(EEPROM.read(i));
}
Serial.println(esid.length());
Serial.println("SSID");
Serial.println(esid);
}
Possuo este código implementado em uma parte de um projeto que tem como função enviar uma informação de um celular (client) e o programa recebe salva na memória e imprimi no Serial Monitor. O problema é que ele acumula as informações, toda vez que envio uma mensagem do celular ele imprimi o que ja estava salvo com a mensagem nova e eu preciso que salve por cima na EEPROM.
new client
GET /: oi HTTP/1.1
36
SSID
GET /: oi HTTP/1.1GET /: oi HTTP/1.1
Client disconnected
new client
GET /: oi HTTP/1.1
54
SSID
GET /: oi HTTP/1.1GET /: oi HTTP/1.1GET /: oi HTTP/1.1
Client disconnected
new client
GET /: oi HTTP/1.1
72
SSID
GET /: oi HTTP/1.1GET /: oi HTTP/1.1GET /: oi HTTP/1.1GET /: oi HTTP/1.1
Client disconnected
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <EEPROM.h>
const char* ssid = "PR-LINK";
const char* password = "35280000";
String esid;
WiFiServer server (80);
void setup() {
pinMode (2, OUTPUT);
digitalWrite (2, 0);
Serial.begin(115200);
EEPROM.begin(512);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
IPAddress subnet (255, 255, 255, 0);
WiFi.config (IPAddress(192, 168, 0, 110),
IPAddress(192 ,168, 0, 1), subnet);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword((const char *)"123");
ArduinoOTA.onStart([]() {
Serial.println("Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
server.begin();
Serial.println("Server started");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
delay(10);
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(2, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1){
digitalWrite(2, LOW);
value = LOW;
}
if (request.indexOf ("/: ")!=-1){
for (int i = 0; i < request.length(); ++i)
{
EEPROM.write(i, request[i]);
}
for (int i = 0; i < request.length(); ++i)
{
esid += char(EEPROM.read(i));
}
Serial.println(esid.length());
Serial.println("SSID");
Serial.println(esid);
}
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.print("Led pin is now: ");
if(value == HIGH) {
client.print("On");
} else {
client.print("Off");
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"><button>LIGAR</button></a><br>");
client.println("<a href=\"/LED=OFF\"><button>DESLIGAR</button></a><br>");
client.println("</html>");
delay(1);
Serial.println("Client disconnected");
Serial.println("");
}
Tags:
As respostas para este tópico estão encerradas.
Olá Rômulo!
Evite de colar o code na página. Isso dificulta a leitura e a ajuda dos garagistas.
Coloque o código como anexo do post.
O seu programa está gravando corretamente na EEPROM.
Na verdade, o problema está ocorrendo porque você se esqueceu de inicializar a variável esid
Faça:
esid = "";
String request = client.readStringUntil('\r');
Muito obrigado Jose Augusto Cintra e me desculpe por colar o código, sou novo no site. Agora estou ciente
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por