SOBRE

LightBlog
Responsive Ads Here

domingo, 30 de novembro de 2014

#15 Shield Ethernet no Arduino

A primeira coisa a fazer é identificar qual o modelo do seu shield ethernet para Arduino, os modelos mais comuns são esses dois abaixo:
 

                             Enc28j60                                   Modelo W5100

As principais diferenças entre os dois é modelos, é que o modelo R3 é fácil para encaixar no arduino e possui entrada para cartão microSD, diferente do Enc28j60. Para este experimento iremos utilizar o modelo W5100.

EXPERIMENTO

Este experimento basicamente irá mostrar em um endereço WEB o valor recebido de sensor de temperatura e umidade. Para isso iremos precisar dos seguintes componentes: 

- 1 Arduino
- 1 Ethernet Shield Modelo R3
- 1 Sensor de Temperatura e Umidade
- Jumpers

Primeiramente é necessário conectar todos os componentes, como mostra a Figura abaixo.

O próximo passo é preciso que o IP do seu computador esteja na mesma faixa do IP que será colocado no shield. No windows, você irá em Iniciar->Executar e digitar CMD, e pressionar ENTER, após isso abrirá uma página de prompt de comando preta, digite "ipconfig /all", no Linux também abra o terminal de comando e digite "ifconfig". 

No Linux, foi fixado o IP. Como mostra a Figura abaixo.  


No Windows também é possível fazer isso, basta ir em Iniciar->Painel de Controle->Rede e Internet->Conexões de Rede, então com o botão direito ir em propriedades da sua conexão de rede, após isso ir em propriedades do IPv4, marcar a opção "Usar o seguinte endereço de IP", como mostra na Figura abaixo.




Neste experimento iremos utilizar o shield como um Servidor Web, a leitura da temperatura e umidade é um experimento realizado anteriormente, para maiores dúvidas pode ser visto AQUI. Veja abaixo o código que foi utilizado, com comentários:


 /*  
  Utilizando shield arduino e sensor de temperatura e umidade!  
  Nov de 2014  
  Fernando Puntel - Ajudino  
 */  
 #include <SPI.h>  
 #include <Ethernet.h>  
 #include <dht.h>  
 #define sensor A2   
 dht DHT;  
 int temperatura, umidade;  
 int contador;  
 byte mac[] = {   
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
 IPAddress ip(192,168,2,2);       // IP utilizado para acessar via navegador  
 // Inicia o servidor da internet, com endereço IP e porta que sera utilizada  
 // Porta 80 utilizada para HTTP  
 EthernetServer server(80);         
 void setup() {  
  Serial.begin(9600);  // Aguarda a conexao serial abrir  
   while (!Serial) {  
   ;   
   }  
  // Inicia a conexao com a internet e o servidor   
  Ethernet.begin(mac, ip);  
  server.begin();  
  Serial.print("server is at ");  
  Serial.println(Ethernet.localIP());  
 }  
 void loop() {  
  EthernetClient client = server.available(); // Aguarda clientes de entrada  
  if (client) {  
   Serial.println("new client");  
   boolean currentLineIsBlank = true;     // Uma requisicao Ethernet termina com uma linha em branco  
   while (client.connected()) {  
    if (client.available()) {  
     char c = client.read();  
     // Se chegou ao fim da linha e recebeu uma linha em branco  
     // a requisicao terminou  
     Serial.write(c);              
     if (c == '\n' && currentLineIsBlank) {  
      // Envia um cabeçalho de resposta HTTP padrao  
      client.println("HTTP/1.1 200 OK");  
      client.println("Content-Type: text/html");  
      client.println("Connection: close");   
       client.println("Refresh: 5");   
      client.println();  
      client.println("<!DOCTYPE HTML>");  
      client.println("<html>");  
      // Leitura dados sensor e imprimindo no navegador  
      for(contador = 0; contador < 5; contador++){  
       // TEMPERATURA  
       client.print ("Temperatura: ");  
       temperatura = DHT.temperature;  
       client.print (temperatura);  
       client.println (" graus");   
       // UMIDADE  
       client.print("Umidade: ");  
       umidade = DHT.humidity;  
       client.print(umidade);  
       client.println("%");   
       client.println("<br />"); //Enter  
      }  
      client.println("</html>");  
      break;  
     }  
     if (c == '\n') {  
      currentLineIsBlank = true;  
     }   
     else if (c != '\r') {  
      currentLineIsBlank = false;  
     }  
    }  
   }  
   delay(1);  
   // Fechando a conexao  
   client.stop();  
   Serial.println("client disonnected");  
  }  
 }  

Ao final, no navegador deve aparecer uma tela parecida com esta: