quarta-feira, 18 de setembro de 2013

Tutorial Shield Ethernet Arduino - Parte 4: Link de páginas e carregamento de imagens

    O 4º passo do nosso tutorial é como fazer links entre páginas e hospedar imagens, tudo usando o arduino mais o shield ethernet e o cartão de memória micro SD.

Material:

    - Arduino
    - Shield Ethernet
    - Cartão micro SD





Código HTML:

    Para criar link entre páginas usando o HTML devemos declara a tag <a> e </a>, esse tipo de comando faz a tag um link clicável na página web. O valor do atributo href do <a> tag deve conter o nome do arquivo da página da Web que está ligado, por exemplo:

 <p> Ir para <a href="page2.htm"> página 2 </ a>. </ p>  

    A linha acima de HTML irá criar um parágrafo de texto com a Page2 parte do parágrafo tornando-se um link para um arquivo chamado Page2.htm.
    O arquivo Page2.htm Também deve existir e estar no mesmo diretório que a página que contém o link para ela.

Exemplo HTML :


    Logo abaixo encontra-se os documetos em HTML que farão os links entre o menu, page1 e page 2.e

Código do Index.htm

<!DOCTYPE html>
<html>
    <head>
        <title>Arduino - linking de paginas pelo cartao SD</title>
    </head>
    <body>
        <h1>Escolha a pagina</h1>
        <p>Vá para <a href="pag1.htm">pag 1</a>.</p>
        <p>Vá para <a href="pag2.htm">pag 2</a>.</p>
        <img src="imag2.jpg" />
    </body>
</html>


Código do pag1.htm:

<!DOCTYPE html>
<html>
    <head>
        <title>Controle do led 1 - Pagina com Imagem</title>
    </head>
    <body>
        <h1>Controle da pagina 1</h1>
        <p>Vá para <a href="index.htm"> Menu</a>.</p>
        <p>Vá para <a href="pag2.htm"> pag 2</a>.</p>
        <img src="imag.jpg" />
    </body>
</html>

Código do pag2.htm:

<!DOCTYPE html>
<html>
    <head>
        <title>Controle da PAG 2</title>
    </head>
    <body>
        <h1>Controle da pagina 2</h1>
        <p>Vá para<a href="index.htm">Menu</a>.</p>
        <p>Vá para<a href="pag1.htm">pag 1</a>.</p>
        <img src="imag3.jpg" />
    </body>
</html>


Se quiser fazer o download ja dos arquivos utilizados clique no link ao lado: Arduino Shield Ethernet

Código:

 #include <SPI.h>  
 #include <Ethernet.h>  
 #include <SD.h>  
 // Tamanho do buffer apara armazenar HTTP   
 #define REQ_BUF_SZ  20  
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Maca Adrees do shield ethernet  
 IPAddress ip(192, 168, 0, 13);  // <------------------------------------------------- Entre com seu IP AQUI  
 EthernetServer server(80);    // Porta do Servidor  
 File webFile;          // Arquivos no Cartão SD  
 char HTTP_req[REQ_BUF_SZ] = {0};   
 char req_index = 0;         
 String readString;    
 void setup(){  
  // Ethernet chip  
  pinMode(10, OUTPUT);  
  digitalWrite(10, HIGH);  
  Serial.begin(9600);    // Comucicação Serial  
  // Inicializando SD card  
  Serial.println("Comunicação com SD card...");  
  if (!SD.begin(4)) {  
   Serial.println("ERROR - SEM comunicação com SD card !");  
   return;    
  }  
  Serial.println("Sucesso - SD card INICIALIZADO.");  
  // index.htm file  
  if (!SD.exists("index.htm")) {  
   Serial.println("ERROR - Sem existencia do index.htm!");  
   return;   
  }  
  Serial.println("Sucesso - Encontrado index.htm file.");  
  Ethernet.begin(mac, ip); // Inicializando comunicação com shield Ethernet  
  server.begin();      // Começando cominicação com clients  
 }  
 void loop()  
 {  
  EthernetClient client = server.available(); // Tentatica de cominucação com clients  
  if (client) {   
   boolean currentLineIsBlank = true;  
   while (client.connected()) {  
    if (client.available()) {  // Client - Pronto para LEITURA  
     char c = client.read(); // Lendo byte a byte  
     if (req_index < (REQ_BUF_SZ - 1)) {  
      HTTP_req[req_index] = c;       
      req_index++;  
     }  
     Serial.print(c);    
     if (c == '\n' && currentLineIsBlank) {  
      client.println("HTTP/1.1 200 OK");  
      client.println("Content-Type: text/html");  
      client.println("Connnection: close");  
      client.println();  
      /***********************************Abrir páginas Menu/PAG1/PAG2****************************/  
      if (StrContains(HTTP_req, "GET / ")  
       || StrContains(HTTP_req, "GET /index.htm")) {  
       webFile = SD.open("index.htm");    // open web page file  
      }  
      else if (StrContains(HTTP_req, "GET /pag1.htm")) {  
       webFile = SD.open("pag1.htm");    // open web page PAG1 file  
      }  
      else if (StrContains(HTTP_req, "GET /pag2.htm")) {  
       webFile = SD.open("pag2.htm");    // open web page PAG2 file  
      }  
      else if (StrContains(HTTP_req, "GET /imag.jpg")) {  
             webFile = SD.open("imag.jpg");  // open imagem file  
      }  
      else if (StrContains(HTTP_req, "GET /imag2.jpg")) {  
             webFile = SD.open("imag2.jpg"); // open imagem file  
      }  
      else if (StrContains(HTTP_req, "GET /imag3.jpg")) {  
             webFile = SD.open("imag3.jpg"); // open imagem file  
      }  
      // Envido de dados para o client  
      if (webFile) {  
       while(webFile.available()) {  
        client.write(webFile.read());  
       }  
       webFile.close();  
      }  
      // reset do buffer index e all buffer elementos para 0  
      req_index = 0;  
      StrClear(HTTP_req, REQ_BUF_SZ);  
      break;  
     }  
     // Todas as linhas d client como read/write 'r/w'  
     if (c == '\n') {  
      currentLineIsBlank = true;  
     }   
     else if (c != '\r') {  
      currentLineIsBlank = false;  
     }  
    }   
   }   
   delay(1);     
   client.stop();   
  }   
 }  
 void StrClear(char *str, char length)  
 {  
  for (int i = 0; i < length; i++) {  
   str[i] = 0;  
  }  
 }  
 //Função de busca de strings  
 char StrContains(char *str, char *sfind)  
 {  
  char found = 0;  
  char index = 0;  
  char len;  
  len = strlen(str);  
  if (strlen(sfind) > len) {  
   return 0;  
  }  
  while (index < len) {  
   if (str[index] == sfind[found]) {  
    found++;  
    if (strlen(sfind) == found) {  
     return 1;  
    }  
   }  
   else {  
    found = 0;  
   }  
   index++;  
  }  
  return 0;  
 }  

Vídeo:




5 comentários:

  1. Seguir passo a passo teu tutorial entretanto o arquivo index.htm não é inicializado.
    Alguma dica do que pode estar acontecendo?

    ResponderExcluir
    Respostas
    1. Quando vc criou o arquivo .htm ele ficou com o icone do seu navegador? Ou ficou com o icone do editor de texto?

      Excluir
    2. Ficou com o ícone do navegador.

      Excluir
    3. Daniel?! Me mande um email por favor, tentei entrar em contato com vc pelo hangouts.

      felipengmec@gmail.com

      Vamos combinar uma forma de resolver seu problema. No aguardo

      Excluir
  2. Olá alguém pode ajudar-me? estou utilizando wifi cc3000 com o programa exemplo HTTPServe e gostaria que o arduino cham-se essa página - http://localhost:8000/sdk/agentspeak.html?id=Como vai denise? Como posso incluir isso na programação para que fique da mesma forma de digitado na linha de endereço do navegador? porfavor ajude-me, pois já fiz muita pesquisa e não obtive exito.

    ResponderExcluir