sexta-feira, 14 de abril de 2017

Arduino Ethernet Shield

Ethernet Shield W5100

Um modulo interessante e que faz o usuário entender e empregar o conceito de Internet of Things (IoT) é o Arduino Ethernet Shield 5100.


fonte: warehouse 3D

Com essa placa é possível que o usuário acesse comandos com o Arduino conectado na rede utilizando acesso remoto, troca de dados, verificação de dispositivos remotos, entre outros. O modulo é facilmente encontrado no mercado de eletrônicos e dispositivos, e com bom custo benefício, além do mais é compatível com o Arduino UNO, Mega e possui um leitor de cartão MicroSD.

O modulo baseia-se no chip WIZnet Ethernet W5100 que possibilita o acesso a rede IP no protocolo TCP, utilizando a biblioteca Ethernet Library e SD Library.

Utilizando o modulo

Primeiramente é necessário testar a placa utilizando um programa que configura o endereço de IP, utilizando os valores mais comuns nesse tipo de comunicação :
  • Endereço de IP: 192.168.0.100
  • Gateway: 192.168.0.1
  • Máscara: 255.255.255.0
Faça o acoplamento do modulo sobre a placa Arduino UNO e conecte os cabos de alimentação e de rede.




fonte: próprio autor

Ao observar na parte de cima do modulo, é possível ver alguns LEDs que indicam o estado de funcionamento.



fonte: próprio autor

Feito as conexões é hora de carregar um programa para configurar o endereço IP. Os valores apresentados são os mais comuns e foram apresentados acima no texto.

Carregue o programa na IDE do Arduino, abra o prompt de comado do seu computador e digite o seguinte comando seguido de <ENTER>:

ping 192.168.0.100

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

// A linha abaixo permite que voce defina o endereço 
// fisico (MAC ADDRESS) da placa de rede
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

void setup() 
{
  Ethernet.begin(mac, ip, gateway, subnet); //Inicializa o Ethernet Shield
}

void loop() {}

Se tudo estiver de acordo uma janela como a apresentada abaixo deve ser apresentada indicando que o modulo está corretamente configurado para enviar e receber dados.


fonte: próprio autor

Testando um programa simples

Agora é hora de acionar um pino do Arduino por meio do browser do seu computador, monte um circuito simples como o demonstrado abaixo.
Utilize um LED de qualquer cor e um resistor no valor de 220 ohms.

fonte: próprio autor

Nesse circuito, vai ser acionado um LED, onde o comando vai ser por meio do seu navegador, algo bastante parecido com um projeto desenvolvido anteriormente com o NodeMCU (LINK).

Abra a IDE do Ardino, copie e cole o código abaixo para testar a comunicação da seua rede ethernet com a Shield.

#include <SPI.h> 
#include <Ethernet.h> // Biblioteca utilizada para comunicação com o Arduino
 
// A linha abaixo permite definir o endereço físico (MAC ADDRESS) da placa...
//de rede.  
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

byte ip[] = { 192, 168, 0, 104 }; // Define o endereço IP.

// Porta onde estará aberta para comunicação Internet e Arduino.
EthernetServer server(80);  
 
String readString;
int Pin = 7; //  Pino digital onde será ligado e desligado o LED.
 
void setup(){
 
  pinMode(Pin, OUTPUT); // Define o Pino 9 como saída.
  Ethernet.begin(mac, ip); // Chama o MAC e o endereço IP da placa Ethernet.
  //  Inicia o servidor que esta inserido junto a placa Ethernet.
  server.begin();  
}
 
void loop(){
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 100) {
          readString += c;             
        }

        if (c == '\n') {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
    
           // A partir daqui começa os códigos html.
    
          client.println("<HTML>");
          client.println("<BODY>");
          client.println("<H1>Acende LED</H1>");
          client.println("<H1>Projeto basico Demonstrar Shield Ethernet</H1>");
          client.println("<hr />");
          client.println("<br />");
          
          client.println("<a href=\"/Mecatronizando/LedOn\"\">Acender led</a>");
          client.println("<a href=\"/Mecatronizando/LedOff\"\">Apagar led</a><br />");   
          
          client.println("</BODY>");
          client.println("</HTML>");
          
          delay(1);
          client.stop();
          
          if(readString.indexOf("Mecatronizando/LedOn") > 0)
          {
            digitalWrite(Pin, HIGH);  // Liga LED.
          }
          else {
            if(readString.indexOf("Mecatronizando/LedOff") > 0)
            {
              digitalWrite(Pin, LOW);  // Desliga LED.
            }
          }
          readString="";    
        }
      }
    }
  }
}

É importante observar que, o endereço da rede está com IP: 192.168.0.100, mas para evitar conflitos, deve ser alterado o IP da utilização da Shield, no meu caso por exemplo foi utilizado o endereço 192.168.0.104.


fonte: próprio autor

Enviando e recebendo dados pela rede Ethernet

Agora vamos elaborar um projeto onde dados vão trafegar por meio da rede Ethernet.
Para isso é necessário que você tenha disponível:


O circuito

Para que o controle seja feito, é necessário montar um circuito conforme abaixo e carregar o código na IDE do seu Arduino.


fonte: próprio autor

O código

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 106 }; // Define o endereço IP.
EthernetServer server(80);
String readString;

int Pin = 7; 
const int LM35 = A0;
float tempc = 0; 

void setup(){
 
  pinMode(Pin, OUTPUT); 
  Ethernet.begin(mac, ip); 
  server.begin();  
}

void loop(){

  tempc = (float(((analogRead(LM35))* 5.0 *100) / 1024.0)/2);
 
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 100) {
          readString += c;             
        }

        if (c == '\n') {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
    
           // A partir daqui começa os códigos html.
    
          client.println("<HTML>");
          client.println("<BODY>");
          client.println("<H1>Acende LED</H1>");
          client.println("<H1>Projeto basico para demonstracao com Shield Ethernet</H1>");
          client.println("<div id='wrapper'><img src='http://i.imgur.com/cam8R9X.jpg' width=200 height=100 /><br/>");
          client.println("<hr />");
          client.println("<br />");     
          
          client.println("</BODY>");
          client.println("</HTML>");

          client.println("<H1>Mecatronizando</H1><br/>");
          client.println("<a href=\"/mecatronizando/LedOn\"\">Acender led</a>");
          client.println("<br/><br/>");
          client.println("<a href=\"/mecatronizando/LedOff\"\">Apagar led</a><br />"); 
          client.println("<br/><br/>");
          client.println("<b>Valor potenciometro porta analogica 5 :    ");
          client.println(analogRead(A5)/ 204.6);
          client.println("<br/><br/>");
          client.println("Valor temperatura (*Celsius): ");
          client.println(tempc);
          client.println("&deg<br/><br/>");
          client.println("<div id='wrapper'><img src='http://i.imgur.com/ftgQPBX.png' width=100 height=100 /><br/>");
          
          delay(1);
          client.stop();
          
          if(readString.indexOf("mecatronizando/LedOn") > 0)
          {
            digitalWrite(Pin, HIGH);  
          }
          else {
            if(readString.indexOf("mecatronizando/LedOff") > 0)
            {
              digitalWrite(Pin, LOW);  
            }
          }
          readString="";    
        }
      }
    }
  }
}

No vídeo abaixo é possível ver o funcionamento do circuito de forma completa.



Gostou?
Curta a FanPage! Compartilhe!
Inscreva-se no canal!

Todos os componentes podem ser adquiridos por meio deste LINK!

Os arquivos do projetos podem ser baixados pelo LINK!


Continue com a gente e bons estudos!

2 comentários:

  1. Digamos que a necesssidade fosse de controlar 8 leds distintos. O que mudaria no codigo de forma a criar os 8 hiperlinks liga e os 8 desliga?

    ResponderExcluir
    Respostas
    1. Basicamente nada, somente os endereçamentos dos pinos.

      Excluir