Componentes Eletronicos

Ethernet Shield W5100 com Arduino – Parte 2

Eletrogate 15 de fevereiro de 20189 min

Introdução

Nós já utilizamos o Ethernet Shield W5100 para monitorar o estado de sensores e enviar os dados para uma página na internet. Isso foi feito no artigo anterior: “Ethernet Shield W5100 com Arduino“.

No artigo de hoje vamos complementar a aplicação anterior com a possibilidade de enviar comandos por meio da página na internet ao Arduino, ou seja, vamos enviar comandos para que o Arduino possa acionar ou controlar uma carga externa.

O Ethernet Shield W5100 foi apresentado em artigo anterior, e nessa segunda parte vamos expandir a última aplicação. O Ethernet Shield permite disponibilizar online dados de sensores e também enviar sinais de comando de uma página na internet para controlar os I/Os e ações do Arduino.

A biblioteca Ethernet da IDE oferece todos os recursos necessários para que dados lidos com o Arduino possam ser acessados online e também para fazer o caminho inverso.

A biblioteca trabalha com a arquitetura cliente-servidor. Nessa arquitetura, que você provavelmente conhece, um servidor(ou host) fornece serviços e recursos que são compartilhados entre vários clientes. Os clientes não compartilham recursos/serviços, mas podem enviar requisições ao servidor para ter acesso aos recursos disponibilizados por ele.

O W5100 pode ser configurado como cliente ou como servidor. Em geral, você vai ver os nomes em inglês, Web Client e Web Server. Como Web Server, o Ethernet Shield geralmente é usado para armazenar algum recurso e compartilhá-lo na web, como por exemplo, uma página de internet apresentando dados de sensores em tempo real. Essa é uma aplicação típica do Shield como Web Server.

No entanto, nem sempre é interessante armazenar a página web no próprio Ethernet Shield. Pode ser que você queira enviar os dados para um outro servidor, mais robusto e com disponibilidade garantida(um serviço de hospedagem, por exemplo). Nesse caso, é necessário configurar o W5100 como Web Client e fazer a programação correta para que ele envia requisições HTTP(GET, POST, PUT, DELETE, etc).

Nesse artigo, vamos manter a configuração como Web Server do artigo anterior, ou seja, a página que usaremos para ler comandos do usuário e controlar os I/Os do arduino está armazenada no próprio Ethernet Shield. No futuro, um novo post utilizando a configuração Web Client será feito, inclusive com alguns detalhes sobre como fazer uma página web em PHP.


Aspectos de Hardware

A montagem de Hardware com o Ethernet Shield não tem segredo. Você precisa apenas encaixar cuidadosamente o Shield no Arduino. Para exemplificar nossa aplicação, vamos ligar a saída 4 do Arduino/Shield a um módulo relé, que por sua vez aciona uma luminária LED. A ideia é enviar comandos por meio de um botão numa página na internet para acender e desligar a luminária.

Materiais necessários para o projeto Controle de Relé Via Ethernet

cta_cart

Se você ainda não sabe como usar os módulos relé, leia o artigo “Módulo relé para automação residencial

O circuito como um todo é mostrado na figura abaixo:

Ethernet Shield

Ethernet Shield para acionamento de relé via interne


Aspectos de Software

Do ponto de vista de software, é preciso 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 vêm 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:

Endereço IP para configurar o Ethernet Shield W5100

O IP está listado ao lado de inet, e no caso é: 192.168.25.119.  Alteramos o IP para 192.168.25.100 e setamos dessa forma no código abaixo:

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

// Complete com as informacoes da sua rede
byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

IPAddress ip(192, 168, 25, 100);
int saidaSensor = 4;
// Inicializa o servidor Ethernet com o IP e a porta 84
EthernetServer server(84);
String readString;

void setup()
{
  // Comeca a conexao com o servidor Ethernet
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(saidaSensor, OUTPUT);
  Serial.begin(9600);
  delay(1000);
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client)
  {
    Serial.println("Got a client");
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        //read char by char HTTP request
        if (readString.length() < 100)
        {
          //store characters to string
          readString += c;
        }
        if (c == '\n')
        {
          //Imprimne a string lida na serial. Pode comentar se quiser
          Serial.println("readString: ");
          Serial.println(readString);
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Acione a sua luminaria pela net</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("<H1>Acione os pinos do Arduino por essa pagina</H1>");
          client.println("<H2>Exemplo com pino 4</H2>");
          client.println("<FORM ACTION=\"http://192.168.25.100:84\"method=get >");
          client.println("<a href=\"/?liga\">LIGA</a>");
          client.println("<a href=\"/?desliga\">DESLIGA</a>");
          client.println("</FORM>");
          client.println("<BR>");
          client.println("</BODY>");
          client.println("</HTML>");
          delay(1);
          client.stop();
          if (readString.indexOf("liga") > 0)
          {
            digitalWrite(4, HIGH);
            Serial.println("Led On");
          }
          if (readString.indexOf("desliga") > 0)
          {
            digitalWrite(4, LOW);
            Serial.println("Led Off");
          }
          //Limpa a String
          readString = "";
        }
      }
    }
  }
}

Com o código acima e com o Ethernet Shield conectado ao seu roteador, ao digitar o endereço de IP atribuído ao W5100 no seu navegador, a seguinte página será apresentada:

Página para acionar a luminária

Essa página de interface possui dois links, um com nome “liga”, e outro com nome “desliga”. Para acionar o pino 4, e consequentemente chavear o relé, basta clicar em um dos dois.

Algumas mensagens de log são enviadas para a porta serial e podem ser úteis para debugar qualquer problema caso você queira editar o código HTML.

Por falar em código HTML, o dessa página é bem simples e rústico, apenas um título, um subtítulo e as duas opções para ligar ou desligar o relé. Uma parte interessante para dar continuidade a esse trabalho é fazer uma página HTML mais elaborada. Lembrando que o host é o próprio Ethernet Shield e portanto não há os mesmos recursos disponíveis que você teria em um PC dedicado.

Nós recomendamos as seguintes referências para experimentar códigos diferentes para a página HTML no Arduino/Ethernet Shield:

Para quem quiser se aventurar mais a fundo no desenvolvimento HTML, CSS e JavaScript, todas linguagens para desenvolvimento web, recomendamos os seguintes cursos:


Considerações Finais

Caso tenha alguma dúvida ou questão, deixe um comentário que iremos responder assim que pudermos. Não deixe de conferir os demais posts do blog indicados e também o material sobre páginas HTML e desenvolvimento web. Acompanhe o blog pois no futuro próximo uma nova aplicação com W5100 será lançada, mas dessa vez configurado como Web Client e conversando com uma página armazenada num servidor externo. Até a próxima!


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

15 de fevereiro 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!