Open top menu
sábado, fevereiro 07, 2015


Hoje vamos apresentar um projeto básico de automação remota com o ethernet shield Enc28j60.  O arduino Nano será configurado como WebServer disponibilizando uma página html para visualização e acionamento dos IOs da placa.
Pagina html para acionamento dos comandos e visualização dos status das chaves.
Antes de começar a apresentação do projeto vamos ressaltar algumas limitações do Enc28j60.

Buffer para resposta do html
A cada request, apenas uma variável de buffer para o response pode ser retornada, o Arduino Uno e Nano possuem apenas 2Kb de memória para utilização por todo o programa, dessa forma, limitamos em 1Kb a variável para criação do html de resposta, se excedermos 1Kb, o Arduino irá travar. É importante durante o desenvolvimento do projeto com Enc28j60 verificar a quantidade de caracteres que está sendo atribuída e nunca exceder 1Kb. A pagina html do projeto possui 900 caracteres, está no limite para montagem de um html de resposta. Como alternativa, podemos montar apenas a resposta no formato Json com os status dos IOs, e criar uma página html que realiza o acesso via Javascript e Ajax, dessa forma não teremos restrição para montagem do html de apresentação dos dados, mas teremos que manter e abrir o arquivo html para acessarmos a placa de automação.

Instabilidade
Verificamos alguns problemas de instabilidade e travamento do Arduino quando usamos em um mesmo projeto com outras comunicações, principalmente seriais ou com RTC, A principal diferença entre o Enc28j60 e o W5100 é que o Enc28j60 executa a a pilha TCP/IP no Arduino, enquanto que o W5100 isola em seu próprio shield, permitindo que o Arduino execute apenas o código implementado para o projeto. Existem inúmeras bibliotecas criadas para o Enc28j60 que podem ser avaliadas e testadas, mas a recomendação é usar um shield com o W5100 para criação de projetos complexos e com múltiplos dispositivos.

Mesmo com as limitações acima, o Enc28j601 pode ser usado para desenvolvimento projetos de WebServer com acionamento de saídas e leitura de sinais analógicos e digitais.

Lista de componentes
1 - Arduino NANO V3.0
1 - Placa Nano Automation Shield, a venda em nossa loja virtual.
1 - Fonte 12V
1 - Shield Enc28j60, a venda em nossa loja virtual.
3 - Chaves liga/desliga
3 - Resistores 10K
10 - Fios com conectores MODU para conexão do projeto

Conexões do projeto
Algumas versões do enc28j60 não possuem regulador de tensão para alimentação direta em 5V. A recomendação é utilizar um regulador LM1117 3.3 e alimentá-lo diretamente no barra de terminais de 5V, algumas versões do Arduino não fornecem a corrente necessária no pino 3V3 para alimentação de shields de Ethernet.



Esquema elétrico de ligações



Alimentação do Enc38j60
Verifique o modelo do shield Enc28j60. As novas versões vem com  12 pinos, e possui um regulador de tensão para 5V, nesse caso, podemos ligar direto na saída 5V da placa. algumas versões do Enc28j60 são alimentadas com 3,3V e não podem ser alimentadas com 5V. A recomendação para essas versões é utilizar um LM1115 3,3V para alimentação. Algumas versões clone do Arduino não conseguem fornecer a corrente necessária para o funcionamento do módulo, ocasionando travamentos.

Esquema de ligação das chaves


Watchdog e EEPROM 
Em um projeto de automação é fundamental que seja persistido em memória não volátil os últimos comandos enviados pelo usuário. Se o Arduino travar ou ocorrer interrupção da alimentação, o Arduino deve preservar nas saídas as últimos comandos enviados pelo usuário. No nosso projeto usamos o método EEPROM.write para gravar o ultimo comando para cada saída e o método EEPROM.read no setup para ler o último comando e iniciar a placa em um eventual travamento ou interrupção por falta de energia.

O projeto implementa um watchdog time com um timer de 8 segundos. Um watchdog timer é um dispositivo eletrônico temporizado que dispara um reset ao sistema se o programa principal, deixar de fazer reset no watchdog timer.


Código fonte do projeto
#include <EtherCard.h>
#include <EEPROM.h>
#include <avr/wdt.h>

#define PIN_RED 6
#define PIN_GREEN 5
#define PIN_BLUE 3
#define PIN_ALARM 3

#define CHAVE_1 2
#define CHAVE_2 4
#define CHAVE_3 7

int MemSaveSaida1 = 1;
int MemSaveSaida2 = 2;
int MemSaveSaida3 = 3;
int MemSaveSaida4 = 4;

int ValueSaveSaida1 = 0;
int ValueSaveSaida2 = 0;
int ValueSaveSaida3 = 0;
int ValueSaveSaida4 = 0;

// Ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };


static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[1000]; // tcp/ip send and receive buffer
BufferFiller bfill;

void setup(){
   wdt_enable(WDTO_8S); //Watchdog 8 Segundos


  //Setup Inicial / descomentar build / comentar
  //EEPROM.write(MemSaveSaida1, 0);
  //EEPROM.write(MemSaveSaida2, 0);
  //EEPROM.write(MemSaveSaida3, 0);        
  //EEPROM.write(MemSaveSaida4, 0);
 
  Serial.begin(57600);
  Serial.println("Iniciando Setup");    

  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(PIN_ALARM, OUTPUT);

   
ValueSaveSaida1 = EEPROM.read(MemSaveSaida1);
  ValueSaveSaida2 = EEPROM.read(MemSaveSaida2);
  ValueSaveSaida3 = EEPROM.read(MemSaveSaida3);
  ValueSaveSaida4 = EEPROM.read(MemSaveSaida4);
 
  digitalWrite(A0, ValueSaveSaida1);
  digitalWrite(A1, ValueSaveSaida2);
  digitalWrite(A2, ValueSaveSaida3);
  digitalWrite(A3, ValueSaveSaida4);

 
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
  {
    Serial.println( "Failed to access Ethernet controller");
  }


  ether.staticSetup(myip, gwip);
  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);

  analogWrite(6, 0);
  analogWrite(5, 0);  
  analogWrite(3, 0);

  Serial.println("Finalizando Setup");    
}



static word homePage() {

  Serial.println("Gerando Home Page");

  int S1 = digitalRead(A0);
  int S2 = digitalRead(A1);
  int S3 = digitalRead(A2);
  int S4 = digitalRead(A3);
  int Chave1 = digitalRead(CHAVE_1);
  int Chave2 = digitalRead(CHAVE_2);
  int Chave3 = digitalRead(CHAVE_3);

  int LedR = analogRead(6);
  int LedG = analogRead(5);
  int LedB = analogRead(3);

 
int AL = digitalRead(PIN_ALARM);
         

  bfill = ether.tcpOffset();
 
  bfill.emit_p(PSTR("<html><head>"));
  bfill.emit_p(PSTR("<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css' rel='stylesheet'></link>"));

  bfill.emit_p(PSTR("</head>"));
  bfill.emit_p(PSTR("<body>"));
  bfill.emit_p(PSTR("<div class='jumbotron'>"));
  bfill.emit_p(PSTR("<h2>Interface de comando</h2>"));
  bfill.emit_p(PSTR("<div class='row'>"));
  bfill.emit_p(PSTR("<div class='col-md-6'>"));
  bfill.emit_p(PSTR("<table class='table table-bordered'>"));
  bfill.emit_p(PSTR("<tbody>"));

  //SAIDA 1

  bfill.emit_p(PSTR("<tr><td width=200px>Saida 1 - "));
  if(S1 == HIGH)
  {
    bfill.emit_p(PSTR("On"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S1/OFF' type='button'>Desligar</button>"));
  }
  else
  {
    bfill.emit_p(PSTR("Off"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S1/ON' type='button'>Ligar</button>"));      
  }      
  bfill.emit_p(PSTR("</td></tr>"));


  //SAIDA 2
  bfill.emit_p(PSTR("<tr><td width=200px>Saida 2 - "));
  if(S2 == HIGH)
  {
    bfill.emit_p(PSTR("On"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S2/OFF' type='button'>Desligar</button>"));
  }
  else
  {
    bfill.emit_p(PSTR("Desligado"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S2/ON' type='button'>Ligar</button>"));      
  }      
  bfill.emit_p(PSTR("</td></tr>"));

  //SAIDA 3
  bfill.emit_p(PSTR("<tr><td width=200px>Saida 3 - "));
  if(S3 == HIGH)
  {
    bfill.emit_p(PSTR("Off"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S3/OFF' type='button'>Desligar</button>"));
  }
  else
  {
    bfill.emit_p(PSTR("Desligado"));
    bfill.emit_p(PSTR("</b></td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S3/ON' type='button'>Ligar</button>"));      
  }      
  bfill.emit_p(PSTR("</td></tr>"));

  //SAIDA 4
  bfill.emit_p(PSTR("<tr><td width=200px>Saida 4 - "));
  if(S4 == HIGH)
  {
    bfill.emit_p(PSTR("Ligado"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S4/OFF' type='button'>Desligar</button>"));
  }
  else
  {
    bfill.emit_p(PSTR("Desligado"));
    bfill.emit_p(PSTR("</td><td>"));
    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S4/ON' type='button'>Ligar</button>"));      
  }      
  bfill.emit_p(PSTR("</td></tr>"));

  bfill.emit_p(PSTR("<tr><td colspan=2>Chave 1 - "));
  if(Chave1 == HIGH)
  {
    bfill.emit_p(PSTR("On"));  
  }
  else
  {
    bfill.emit_p(PSTR("Off"));      
  }

  bfill.emit_p(PSTR("<br>"));    
  bfill.emit_p(PSTR("Chave 2 - "));
  if(Chave2 == HIGH)
  {
    bfill.emit_p(PSTR("On"));  
  }
  else
  {
    bfill.emit_p(PSTR("Off"));      
  }
 
  bfill.emit_p(PSTR("<br>"));    
  bfill.emit_p(PSTR("Chave 3 - "));
  if(Chave3 == HIGH)
  {
    bfill.emit_p(PSTR("On"));  
  }
  else
  {
    bfill.emit_p(PSTR("Off"));      
  }

  bfill.emit_p(PSTR("</td></tr>"));  
  bfill.emit_p(PSTR("</tbody>"));
  bfill.emit_p(PSTR("</table>"));
  bfill.emit_p(PSTR("</div>"));
  bfill.emit_p(PSTR("</body>"));
  bfill.emit_p(PSTR("</html>"));
   
  return bfill.position();
}

void loop(){  
  WebServer();
  wdt_reset(); //diReset WatchDog
}

void WebServer()
{

 word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

 
 // char* dados =(char *)Ethernet::buffer + pos;
 // if(pos >0)
 // {
 //    Serial.println(dados);
 // }
 
    if(strstr((char *)Ethernet::buffer + pos, "GET /S1/ON") != 0) {
      Serial.println("Received ON command");
      digitalWrite(A0, HIGH);
      EEPROM.write(MemSaveSaida1, 1);
    }
    if(strstr((char *)Ethernet::buffer + pos, "GET /S1/OFF") != 0) {
      Serial.println("Received OFF command");
      digitalWrite(A0, LOW);
      EEPROM.write(MemSaveSaida1, 0);
    }
   
  if(strstr((char *)Ethernet::buffer + pos, "GET /S2/ON") != 0) {
      Serial.println("Received ON command");
       digitalWrite(A1, HIGH);
       EEPROM.write(MemSaveSaida2, 1);
    }
    if(strstr((char *)Ethernet::buffer + pos, "GET /S2/OFF") != 0) {
      Serial.println("Received OFF command");
       digitalWrite(A1, LOW);
       EEPROM.write(MemSaveSaida2, 0);  
    }

  if(strstr((char *)Ethernet::buffer + pos, "GET /S3/ON") != 0) {
      Serial.println("Received ON command");
       digitalWrite(A2, HIGH);
       EEPROM.write(MemSaveSaida3, 1);
    }

    if(strstr((char *)Ethernet::buffer + pos, "GET /S3/OFF") != 0) {
      Serial.println("Received OFF command");
       digitalWrite(A2, LOW);
       EEPROM.write(MemSaveSaida3, 0);   
    }


  if(strstr((char *)Ethernet::buffer + pos, "GET /S4/ON") != 0) {
      Serial.println("Received ON command");
       digitalWrite(A3, HIGH);
       EEPROM.write(MemSaveSaida4, 1);      
    }
  if(strstr((char *)Ethernet::buffer + pos, "GET /S4/OFF") != 0) {
      Serial.println("Received OFF command");
      digitalWrite(A3, LOW);
      EEPROM.write(MemSaveSaida4, 0);
   }    

 
  if(strstr((char *)Ethernet::buffer + pos, "GET /R/ON") != 0) {
      Serial.println("Received OFF command");
      analogWrite(5, 255);
   }

 
   if(strstr((char *)Ethernet::buffer + pos, "GET /R/OFF") != 0) {
      Serial.println("Received OFF command");
      analogWrite(5, 0);
   }

 
   if(strstr((char *)Ethernet::buffer + pos, "GET /G/ON") != 0) {
      Serial.println("Received OFF command");
      analogWrite(6, 255);
   }

 
   if(strstr((char *)Ethernet::buffer + pos, "GET /G/OFF") != 0) {
      Serial.println("Received OFF command");
      analogWrite(6, 0);
   }

 
   if(strstr((char *)Ethernet::buffer + pos, "GET /B/ON") != 0) {
      Serial.println("Received OFF command");
      analogWrite(3, 255);
   }

   if(strstr((char *)Ethernet::buffer + pos, "GET /B/OFF") != 0) {
      Serial.println("Received OFF command");
      analogWrite(3, 0);
   }

   if (pos)
   {
    ether.httpServerReply(homePage());  
   }  
}

Acessando pelo browser com o ip http://192.168.1.200 configurado no projeto a página de monitoramento é aberta.

Vídeo de funcionamento do projeto



Clique aqui para download da biblioteca EtherCad utilizada no projeto;

Atualização:

O código fonte abaixo adiciona na interface o comando de led RGB.


/*

Sergio Mokshin

Automação Livre

Fev/2015



*/



#include <EtherCard.h>

#include <EEPROM.h>

#include <avr/wdt.h>



#define PIN_RED 6

#define PIN_GREEN 5

#define PIN_BLUE 3

#define PIN_ALARM 3



#define CHAVE_1 2

#define CHAVE_2 4

#define CHAVE_3 7



int MemSaveSaida1 = 1;

int MemSaveSaida2 = 2;

int MemSaveSaida3 = 3;

int MemSaveSaida4 = 4;

int MemSaveRed    = 5;

int MemSaveBlue   = 6;

int MemSaveGreen  = 7;



int ValueSaveSaida1 = 0;

int ValueSaveSaida2 = 0;

int ValueSaveSaida3 = 0;

int ValueSaveSaida4 = 0;

int ValueSaveRed    = 0;

int ValueSaveBlue   = 0;

int ValueSaveGreen  = 0;







// ethernet interface ip address

static byte myip[] = { 192, 168, 1, 200 };

// gateway ip address

static byte gwip[] = { 192, 168, 1, 1 };



// ethernet mac address - must be unique on your network

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[1100]; // tcp/ip send and receive buffer

BufferFiller bfill;



void setup(){

 

   wdt_enable(WDTO_8S); //Watchdog 8 Segundos

 

  //Setup Inicial / descomentar build / comentar

  //EEPROM.write(MemSaveSaida1, 0);

  //EEPROM.write(MemSaveSaida2, 0);

  //EEPROM.write(MemSaveSaida3, 0);        

  //EEPROM.write(MemSaveSaida4, 0);

 

 

  Serial.begin(38400);

  Serial.println("Iniciando Setup");    

 

  pinMode(A0, OUTPUT);

  pinMode(A1, OUTPUT);

  pinMode(A2, OUTPUT);

  pinMode(A3, OUTPUT);

  pinMode(PIN_ALARM, OUTPUT);

   

  ValueSaveSaida1 = EEPROM.read(MemSaveSaida1);

  ValueSaveSaida2 = EEPROM.read(MemSaveSaida2);

  ValueSaveSaida3 = EEPROM.read(MemSaveSaida3);

  ValueSaveSaida4 = EEPROM.read(MemSaveSaida4);

  ValueSaveRed = EEPROM.read(MemSaveRed);

  ValueSaveBlue = EEPROM.read(MemSaveBlue);

  ValueSaveGreen = EEPROM.read(MemSaveGreen);

   

  digitalWrite(A0, ValueSaveSaida1);

  digitalWrite(A1, ValueSaveSaida2);

  digitalWrite(A2, ValueSaveSaida3);

  digitalWrite(A3, ValueSaveSaida4);





   

 

   analogWrite(5, ValueSaveRed);

   analogWrite(6, ValueSaveGreen);

   analogWrite(3, ValueSaveBlue);    

 

 

 

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)

  {

    Serial.println( "Failed to access Ethernet controller");

  }



  ether.staticSetup(myip, gwip);

  ether.printIp("IP:  ", ether.myip);

  ether.printIp("GW:  ", ether.gwip);

  ether.printIp("DNS: ", ether.dnsip);  

 

  Serial.println("Finalizando Setup");    

}



static word homePage() {

 

  Serial.println("Gerando Home Page");



  int S1 = digitalRead(A0);

  int S2 = digitalRead(A1);

  int S3 = digitalRead(A2);

  int S4 = digitalRead(A3);

 

  int Chave1 = digitalRead(CHAVE_1);

  int Chave2 = digitalRead(CHAVE_2);

  int Chave3 = digitalRead(CHAVE_3);

 

  int LedR = analogRead(6);

  int LedG = analogRead(5);

  int LedB = analogRead(3);

 

  int AL = digitalRead(PIN_ALARM);

           

  bfill = ether.tcpOffset();

 

  bfill.emit_p(PSTR("<html><head>"));

  bfill.emit_p(PSTR("<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css' rel='stylesheet'></link>"));

  bfill.emit_p(PSTR("</head>"));

  bfill.emit_p(PSTR("<body>"));

  bfill.emit_p(PSTR("<div class='jumbotron'>"));

  bfill.emit_p(PSTR("<h2>Interface de comando</h2>"));

  bfill.emit_p(PSTR("<div class='row'>"));

  bfill.emit_p(PSTR("<div class='col-md-6'>"));

 

  //SAIDA 1

  if(S1 == HIGH)

  {

    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S1/OFF' type='button'>S1 - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S1/ON' type='button'>S1 - OFF -> Ligar</button></a>"));      

  }      

  bfill.emit_p(PSTR("<br><br>"));

 

   //SAIDA 2

  if(S2 == HIGH)

  {

    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S2/OFF' type='button'>S2 - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S2/ON' type='button'>S2 - OFF -> Ligar</button></a>"));      

  }      

  bfill.emit_p(PSTR("<br><br>"));

 

   //SAIDA 3

  if(S3 == HIGH)

  {

    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S3/OFF' type='button'>S3 - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S3/ON' type='button'>S3 - OFF -> Ligar</button></a>"));      

  }      

  bfill.emit_p(PSTR("<br><br>"));

 

   //SAIDA 4

  if(S4 == HIGH)

  {

    bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/S4/OFF' type='button'>S4 - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/S4/ON' type='button'>S4 - OFF -> Ligar</button></a>"));      

  }      

  bfill.emit_p(PSTR("<br><br>"));



 

  //RGB Red

  if(ValueSaveRed == 255)

  {

     bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/R/OFF' type='button'>Red - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/R/ON' type='button'>Red - OFF -> Ligar</button></a>"));          

  }      

  bfill.emit_p(PSTR("<br><br>"));

 

    //RGB Green

  if(ValueSaveGreen == 255)

  {

     bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/G/OFF' type='button'>Green - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/G/ON' type='button'>Green - OFF -> Ligar</button></a>"));          

  }      

  bfill.emit_p(PSTR("<br><br>"));

 

 

    //RGB Blue

  if(ValueSaveBlue == 255)

  {

     bfill.emit_p(PSTR("<a class='btn btn-success btn-lg' href='/B/OFF' type='button'>Blue - ON -> Desligar</button></a>"));      

  }

  else

  {

    bfill.emit_p(PSTR("<a class='btn btn-danger btn-lg' href='/B/ON' type='button'>Blue - OFF -> Ligar</button></a>"));          

  }      

 

  bfill.emit_p(PSTR("<br><br>"));

 

  bfill.emit_p(PSTR("Chave 1 - "));

  if(Chave1 == HIGH)

  {

    bfill.emit_p(PSTR("On"));  

  }

  else

  {

    bfill.emit_p(PSTR("Off"));      

  }



  bfill.emit_p(PSTR("<br>"));    

  bfill.emit_p(PSTR("Chave 2 - "));

  if(Chave2 == HIGH)

  {

    bfill.emit_p(PSTR("On"));  

  }

  else

  {

    bfill.emit_p(PSTR("Off"));      

  }

 

  bfill.emit_p(PSTR("<br>"));    

  bfill.emit_p(PSTR("Chave 3 - "));

  if(Chave3 == HIGH)

  {

    bfill.emit_p(PSTR("On"));  

  }

  else

  {

    bfill.emit_p(PSTR("Off"));      

  }





  bfill.emit_p(PSTR("</div>"));

  bfill.emit_p(PSTR("</body>"));

  bfill.emit_p(PSTR("</html>"));

     

  return bfill.position();

}





void loop(){  

 

  WebServer();

  wdt_reset(); //diReset WatchDog

}

void WebServer()

{

 word len = ether.packetReceive();

  word pos = ether.packetLoop(len);

 

 // char* dados =(char *)Ethernet::buffer + pos;

 // if(pos >0)

 // {

 //    Serial.println(dados);

 // }

 

    if(strstr((char *)Ethernet::buffer + pos, "GET /S1/ON") != 0) {

      Serial.println("Received ON command");

      digitalWrite(A0, HIGH);

      EEPROM.write(MemSaveSaida1, 1);

    }

    if(strstr((char *)Ethernet::buffer + pos, "GET /S1/OFF") != 0) {

      Serial.println("Received OFF command");

      digitalWrite(A0, LOW);

      EEPROM.write(MemSaveSaida1, 0);

    }

   

  if(strstr((char *)Ethernet::buffer + pos, "GET /S2/ON") != 0) {

      Serial.println("Received ON command");

       digitalWrite(A1, HIGH);

       EEPROM.write(MemSaveSaida2, 1);

    }

    if(strstr((char *)Ethernet::buffer + pos, "GET /S2/OFF") != 0) {

      Serial.println("Received OFF command");

       digitalWrite(A1, LOW);

       EEPROM.write(MemSaveSaida2, 0);  

    }



  if(strstr((char *)Ethernet::buffer + pos, "GET /S3/ON") != 0) {

      Serial.println("Received ON command");

       digitalWrite(A2, HIGH);

       EEPROM.write(MemSaveSaida3, 1);

    }

    if(strstr((char *)Ethernet::buffer + pos, "GET /S3/OFF") != 0) {

      Serial.println("Received OFF command");

       digitalWrite(A2, LOW);

       EEPROM.write(MemSaveSaida3, 0);

     

    }



  if(strstr((char *)Ethernet::buffer + pos, "GET /S4/ON") != 0) {

      Serial.println("Received ON command");

       digitalWrite(A3, HIGH);

       EEPROM.write(MemSaveSaida4, 1);      

    }

  if(strstr((char *)Ethernet::buffer + pos, "GET /S4/OFF") != 0) {

      Serial.println("Received OFF command");

      digitalWrite(A3, LOW);

      EEPROM.write(MemSaveSaida4, 0);

   }    

 

  if(strstr((char *)Ethernet::buffer + pos, "GET /R/ON") != 0) {

      Serial.println("Received OFF command");

      analogWrite(5, 255);

      EEPROM.write(MemSaveRed, 255);

      ValueSaveRed = 255;

   }

 

   if(strstr((char *)Ethernet::buffer + pos, "GET /R/OFF") != 0) {

      Serial.println("Received OFF command");

      analogWrite(5, 0);

      EEPROM.write(MemSaveRed, 0);

      ValueSaveRed = 0;

   }

 

   if(strstr((char *)Ethernet::buffer + pos, "GET /G/ON") != 0) {

      Serial.println("Received OFF command");

      analogWrite(6, 255);

      EEPROM.write(MemSaveGreen, 255);    

      ValueSaveGreen = 255;

   }

 

   if(strstr((char *)Ethernet::buffer + pos, "GET /G/OFF") != 0) {

      Serial.println("Received OFF command");

      analogWrite(6, 0);

      EEPROM.write(MemSaveGreen, 0);          

      ValueSaveGreen = 0;

   }

 

   if(strstr((char *)Ethernet::buffer + pos, "GET /B/ON") != 0) {

      Serial.println("Received OFF command");

      analogWrite(3, 255);

      EEPROM.write(MemSaveBlue, 255);      

      ValueSaveBlue = 255;    

   }

 

   if(strstr((char *)Ethernet::buffer + pos, "GET /B/OFF") != 0) {

      Serial.println("Received OFF command");

      analogWrite(3, 0);

      EEPROM.write(MemSaveBlue, 0);                      

      ValueSaveBlue = 0;    

   }

 

 

   if (pos)

   {

    ether.httpServerReply(homePage());  

   }  

}


Guias de referência / apoio
http://www.tweaking4all.com/hardware/arduino/arduino-enc28j60-ethernet/
http://nathanhein.com/2013/02/getting-arduino-online-with-an-enc28j60/
https://github.com/jcw/ethercard/blob/master/README.md
Tagged
Different Themes
Written by Lovely

Aenean quis feugiat elit. Quisque ultricies sollicitudin ante ut venenatis. Nulla dapibus placerat faucibus. Aenean quis leo non neque ultrices scelerisque. Nullam nec vulputate velit. Etiam fermentum turpis at magna tristique interdum.

0 comentários