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.