May 22 2012

Exemplo do Ethernet Shield ENC28J60 com Arduino

Nessa publicação irei mostrar como ligar o seu Arduino em Rede, mas antes vou abordar uma breve e simples introdução de como é uma Rede.

Uma rede pode ser divida em 5 camadas básicas (modelo OSI/ISO são 7 camadas) como mostrada na figura abaixo:

  • A camada de aplicação suporta todas as aplicações da rede, como por exemplo, os protocolos FTP, SMTP, HTTP e etc. O conteúdo dessa camada é desenvolvido pelo projetista do software.
  • A camada de transporte pela transferência dos dados hospedeio-hospedeiro, normalmente usa os protocolos TCP ou UDP. TCP garante que todos os dados cheguem corretamente, já o UDP não da essa garantia. Essa camada normalmente já esta implementada em alguma biblioteca.
  • A camada de rede é a responsável pelo roteamento do dos datagramas da origem ao destino. O protocolo utilizado é o protocolo IP
  • A camada de enlace é a responsável pela transferência de dados entre elementos vizinhos da rede. Utiliza-se o protocolo Ethernet.
  • A camada física é simplesmente o hardware, no nosso caso o Ethernet Shield.

 

Trabalhar em rede não é uma tarefa muito fácil como muitos pensam, e essa Shield facilita muito o trabalho para uma conexão de um Arduino na rede, pois não é necessário o computador  para fazer o papel de servidor. Me lembro que a primeira vez que fui conectar meu Arduino na rede para acionar um relé via browser, tive que escrever um programa complicadíssimo em C/Linux.

 

Nosso projeto consistira em fazer uma leitura da temperatura ambiente, essa leitura será processada e enviada para a rede (através da Shield) onde por um browser executado em um computador ou tablet ligados à rede poderá ser visualizada.

Obs. Para fazer a leitura do termômetro utilizarei o mesmo algoritimo feito no post Arduino + LM35 – Como montar um termometro

Materiais Utilizados:

Quem estiver interessado em ver o esquema elétrico do Ethernet Shield a WebTronico fornece o PDF clicando aqui

O segredo da Shield que estamos trabalhando é o Circuito Integrado ENC28J60 da Microchip que é o controlador Ethernet que nos permitirá fazer o acesso nossa rede. A figura abaixo esclarece um pouco seus níveis de abstração.

O propósito desse artigo não é abordar o circuito integrado e sim sua funcionalidade, então para mais informações sobre o controlador Ethernet ENC28J60 acesse seu DataSheet clicando aqui

Primeiramente iremos fazer as conexões do sensor de temperatura LM35 nos terminais da Shield, que por consequência estarão ligados aos do Arduino. Abaixo figura que representa as ligações no Arduino, mas lembre-se essas mesmas ligações devem ser feitas na SHIELD:

Como o LM35 é um sensor analógico, ele deve ser ligado em uma das 6 portas analógicas, seu VCC ligado em 5V e seu terra ligado no GND.

Dica: Não inverta o VCC com o GND, isso irá esquentar demais o sensor podendo causar a inutilização do equipamento.

Pronto primeira parte do projeto está OK, o sensor ja esta ligado na Shield, agora vem a parte que nos interessa. Como fazer essa captura e coloca-la na rede para podermos acessar via browser ou qualquer outro cliente HTTP?

Apos ligar o sensor, você deverá instalar a biblioteca que controla o ENC28J60 pois não é a mesma que vem como padrão no Arduino, você deverá fazer o download desse biblioteca clicando aqui, após feito o download a biblioteca devera ser descompactada na pasta libraries . OBS. É extremamente necessario o download dessa biblioteca ou o projeto não irá funcionar.

Após a conclusão da instalação da biblioteca, vamos ao que realmente interessa nesse momento, que é o código necessário para podermos executar nosso Ethernet Shield na rede.

//Ethernet Shield para medir temperatura exemplo criado para o site WebTronico.

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   //Endereço MAC - Camada de Enlace                                                        
static uint8_t ip[4] = {192, 168, 0,15}; //Endereço IP - Camada de Rede
static uint16_t port = 80; //Porta padrão protocolo HTTP

ETHER_28J60 e;

int analog;
float temperatura;

void setup()
{
  e.setup(mac, ip, port);
}

void loop()
{
  if (e.serviceRequest())
  {
    e.print("<html><head><title>WebServer Simples</title></head><body>");//Instruções HTML.
    e.print("<H1>Temperatura</H1><br/>");
    e.print("Temperatura em Celsius: ");
    analog = analogRead(0);
    temperatura = (analog * 0.00488);  // 5V / 1023 = 0.00488 (precisão do A/D)
    temperatura = temperatura * 100; //Converte milivolts para graus celcius, lembrando que a cada 10mV equi
    e.print(temperatura);
    e.print("<br><br><b>Desenvolvido por Allan Romanato</b></body></html>");
    e.respond();
  }
  delay(100);
}

A execução desse código nos mostrará o resultado exibido na figura abaixo.

 

Nesse post pode-se concluir que não existe dificuldade em colocar seu Arduino na rede, o código é relativamente simples, e os resultados são muito interessantes, pode-se fazer várias coisas com um Arduino em rede, como por exemplo controlar sua casa a longa distância.

Espero que tenham gostado.

Allan Romanato.