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("");

 
}

Exibições: 308

As respostas para este tópico estão encerradas.

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço