segunda-feira, 2 de setembro de 2013

Tutorial Shield Ethernet Arduino - Parte 3: Controle de led's com página HTML

    Nesse 3º passo do tutorial Shield Ethernet Arduino, iremos estudar uma das várias formas de controle de componentes externo por uma página em HTML. Nesse caso iremos usar 2 LED's para fácil compreensão do código.

Material:

    - Arduino
    - Shield Ethernet
    - 2 Led's
    - Fios Jumpers, cabo USB e cabo com conexão RJ-45

Imagens:

    Na imagem abaixo podemos ver como conectei o arduino mais o shield com os led's. 
    Pino 5 -  led1
    Pino 7 -  led 2






Código HTML:

    Nesse código  usamos uma tag nova que é: IFRAME. Essa tag, na definição popular, com um significado prático, é uma 'página dentro de outra página'. Na verdade, é um "quadro", com as dimensões que você quer, onde você coloca outra página. É útil para você não precisar ficar repetindo um mesmo conteúdo várias vezes. No caso do código, quando declaramos <client.println("<IFRAME name=inlineframe style=\"display:none\" >");  >   você esta bloqueando a abertura de novas páginas.

Código:

 /***************************************************************    
      Tutorial Ethernet Shield    
  Objetivo: Controle de led pela LAN   
  Autor: Felipe Souza Amaral    
  ***************************************************************/    
 #include <SPI.h>   
 #include <Ethernet.h>   
 byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC address   
 IPAddress ip(192,168,0,13); // IP da lan   
 IPAddress myserver(0,0,0,0); // IP do server   
 EthernetServer server(80); //porta de conexão    
 EthernetClient client;   
 String readString;    
 void setup(){   
  pinMode(5, OUTPUT); //pin do LED1   
  pinMode(7, OUTPUT); //pin do LED2   
  Ethernet.begin(mac, ip);    
  server.begin();   
  Serial.begin(9600);    
  Serial.println("server/client 1.0 test");    
  Serial.println("Enviando um g na serial monitor para Client - Test");    
 }   
 void loop(){   
  // checar comunicação Serial   
  if (Serial.available() > 0)    
  {   
   byte inChar;   
   inChar = Serial.read();   
   if(inChar == 'g')   
   {   
   }   
  }    
  EthernetClient client = server.available();   
  if (client) {   
   while (client.connected()) {   
    if (client.available()) {   
     char c = client.read();   
     if (readString.length() < 100) {   
      readString += c;    
      Serial.print(c);   
     }    
     if (c == '\n') {   
      Serial.println(readString); //Mostra no Serial Monitor o debuging   
      // HTML data header   
      if(readString.indexOf('?') >=0) {    
       client.println("HTTP/1.1 Controle de LED's");   
       client.println();   
       client.println();    
      }   
      else {   
       client.println("HTTP/1.1 200 OK"); //send new page   
       client.println("Content-Type: text/html");   
       client.println();   
       /******************************Página em HTML******************************/  
       client.println("<HTML>");   
       client.println("<HEAD>");   
       client.println("<TITLE>Arduino - Teste LED's</TITLE>");   
       client.println("</HEAD>");   
       client.println("<BODY>");   
       client.println("<H1>LED's - ON/OFF</H1>");   
       //Led 1   
       client.println("<h4>Led 1</h4>");   
       client.println("<a href=\"/?led1on\" target=\"inlineframe\">ON</a>");    
       client.println("<a href=\"/?led1off\" target=\"inlineframe\">OFF</a>");   
       //Led 2   
       client.println("<h4>Led 2</h4>");   
       client.println("<a href=\"/?led2on\" target=\"inlineframe\">ON</a>");    
       client.println("<a href=\"/?led2off\" target=\"inlineframe\">OFF</a>");   
       //bloqueio de acesso as páginas{?led2on;?led2off} por exemplo   
       client.println("<IFRAME name=inlineframe style=\"display:none\" >");    
       client.println("</IFRAME>");   
       client.println("</BODY>");   
       client.println("</HTML>");   
      }   
      delay(1);   
      client.stop();   
      /*LED 1*/  
      if(readString.indexOf("led1on") >0) //checa se o led foi aceso   
      {   
       digitalWrite(5, 1); // set pin 5 high   
       Serial.println("Led Off");   
      }   
      if(readString.indexOf("led1off") >0) //checa se o led foi aceso   
      {   
       digitalWrite(5, 0); // set pin 5 low   
       Serial.println("Led On");   
      }   
      /*LED 2*/  
      if(readString.indexOf("led2on") >0)   
      {   
       digitalWrite(7, 1); // set pin 7 high   
       Serial.println("Led Off");   
      }   
      if(readString.indexOf("led2off") >0)   
      {   
       digitalWrite(7, 0); // set pin 7 low   
       Serial.println("Led On");   
      }   
      readString="";   
      readString="";   
     }   
    }   
   }   
  }   
 }    


Vídeo:




6 comentários:

  1. Valeu Felipe, se possível manda a programação do módulo de reconhecimento de voz com arduino para acionamento de lampadas etc.....

    Obrigado
    Luis Neto

    ResponderExcluir
  2. Esses comando funcionam a partir do micro sd ?

    ResponderExcluir
    Respostas
    1. Sim! O exemplo nao está sendo usado o cartão micro SD, mas podemos utilizar td o html no cartão

      Excluir
    2. pode me ajudar? preciso ligar uns relés e pra isso estou construindo uma página html pra colocar no sd, mas como fica os comandos?? ex:
      client.println(" html body form method=get ");
      client.println(" p h1 Gerador Starter ZAP Telecom /h1 /font /p ");



      for(int i=1;i < (numofrele + 1) ;i++){
      Rele = String("Rele") + i;

      if(inString.indexOf(Rele+"=on")>0 || inString.indexOf("all=on")>0){
      Serial.println(Rele+"on");
      digitalWrite(rele[i], HIGH);
      value[i] = "off";
      }else if(inString.indexOf(Rele+"=off")>0 || inString.indexOf("all=off")>0 ){
      Serial.println(Rele+"off");
      digitalWrite(rele[i], LOW);
      value[i] = "on";
      }
      client.println(" br "+Rele+" input type=submit name="+Rele+" value="+value [i]+" ");
      }
      client.println(" br b TODOS /b input type=submit name=all value=on input type=submit name=all value=off ");
      client.println(" /from /html /body");
      break;

      como coloco isso no sd de forma que o Arduino receba os comandos?

      Excluir
    3. retirei as tags, pq o blog não aceita

      Excluir
    4. Fala meu amigo? Desculpa a demora em responder....tava atolado de coisa pra fazer.
      E ai conseguiu?? Precisa de ajuda ainda?

      Excluir