Comunicação com Arduino Ethernet shield W5100

No post anterior nós mostramos a configuração básica do Arduino Ethernet Shield W5100 com a IDE Arduino, habilitando a placa e fornecendo um endereço IP para acesso através da rede.

Neste post, vamos mostrar como enviar dados do Arduino para um browser utilizando esse shield, montando um circuito composto por 2 botões e 2 leds, mais a placa ethernet.

Preparação do ethernet shield com Arduino

Para executar os testes você vai precisar do seguinte material:

Encaixa o ethernet shield no Arduino e monte o circuito abaixo, observando a polaridade dos leds. Os botões estão conectados nas portas digitais 6 e 7, e os leds nas portas 8 e 9:

Agora carregue o seguinte programa no Arduino, que tem como base o programa de exemplo do Webserver que acompanha a IDE do Arduino.

Nas linhas 14, 15 e 16 coloque as configurações de endereço IP de acordo com a sua rede, ok? Esses valores podem variar, então na dúvida verifique a faixa de ip da sua rede local.

// Programa: Webserver com aviso de acionamento de botoes
// Autor: Arduino e Cia
// Baseado no programa exemplo Webserver, de David Mellis e Tom Igoe

#include <SPI.h>
#include <Ethernet.h>

// A linha abaixo permite que voce defina o endereço fisico (MAC ADDRESS) 
// do ethernet shield
byte mac[] = { 0xAB, 0xCD, 0x12, 0x34, 0xFF, 0xCA };

// Os valores abaixo definem o endereço IP, gateway e máscara. 
// Configure de acordo com a sua rede.
IPAddress ip(192,168,0,100);         //Define o endereço IP
IPAddress gateway(192,168,0,1);    //Define o gateway
IPAddress subnet(255, 255, 255, 0); //Define a máscara de rede

// Inicializa a biblioteca da placa ethernet com as 
// configurações de IP fornecidas
EthernetServer server(80);

int botao1 = 6;   //Botao que aciona o led vermelho
int botao2 = 7;   //Botao que aciona o led verde
int pinoled=8;    //Pino ligado ao led vermelho
int pinoled2=9;   //Pino ligado ao led verde
int leitura = 0;  //Armazena o valor de leitura do botao1
int leitura2 = 0; //Armazena o valor de leitura do botao2
char mensagem[20];   //Mensagem a ser apresentada para o botao1
char mensagem2[20];  //Mensagem a ser apresentada para o botao2

void setup()
{
  pinMode(pinoled, OUTPUT); //Led
  pinMode(pinoled2, OUTPUT); //Led
  pinMode(botao1, INPUT);
  digitalWrite(botao1, HIGH);
  pinMode(botao2, INPUT);
  digitalWrite(botao2, HIGH);
  //Inicializa a conexao ethernet e o servidor web na porta 80
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop()
{
   //Verifica o status do Botao1 e imprime mensagem no browser
   leitura=digitalRead(botao1);   
   if (leitura == 0)
     { 
       digitalWrite(pinoled,1);
       char mensagem[] = "Botao 1 acionado !!!";
       char mensagem2[] = "Aguardando...";
       apresentadados(mensagem,mensagem2);
       delay(5000);   //Mantem o led aceso por 5 segundos
       //Imprime mensagem padrao, aguardando novo acionamento
       apresentadados("Aguardando...", "Aguardando...");  
       digitalWrite(pinoled,0);
     }

   //Verifica o status do Botao2 e imprime mensagem no browser
   leitura2=digitalRead(botao2); 
   if (leitura2 == 0)
     { 
       digitalWrite(pinoled2,1);
       char mensagem[] = "Aguardando...";
       char mensagem2[] = "Botao 2 acionado !!!";
       apresentadados(mensagem,mensagem2);   
       delay(5000);  //Mantem o led aceso por 5 segundos
       //Imprime mensagem padrao, aguardando novo acionamento
       apresentadados("Aguardando...", "Aguardando...");  
       digitalWrite(pinoled2,0);   
     }
}

// Rotina que recebe os valores de Mensagem e Mensagem2, 
// imprimindo o resultado no browser

void apresentadados(char msg[], char msg2[])  
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          // the connection will be closed after completion of 
          // the response
          client.println("Connection: close");  

          // refresh the page automatically every 5 sec
          client.println("Refresh: 0");  
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          client.print("Estado Botao 1 : ");
          client.print(msg);
          client.println("<br />");
          client.print("Estado Botao 2 : ");
          client.print(msg2);
          client.println("<br />");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
 }

Acessando o Arduino pelo browser

Para testar o programa, entre no browser (testei com o Firefox), e digite o endereço da placa de rede que você configurou no programa, e pressione ENTER.

Nesse momento o browser irá acessar o servidor Web interno da placa, e aguardará o pressionamento de um dos botões:

Pressione um dos botões do circuito e o led correspondente será aceso, indicando que o botão foi acionado. Ao mesmo tempo, será exibida na tela a mensagem abaixo, de acordo com o botão pressionado:

O led permanecerá aceso por 5 segundos, e depois disso o browser exibirá a mensagem de “Aguardando…” para os 2 botões, sinalizando a espera de um novo sinal:

Gostou deste post do Arduino com ethernet shield W5100? Confira outros posts de IoT aqui mesmo no Arduino e Cia!

Avalie este post!

Related posts

Resistor de elevação

by Arduino e Cia
12 anos ago

Livro Arduino – Primeiros Passos com Sensores

by Arduino e Cia
10 anos ago

Ligue uma impressora térmica no Arduino

by Arduino e Cia
8 anos ago
Sair da versão mobile