ESP 8266 LOLIN V3 ESP8266 Redémarrage cyclé causé par la corruption mémoire

Bonjour , apres 3 soirées de recherche , je me decide à vous demander de l’aide , et je pense que cela servira à beaucoup d’entre vous .

Mon projet en cours : je viens d’acheter un NOMCDU 8266 V3 lolin , je compte faire un contrôle de MP3 à distance via ma box eedomus , pour simuler l’aboiement d’un chien pour éviter les intrusions en mon absence avec un DF PLAYER MINI +ampli+ haut parleur .

Le premier Téléchargement de mon code à fonctionner nickel , ensuite j’ai voulu modifier l’adresse IP sur ma carte via le programme ARDUINO , et la c’est le drame .

Depuis le programme boucle dans le module :
j’ai des caractères en tous genre puis des points qui défilent :

…etc …

En parcourant le web j’ai vu que beaucoup avaient des problèmes de ce type , j’ai essayer de reflasher le module avec PYTHON , avec ESP8266Flasher , rien ne fonctionne .

Par contre si j’upload un fichier exemple scanwifi ? par exemple cela fonctionne .

Le problème viendrai du SSID et Pass WIFI , qui s’encre dans la mémoire de l’esp8266 et perturbe le système et vide la pile .

j’ai donc en suivant les conseille de certains internautes ajouter deux lignes de code (entre les *******)(Une permanente et une à utiliser une fois pour effacer une partie de la mémoire ) , mais rien ne change .
Merci de votre aide ou avis sur le problème . Cordialement
Voici mon code :

//Play the MP3 according to the commands received


//Required for WIFI
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

//Required for DFPlayer
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"


//////////////////////////////////////////////////////////////
//For debug purpose, compiler commands
#define DEBUG           //Comment this line to remove all debug lines
#ifdef DEBUG
#define DEBUG_PRINT(x)  Serial.print(x)
#define DEBUG_PRINTLN(x)  Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif


const char* ssid = "MON SSID";             //WiFi ID
const char* password = "0123456";  //WiFi PWD
String ParamS;                           //Contain the parameter of the command
int ParamI;                              //Contain the parameter, but translated inn Integer

//Static IP, Gateway and Subnet
IPAddress staticIP (192, 168, 0, 106);
IPAddress gateway (255, 255, 255, 0);
IPAddress subnet(192, 168, 0, 254);

//Initialisation DFPlayer
SoftwareSerial mySoftwareSerial(5, 4); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

//Start server
WiFiServer server(80);



void setup() {
  Serial.begin(115200); delay(10);  //Debug serial line
  mySoftwareSerial.begin(9600);     //DFPlayer serial line, RX + TX

//***************************************************************************
WiFi.persistent(false); // Do not memorise new connections
ESP.flashEraseSector(0x3fe); // Erase remembered connection info. (Only do this once).
 // Connect to Wi-Fi network with SSID and password
//****************************************************************************

  Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {delay(500); Serial.print("."); }
  Serial.println(" WiFi connected, "); Serial.println("IP address: "); Serial.println(WiFi.localIP());
  

  // Start the server
  server.begin();
  DEBUG_PRINTLN("Server started");
  
  // Start the DFPlayer
  DEBUG_PRINTLN(""); DEBUG_PRINTLN("Initializing DFPlayer ...");
  if (!myDFPlayer.begin(mySoftwareSerial)) DEBUG_PRINTLN("ERROR: Unable to initialize DFPlayer!");  //Use softwareSerial to communicate with mp3.
  DEBUG_PRINTLN("DFPlayer Ready");
}


void loop() {

  // Check if a client has connected
  WiFiClient client = server.available();

  //Client has connected. Treat request
  if (client) {
    DEBUG_PRINTLN("Command received...");

    // Read the first line of the request
    String request = client.readStringUntil('\r');
    DEBUG_PRINTLN(request); client.flush();
    
    //Initialize variables used for the parameter
    ParamS=""; ParamI=0;

    //Check the volume
    if (request.indexOf("Volume=") != -1) {
      ParamS=request.substring(request.indexOf("Volume=")+7,request.indexOf("Volume=")+9);
      ParamI=ParamS.toInt(); 
      DEBUG_PRINT("VolumeI=");DEBUG_PRINTLN(ParamI);
      if (ParamI >=0 && ParamI <=30)  myDFPlayer.volume(ParamI);  //Set volume value. From 0 to 30
    }

    //Then, check the other commands, could be Song, SongLoop, Stop, Reset
    if (request.indexOf("Song=") != -1)  {
      ParamS=request.substring(request.indexOf("Song=")+5,request.indexOf("Song=")+9); 
      ParamI=ParamS.toInt();
      DEBUG_PRINT("Song number ");DEBUG_PRINTLN(ParamI);
      myDFPlayer.play(ParamI);

    } else if (request.indexOf("SongLoop=") != -1)  {
      ParamS=request.substring(request.indexOf("SongLoop=")+9,request.indexOf("SongLoop=")+13);
      ParamI=ParamS.toInt();
      DEBUG_PRINT("Songloop number ");DEBUG_PRINTLN(ParamI);
      myDFPlayer.loop(ParamI);
    
    } else if (request.indexOf("/Stop") != -1) {
      DEBUG_PRINTLN("Stop");
      myDFPlayer.stop(); 
    
    } else if (request.indexOf("/Reset") != -1) {
      DEBUG_PRINTLN("Reset");
      myDFPlayer.reset();
    
    } else {
      client.println("Use one of these commands:");
      client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Song=001..999: Play Song 001 to 999");client.println();
      client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("SongLoop=001..999: Play in loop Song 001 to 999");client.println();
      client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Stop: Pause device");client.println();
      client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Volume=0..30: Set the volume, 0=min, 30=Max");client.println();
      client.print("http://"); client.print(WiFi.localIP()); client.print("/"); client.println("Reset: Reset the MP3 player (only the MP3, not the ESP)");client.println();
    }
    client.println("HTTP/1.1 200 OK"); //Acknowledge command. Without that, eedomus keep sending the command
    delay(100);
  } //if (client)
  delay(1); //Wait 1 before next loop
}

bonsoir ? Je up car je sèche .....

merci de votre aide .

Bonsoir

Pour passer en IP statique il faut enchainer :

WiFi.config(staticIP, gateway, subnet);  // (DNS not required)
WiFi.begin(ssid, password);
WiFi.persistent(false); // Do not memorise new connections
ESP.flashEraseSector(0x3fe); // Erase remembered connection info. (Only do this once).

je comprend mal le besoin et la manière d'effacer la zone où l'ESP mémorise les paramètres du dernier point d'accès valide : ça fonctionne, ça ne gène pas ni n'empèche de redéfinir le point d'accès.
J'ai fait et refait des manips dans tous les sens et n'ai jamais eu à invalider le WiFi.persistent ni à effacer un secteur quelconque

Bonsoir al1fch , merci de ta réponse , j'ai trouvé le problème , j'avais un conflit d'adresse IP sur ma box (Freebox) , j'avais fixer une adresse ip fixe pour mon esp8266 v3 et celle-ci était déjà utilisé par une camera , elle même en ip fixe .

Je ne m'attendais pas à voir le programme réagir comme ça pour ce type de d'erreur !!!

du coup ta ligne de code ma mis sur la piste Merci BEAUCOUP !!!!

Je publierais mon projet fini bientôt , une sorte d'alarme sous forme d'un chien qui aboie en cas d'intrusion , (Vibrations porte , bruit au delà d'un certain seuil etc.......)..

bonne nuit !!