Data logger com Ethernet Shield W5500

Mais uma opção para você montar o seu projeto conectado na rede local ou até mesmo na internet, vamos conhecer o Ethernet Shield W5500 e montar um data logger com ethernet shield para armazenar dados em um cartão SD instalado na placa.

Arduino Ethernet Shield W5500

O Ethernet Shield W5500 é uma placa parecida com o conhecidíssimo Ethernet Shield W5100, que já foi assunto de alguns posts aqui no Arduino e Cia, mas vamos ver que o W5500 tem algumas vantagens e características bem interessantes.

O Ethernet Shield W5500

A primeira diferença que notamos no Ethernet Shield W5500 e que agrada bastante, é o tamanho e o posicionamento do conector ethernet (RJ45). Ao contrário de outras placas, ele tem um tamanho reduzido e foi colocado de tal maneira que você consegue encaixar outro shield sobre ele, caso seja necessário:

O shield conta também com dois conectores para módulos da linha Grove, que é um sistema que utiliza um cabo padrão de 4 pinos que facilita o processo de conexão, já que os cabos não podem ser ligados de forma invertida. O sistema Grove é indicado para iniciantes, estudantes e hobistas que precisam criar os seus projetos usando microcontroladores mas que não querem montar complicados circuitos eletrônicos. No W5500, você tem um conector para módulos que utilizam comunicação I2C e um para comunicação UART (serial).

Temos ainda um botão de reset e também um slot para cartão SD (máximo de 2GB, FAT16 ou FAT32). Isso permite que você armazene dados da web em um cartão de memória ou até mesmo carregue uma página web a partir dele. 

Diferenciais do Shield W5500

Internamente, o W5500 tem melhorias com relação à estabilidade e performance e uma maior capacidade de conexão: 8 sockets, o que significa que você pode conectar o W5500, por exemplo, à 8 páginas web simultaneamente, ou criar um web server que aceite 8 conexões ao mesmo tempo. Para efeito de comparação, o W5100 suporta até 4 conexões.

Outro detalhe muito importante do ethernet shield W5500 é que ele trabalha com 3.3V nos pinos de sinal, mas é tolerante à 5V, assim você pode usar o shield tanto com Arduino Uno e Mega, que trabalham com 5V, como com o Arduino Due, Intel Edison e Linkit One, que trabalham com 3.3V.

Abaixo, outras características do shield W5500:

E para finalizar, os pinos utilizados pelo shield para comunicação com o Arduino:

Biblioteca arduino para W5500

Para montar o nosso data logger com ethernet shield W5500 e Arduino vamos substituir a biblioteca ethernet que já vem instalada por padrão na IDE. Você pode simplesmente apagar a pasta ethernet que já existe ou movê-la para algum outro local no seu computador. 

Depois de fazer isso, baixe a biblioteca do W5500 neste link, descompacte o arquivo e coloque a nova pasta ethernet dentro da pasta libraries da IDE. Essa biblioteca que você instalou serve tanto para o W5500 como para o W5100, ok?

A biblioteca tem vários exemplos de uso. São 16 ao todo, com os mais comuns como WebClient e WebServer além de exemplos com FTP e DHCP.

Programa data logger e Web Server com W5500

No nosso data logger vamos criar um web server e armazenar no cartão SD, à cada 10 segundos, o estado das portas analógicas A0, A1 e A2. Esse é um exemplo bem simples de utilização, que você pode usar como base para gravar informações de data e hora, dados de sensores, avisos e outras informações no cartão para posterior análise.

Insira no shield um cartão de memória formatado como FAT16 ou FAT32 e carregue o programa abaixo no Arduino:

//Programa: Data logger com Ethernet Shield W5500
//Autor: Arduino e Cia

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

const int chipSelect = 4;

//Define o MAC Address usando o endereco da placa ou
//atribuindo um MAC manualmente
#if defined(WIZ550io_WITH_MACADDRESS)
;
#else
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
#endif

//Altere o IP abaixo de acordo com o endereco IP da sua rede
IPAddress ip(192, 168, 15, 100);

//Inicializa o servidor Web na porta 80
EthernetServer server(80);

void setup()
{
  Serial.begin(9600);

  //Inicializa a conexao ethernet
#if defined(WIZ550io_WITH_MACADDRESS)
  Ethernet.begin(ip);
#else
  Ethernet.begin(mac, ip);
#endif
  server.begin();
  //Mostra no serial monitor o endereco IP
  Serial.print("Servidor no endereco IP: ");
  Serial.println(Ethernet.localIP());

  //Inicializa o cartao SD
  Serial.print("Inicializando cartao SD...");

  //Verifica se o cartao esta presente ou com erro
  if (!SD.begin(chipSelect)) {
    Serial.println("Erro no cartao ou cartao nao inserido!");
    // don't do anything more:
    return;
  }
  Serial.println(" Cartao inicializado.");
  Serial.println();
  Serial.println("Aguardando conexoes....");
}


void loop()
{
  //Aguarda conexoes
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Nova conexao");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == 'n' && currentLineIsBlank) {
          //Envia uma resposta padrao HTTP
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          //Recarrega a pagina a cada 10 segundos
          client.println("Refresh: 10");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");

          //Efetua a leitura das portas analogicas
          int valor_porta0 = analogRead(0);
          int valor_porta1 = analogRead(1);
          int valor_porta2 = analogRead(2);
          //Mostra os valores no browser
          client.print("Porta analogica 0: ");
          client.print(valor_porta0);
          client.print("<br/>");
          client.print("Porta analogica 1: ");
          client.print(valor_porta1);
          client.print("<br/>");
          client.print("Porta analogica 2: ");
          client.print(valor_porta2);
          client.print("<br/>");

          //Grava os valores lidos no cartao SD
          //Abre o arquivo arquivo.txt
          File datafile = SD.open("datalogger.txt", FILE_WRITE);
          //Se arquivo.txt estiver disponivel, grava os dados
          if (datafile)
          {
            datafile.print("Porta analogica 0: ");
            datafile.println(valor_porta0);
            datafile.print("Porta analogica 1: ");
            datafile.println(valor_porta1);
            datafile.print("Porta analogica 2: ");
            datafile.println(valor_porta2);
            datafile.println();
            datafile.close();
            //Mensagem de aviso no serial monitor
            Serial.println("Dados gravados no cartao SD");
          }
          //Mensagem de erro caso datalogger.txt nao
          //estiver disponivel
          else {
            Serial.println("Erro ao abrir datalogger.txt");
          }
          break;
        }
        if (c == 'n') {
          currentLineIsBlank = true;
        }
        else if (c != 'r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

O programa realiza a definição das configurações de IP do Ethernet Shield (endereço IP, máscara, gateway, etc),  e também verifica se o cartão SD foi corretamente inserido. Caso tudo esteja ok, mostra essas informações no Serial Monitor e aguarda a conexão ao web server:

No browser de sua preferência, digite o endereço IP que foi mostrado no serial monitor. As informações relativas às portas analógicas serão mostradas na tela:

A página é recarregada à cada 10 segundos, e nesse intervalo também são gravadas as informações no cartão SD, em um arquivo chamado datalogger.txt. 

Você pode abrir esse arquivo em um editor de textos comuns para verificar o processo de gravação. Também é possível importar esses dados em uma planilha, gerar gráficos, etc.

Gostou deste post de data logger com Ethernet Shield? Confira outros posts usando Ethernet Shield aqui mesmo no Arduino e Cia!

5/5 - (1 voto)

Related posts

Novos livros de Eletrônica, Arduino e Raspberry Pi!

by Arduino e Cia
8 anos ago

Sensor GY-80 – Acelerômetro Giroscópio Magnetômetro e Barômetro

by Arduino e Cia
10 anos ago

Use o Blynk para controlar o Arduino por bluetooth

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