Criar Webserver com ENC28j60

Prezados,

Itens utilizados:

ENC28J60
Arduíno Uno
UIPEthernet - Biblioteca
SPI - Biblioteca
Roteador TP-link Tl-wr940n

Estou montando um projeto com Arduíno que deverá ter um Web server que receberá requisições Http para executar determinadas ações.

Meu problema é que a conexão com o Arduíno utilizando o ENC28J60 é bem sucedida por um período de tempo apenas e sem explicação aparente ou alteração no código ele deixa de funcionar.

A pinagem está correta pois já consegui fazer a conexão porem agora não tenho mais sucesso com isso, nem utilizando os exemplos prontos das bibliotecas.

/*
  Documentação:
  URL BASE: HTTP://192.168.0.175/?

  Funções:
    -> Ligar bomba URI: rele1 = 1;
    -> Desligar bomba URI: rele1 = 0;
    -> Programação automática URI: auto = 2;
    -> Ligar RELE2 URI: rele2 = 1;
    -> Desligar RELE2 URI: rele2 = 0;
    -> Status URI: status

  Operacionalização:

    O cliente inicia conexão do tipo GET com a solicitação desejada e o Webserver retorna com o status.


  LOW - Pino desligado sem passagem de corrente elétrica.
  HIGH - Pino ligado há passagem de corrente elétrica.
*/

#include <SPI.h> //INCLUSÃO DE BIBLIOTECA
#include <UIPEthernet.h> //INCLUSÃO DE BIBLIOTECA

//DEFINIÇÃO DO ENDEREÇO MAC E O DO IP
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 0, 175 };
EthernetServer server(80); //PORTA EM QUE A CONEXÃO SERÁ FEITA

int rele1 = 6; //PINO DIGITAL UTILIZADO PARA CONTROLAR A BOMBA
int rele2 = 5; //PINO DIGITAL UTILIZADO PARA CONTROLAR O RELE2
int sensorInfer = 7; //SENSOR DE NÍVEL TIPO BOIA INFERIOR
int sensorInter = 8; //SENSOR DE NÍVEL TIPO BOIA INTERMEDIÁRIO
int sensorSuper = 9; //SENSOR DE NÍVEL TIPO BOIA SUPERIOR

String readString = String(30); //VARIÁVEL PARA BUSCAR DADOS NO ENDEREÇO (URL)
String bomba = "desligada"; // VARIÁVEL PARA GUARDAR O STATUS DA BOMBA.
String programacao = "auto";//DEFINIÇÃO DO TIPO DE PROGRAMAÇÃO.

void setup(){
  Ethernet.begin(mac, ip); //PASSA OS PARÂMETROS PARA A FUNÇÃO QUE VAI FAZER A CONEXÃO COM A REDE
  server.begin(); //INICIA O SERVIDOR PARA RECEBER DADOS NA PORTA 80
  pinMode(rele1, OUTPUT); //DEFINE O PINO COMO SAÍDA
  pinMode(rele2, OUTPUT);
  pinMode(sensorInfer, OUTPUT);
  pinMode(sensorInter, OUTPUT);
  pinMode(sensorSuper, OUTPUT);
}

void atualizarStatus(){
  if (digitalRead(rele1) == HIGH) {
    bomba = "desligada";
  } if (digitalRead(rele1) == LOW) {
    bomba = "ligada";
  }
}
  
void loop(){
EthernetClient client = server.available(); //CRIA UMA CONEXÃO COM O CLIENTE
  if (client) { // SE EXISTE CLIENTE FAZ
    atualizarStatus();
    while (client.connected()) {//ENQUANTO EXISTIR CLIENTE CONECTADO, FAZ
   if (client.available()) { //SE O CLIENTE ESTÁ HABILITADO, FAZ
    char c = client.read(); //LÊ CARACTER A CARACTER DA REQUISIÇÃO HTTP
    if (readString.length() < 100) //SE O ARRAY FOR MENOR QUE 100, FAZ
      {
        readString += c; // "readstring" VAI RECEBER OS CARACTERES LIDO
      }  
        if (c == '\n') { //SE ENCONTRAR "\n" É O FINAL DO CABEÇALHO DA REQUISIÇÃO HTTP, FAZ
          if (readString.indexOf("?") <0){ //SE ENCONTRAR O CARACTER "?", FAZ
          }
          else //SENÃO, FAZ
        if(readString.indexOf("rele1=1") >0){ //SE ENCONTRAR O PARÂMETRO "rele1=1", FAZ
             digitalWrite(rele1,LOW); 
             programacao = "manual";
         }
         if (readString.indexOf("rele1=0") >0){ 
             digitalWrite(rele1, HIGH);    
             programacao = "manual";      
         }
         if (readString.indexOf("status") >0){ //SENÃO, FAZ
           atualizarStatus();
         }
         if (readString.indexOf("auto=2") >0){ //SENÃO, FAZ
           programacao = "auto";
         }
         
          client.println("HTTP/1.1 200 OK"); //ESCREVE PARA O CLIENTE A VERSÃO DO HTTP
          client.println("Content-Type: text/plain"); //ESCREVE PARA O CLIENTE O TIPO DE CONTEÚDO(texto/html)
          client.println();
          //AS LINHAS ABAIXO CRIAM A PÁGINA HTML
          atualizarStatus();
          client.println("Bomba: " + bomba);
          client.println("Programação: " + programacao);
          readString=""; //A VARIÁVEL É REINICIALIZADA
          client.stop(); //FINALIZA A REQUISIÇÃO HTTP E DESCONECTA O CLIENTE
            }
          }
        }
      }

     if (programacao == "auto"){
      
        if (digitalRead(sensorInfer) == LOW){
          digitalWrite(rele1, HIGH);
        } if (digitalRead(sensorInfer) == HIGH and (digitalRead(sensorInter) == HIGH) and (digitalRead(sensorSuper) == HIGH) ){
          digitalWrite(rele1, LOW);
        }
    }
 }

Como construir um Web server que seja persistente.