ESP8266 settato come Access point si blocca dopo 5 step

Ho sperimentato un programma, preso da internet, per cambiare stato a 3 LED da pagina HTML con Mozilla via WiFi verso ESP8266 e Arduino uno.
Risponde bene a 5 comandi poi si blocca.
Ho riscritto lo sketch con gli Array al posto di String ma il problema persiste.
Ho fatto stampare il connectionId ad ogni step e risulta che apre con “Id” 0 e chiude “Id” 0 poi apre con “Id” 1 e chiude con “Id” 1 e così via sino a “Id” 4 poi si blocca.
Ho verificato che effettivamente l’ESP gestisce “Id” da 0 a 4 ma, considerato che c’è un solo client, pensavo che continuasse ad aprire e chiudere con “Id” 0, oppure che dopo aver chiuso “Id” 4 ricominciasse ad aprire con “Id” 0, invece si blocca.
Allego pagina HTML e sketch
Grazie dell'aiuto.

<!DOCTYPE html>
<html>
    <head>
      <title>ESP8266 LED Control</title>
      <script src="jquery-3.4.1.min.js"></script>
        <script>
            $(document).ready(function(){
                $(".led").click(function(){
                    var p=$(this).attr('id');
                    $.get("http://192.168.4.1:80/", {pin:p});
                });
            });
        </script>
  </head>
  <body>
      <!-- in the <button> tags below the ID attribute is the value sent to arduino-->
      <button id="13" class="led">Toggle ROSSO</button> <!-- button for pin 13-->
      <button id="12" class="led">Toggle GIALLO</button> <!-- button for pin 12-->
      <button id="11" class="led">Toggle VERDE</button> <!-- button for pin 11-->
  </body>
</html
//ESP8266HTML_1
#include <SoftwareSerial.h>
#define DEBUG true
SoftwareSerial esp8266(9,10);//RX,TX
 
void setup(){
  Serial.begin(9600); 
  esp8266.begin(9600); 
  pinMode(11,OUTPUT); digitalWrite(11,LOW);
  pinMode(12,OUTPUT); digitalWrite(12,LOW);
  pinMode(13,OUTPUT); digitalWrite(13,LOW);
  sendData("AT+RST\r\n",2000,DEBUG); // resetta modulo
  sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configura come access point
  sendData("AT+CIFSR\r\n",1000,DEBUG); // ottieni un indirizzo ip
  sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configura per connessioni multiple
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // avvia server sulla porta 80
}

void loop(){
  if(esp8266.available()) {
    if(esp8266.find("+IPD,")){
        delay(1000);
        int connectionId = esp8266.read()-48; 
        esp8266.find("pin=");
        //Serial.print(Serial.read());
        delay(1000);
        int pinNumber = (esp8266.read()-48)*10; 
        pinNumber += (esp8266.read()-48); 
        Serial.print("pin =");  Serial.println(pinNumber);
        digitalWrite(pinNumber, !digitalRead(pinNumber));          
        String closeCommand = "AT+CIPCLOSE="; 
        closeCommand+=connectionId;
        closeCommand+="\r\n";
        sendData(closeCommand,1000,DEBUG);      
    }
  }
}

//Funzione usata per inviare i dati al modulo ESP8266
String sendData(String command, const int timeout, boolean debug){
  String response = "";
  esp8266.print(command); 
  long int time = millis();
  while((time+timeout) > millis()){
    while(esp8266.available()){
      char c = esp8266.read(); 
      response+=c;
    }  
  }
  if(debug){
    Serial.print(response);
  }
  return response;
}

Puoi fare tutto con l'ESP8266, dipende da quale scheda usi. Se usi l'ESP01 credo debba sacrificare la seriale.

Sono in pochi che usano l'ESP accoppiato all'Arduino

Uso un ESP01e seguendo il consiglio ho provato a togliere le istruzioni relative alla seriale di comunicazione con il monitor (usata solo per debug), ma il problema persiste.