Componentes Eletronicos

Ethernet Shield W5100 com Arduino – Parte 1

Eletrogate 31 de janeiro de 20188 min

Introdução

Nesse artigo vamos abordar o Ethernet Shield W5100 e suas possibilidades de integração com Arduino. O Ethernet Shield W5100 é uma forma rápida e prática de tornar sua placa Arduino on-line. É baseada no chip WIZnet ethernet W5100, que fornece acesso à rede nos protocolos TCP ou UDP. Duas bibliotecas nativas são usadas para poder usar o módulo facilmente: Ethernet Library e SD Library. Nesse exemplo, configuramos o Shield como WebServer para armazenar uma página online com o estado lido de um sensor TCRT5000.

O Ethernet Shield W5100 é compatível tanto com o Arduino Uno e Arduino Mega e possui um slot para cartão micro-SD, o que facilita a criação de dataloggers.

Usar o Ethernet Shield é uma forma simples de disponibilizar online dados referentes a sensores ou sistemas que você controle usando um Arduino. A biblioteca Ethernet da IDE oferece todos os recursos necessários para que dados lidos com o Arduino possam ser acessados online.

Do ponto de vista de hardware, trata-se de uma conexão simples. Basta encaixar o shield no seu Arduino UNO ou Mega e ter em mãos um cabo ethernet com conetores RJ45 para ligar no seu modem/roteador. Se seu Arduino estiver ligado em algum sistema em específico, é necessário refazer as ligações diretamente no Shield.

Ethernet Shield para Arduino

Nesse artigo, vamos fazer como exemplo a leitura de estado de um sensor TCRT5000 e apresentar a informação em uma página na internet. Ou seja, vamos atribuir um IP ao nosso Ethernet Shield e configurá-lo adequadamente, e depois vamos enviar as informações lidas pelo sensor para uma página hospedada no próprio Shield, disponibilizada na rede por meio da conexão local.

Algumas características do W5100 são importantes

  • Suporta 4 conexões independentes simultaneamente;
  • Não suporta fragmentação de IP;
  • Memória Interna 16Kbytes para Tx / Rx Buffers;
  • Suporte Interface Serial (SPI modo 0, 3)
  • Saídas função Multi-LED (TX, RX, Full / Half duplex, Colisão, Speed Link)
  • O W5100 Wiznet fornece uma rede (IP) capaz de TCP e UDP.

Uma série de LEDs indicativos também ajuda a saber o que está acontecendo com o Shield durante sua operação:

  • Led PWR: Indica que a placa e Shield está alimentada;
  • Led LINK: Indica a presença de uma ligação de rede e pisca quando o shield transmite ou recebe dados;
  • Led FULLD: Indica que a conexão de rede é full duplex;
  • Led 100M: Indica a presença de uma conexão de rede 100 Mb / s (em oposição a 10 Mb / s)
  • Led RX: Pisca quando o shield recebe dados;
  • Led TX: Pisca quando o shield envia os dados;
  • Led COLL: Pisca quando são detectadas colisões de rede

CI W5100

O coração do Shield é o CI W5100, fabricado pela WIZNet. Algumas fontes recomendam a utilização de uma fonte de alimentação externa para alimentar o Shield devido ao consumo de corrente elevado desse CI, mas muitos exemplos utilizam o cabo USB para alimentação também. O datasheet indica um consumo de até 183mA, o que está dentro das capacidades dos cabos USB 2.0(500mA) e 3.0(900mA). Assim, em nosso exemplo utilizaremos o cabo USB como fonte de alimentação.

Mas atente-se que caso você esteja alimentando outras cargas como sensores e relés, pode ser que você precise de uma fonte externa. Em geral, é recomendado o uso de uma fonte de externa para garantir que todos os componentes sejam alimentados de acordo com suas características.

A figura abaixo mostra o Ethernet Shield conectado a um Arduino.

Ethernet Shield com Arduino

O W51000 possui um buffer interno de 16K, e a velocidade de conexão é de 10 a 100Mb. Mais do que suficiente para fazer leituras de sensores e atuadores. O slot para cartão SD é uma forma prática para montar datologgers com acesso online aos dados. Aliás, se você ainda não sabe o que é um datalogger ou está pensando em fazer um, confira o nosso post sobre o assunto.


Aspectos de Hardware

Materiais necessários para o projeto Leitura de TCRT5000 Via Ethernet

cta_cart

A montagem do nosso esquema será da seguinte forma:

Montagem de Hardware

Para informações adicionais sobre o funcionameto do TCRT5000, leia o artigo principal sobre esse componente. A montagem acima não tem segredo. Repare que no desenho as ligações foram feitas já no Ethernet Shield, e o mesmo deve estar conectado ao seu Arduino conforme mostramos na segunda figura da seção de introdução.

Quando feita a montagem, utilize um cabo de rede e conecte o Ethernet Shield ao roteador ou hub de sua rede local e alimente o circuito. Agora você está pronto para programar o Arduino e controlar o Shield para disponibilizar as leituras do sensor online.


Aspectos de Software

A primeira coisa a ser feita é determinar o endereço IP e MAC a serem atribuídos ao seu Ethernet Shield. O W5100 não possui um endereço MAC de fábrica como acontece com seu notebook ou PC. Alguns modelos vem com um endereço MAC indicado em um stick na parte de trás da placa. Em geral, você deve determinar um endereço para seu Ethernet Shield. Mais informações sobre essa questão podem ser encontradas aqui. No nosso projeto, usamos o endereço padrão do exemplo “WebServer” da biblioteca Ethernet.

Acesse na sua IDE: File -> Examples -> Ethernet -> WebServer. O código que você verá é o código base usado por quase todas aplicações e projetos disponíveis na internet para disponibilizar dados de sensores online.

Para determinar o endereço IP do shield, encontre o IP de seu PC(com ipconfig /all no windows ou ifconfig -a no terminal do linux) e altere o último número. No nosso projeto, o endereço IP foi obtido com o ifconfig -a, que exibiu no terminal linux a seguinte mensagem:

Dados da rede no Linux

O IP está listado ao lado de inet, e no caso é: 192.168.25.120. O endereço MAC está listado ao lado de HWaddr: 5c:c9:d3:02:62:3e (mas esse não usamos para configurar o Ethernet Shield). Alteramos o IP para 192.168.25.100 e setamos dessa forma no código abaixo.

#include <Ethernet.h>

// Complete com as informacoes da sua rede

byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

IPAddress ip(192, 168, 25, 100);
int leituraSensor = 0;
int saidaSensor = 7;
//Inicializa o webserver com a porta 80 - porta padrão do HTTP
EthernetServer server(80);

void setup()
{
  Serial.begin(9600);
  //Pino ler o sinal no coletor do fototransistor do TCRT5000
  pinMode(saidaSensor, INPUT);
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop()
{
  leituraSensor = digitalRead(saidaSensor);
  //Fica escutando requisições de novos clientes
  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");
          client.println("Connection: close"); // the connection will be closed after completion of the response
          client.println("Refresh: 5"); // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // Apresenta na tela a leitura do sensor
          client.print("<font color=#0000FF ><b><u>");
          client.print("Leitura do sensor online");
          client.print("</u></b></font>");
          client.println("<br />");
          client.println("<br />");
          if (leituraSensor == 0)
            client.println("Nenhum Objeto identificado!");
          else
            client.println("Nenhum bjeto identificado!");
          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");
  }
}

O código acima implementa um WebServer no EthernetShield. Os trechos em inglês são referentes ao exemplo base da biblioteca Ethernet, nativa da IDE Arduino. Em geral, com esse código base e fazendo pequenas customizações, você pode configurar páginas Web e armazená-las no Ethernet Shield(WebServer) para disponibilizar informações online.

Conhecimentos de HTML e do protocolo HTTP serão muito úteis para você montar páginas mais sofisticadas. No código em questão apenas mostramos as mensagens com um pequeno título colorido(para usar outras cores, troque o código HTML correspondente na tag font color=).

Ao acessar no browser de algum computador conectado à rede de seu roteador o endereço IP do Ethernet Shield, a seguinte mensagem aparecerá:

Mensagem de objeto identificado pelo TCRT5000

Mensagem de nenhum objeto ao alcance do TCRT5000


Considerações finais

Com esse projeto você consegue disponibilizar online os dados referentes a qualquer sensor, basta fazer pequenas modificações e mudar o layout para utilizar o sensor desejado. Aqui no blog há exemplos com sensor ultrassônico, sensor de presença piroelétrico, LDR, sensor de umidade e muitos outros. Confira e implemente suas próprias configurações.

Qualquer dúvida, deixe nos comentários!

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.

 


Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

31 de janeiro de 2018

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!