quinta-feira, 28 de abril de 2016

Arduino Ethernet Shield W5100 - Tutorial como comunicar.


Boa parte das pessoas que trabalham com microcontroladores tem como objetivo comandar atuadores, ler sensores ou enviar informações remotamente. Dentre as tecnologias disponíveis e acessíveis para os entusiastas da eletrônica o Arduíno ganho um grande destaque nos últimos anos. Vários módulos foram desenvolvidos baseados na concepção do Arduíno. Dentre esses módulos o Ethernet Shield W5100 possibilita o acesso de informações processados pelo Arduíno na sua rede local, mas também pode ser conectado a internet e permitir o monitoramento ou controle da sua aplicação em qualquer lugar do mundo.



Introdução


Neste novo post vamos apresentar um pequeno tutorial para conectar o Arduíno na sua rede local de computador e dicas para a conexão com a internet. Um exemplo para comandar dois Led’s pelo browser de seu computador vai ser apresentado.


Como Comunicar com o Arduíno Ethernet Shield W5100


Para a realização do trabalho vocês irão precisar do Arduíno Ethernet Shield W5100 e um cabo de rede, além é claro do seu Arduíno. A montagem é extremamente fácil de ser executada, pois basta acoplar o Arduíno Ethernet Shield W5100 ao seu Arduíno e com o cabo de rede conecta-se ao seu roteador para que em poucos minutos você possa monitorar seus sensores, chaves e Led’s através do browser do seu computador.
Figura 1 - Arduíno UNO

Figura 2 - Arduíno Ethernet Shield W5100

O Ethernet Shield W5100 é baseado no circuito integrado Wiznet W5100 que já possui internamente todas as camadas do protocolo TCP/IP e  UDP implementadas, sendo necessários somente comandos de acesso para disponibilizar a sua aplicação na rede. As Figuras 1 e 2 ilustram as placas que será usadas nesse tutorial. 

Configuração do Webserve


Antes de começar a programar o seu Arduíno é necessário obter algumas informações da sua rede local para a correta configuração do módulo Arduíno Ethernet Shield W5100. O primeiro paço, portanto é seta corretamente um endereço de IP válido para a sua rede local. Este tutorial mostra como obter as informações pertinentes para o Windows 7, mas os mesmo princípios podem ser aplicados para outros sistemas operacionais.


Configurando o IP


Vá ao menu INICIAR e, na caixa de diálogo, escreva o comando CMD e em seguida pressione ENTER. A Figura 3 apresenta esse primeiro passo.

cmd - Arduino ethernet shield
Figura 3 - Abrindo o prompt de comando.

Uma janela preta vai abrir na sua área de trabalho, essa janela é o prompt de comando do Windows. Nela digite o comando ipconfig/all e pressione enter. A Figura 4 ilustra o procedimento.

Figura 4 - Prompt de comando do Windows.

Com a execução do comando ipconfig/all várias informações vão ser apresentadas na tela do prompt. Essas informações são relacionadas a configuração das placas de rede do seu computador e rede local. Identifique a sua placa de rede principal (aquela que está sendo usada) e colete as informações da sua conexão local (Endereço IP, Máscara de sub-rede e Gateway Padrão), pois você vai necessitar delas para configurar o Arduíno Ethernet Shield W5100. A Figura 5 demonstra como as informações vão estar no prompt de comando.

Figura 5 - Comando ipconfig/all.

Copie em uma folha de papel ou no bloco de notas o Endereço de IP, Máscara e Gateway, pois essas informações devem ser definidos no início do programa que vai ser feita no próximo tópico. Entretanto o endereço de IP deve ser alterado em função das configurações locais da sua rede, veja o próximo passo.

Programa ser gravado no Arduíno


O programa exemplo deste tutorial é apresentado mais a baixo. Você deve copia-lo no ID de programação do Arduíno. Porém ANTES de mandar gravar o programa você deve alterar as configurações da rede mencionadas no tópico anterior de acordo com a sua rede loca.
Para isso, procure no início do programa as funções listadas a baixo:
  • IPAddress ip (192,168,1,177): Essa função define um endereço estático de IP para o Shield. O endereço deve ser trocado por um que possua um mesmo formato daquele que você copiou da janela do prompt de comando, porem o último número deverá ser diferente para não dar conflito com outros equipamentos conectado na sua rede. Por exemplo o IP do meu computador no momento dos teste era 192.168.1.66,  logo eu deixe o IP do Webserve diferente tendo o final 177.
  • IPAddress gateway(192,168,1,254): Nessa função, utilize o mesmo endereço fornecido do Gateway Padrão que você copiou na janela do prompt. Na minha rede local foi 192.168.1.254
  • IPAddress subnet(255, 255, 255, 0): Também na Máscara de sub-rede utilize o mesmo que você copiou na janela do prompt. No meu caso foi 255.255.255.0.

Pronto feito essas configurações preliminares, o programa pode ser gravado no seu Arduíno.

 /***************************************************************    
  Tutorial Ethernet Shield    
  Objetivo: Controle de led's pela Internet 
  Autor: Guilherme Vianna Santos    
  ***************************************************************/    
 #include <SPI.h>   
 #include <Ethernet.h>   
 byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC address   
 IPAddress ip(192,168,1,177);     // IP da lan
 IPAddress gateway(192,168,1,255);// Gateway Padrão
 IPAddress subnet(255,255,255,0); // Máscara de sub-rede
 EthernetServer server(8080); //porta de conexão    
 EthernetClient client;   
 String readString;  

 int flagLed2=0; //Flag para comando do Led 2
 int flagLed1=0; //Flag para comando do Led 1

   
 void setup(){   
  pinMode(5, OUTPUT); //pin do LED1   
  pinMode(7, OUTPUT); //pin do LED2   
  Ethernet.begin(mac,ip,gateway,subnet);    
  server.begin(); 
    
  Serial.begin(9600); //Seta a velocidade para comunicação serial   
  Serial.println("server/client 1.0 test");    
  Serial.println("Enviando um g na serial monitor para Client - Test");    
 }   
 void loop()
 {   
 
  // Verifica a comunicação Serial   
  if (Serial.available() > 0)    
  {   
   byte inChar;   
   inChar = Serial.read();   
   if(inChar == 'g')   
   {   
   }   
  }    
  EthernetClient client = server.available();   
  if (client) 
  {   
   while (client.connected()) 
   {      
      if (client.available()) 
      {   
        char c = client.read();   
        if (readString.length() < 100) 
        {   
          readString += c;    
          Serial.print(c);   
        } 
           
     if (c == '\n') {   
      Serial.println(readString); //Mostra no Serial Monitor o debuging   
      // HTML data header   
      if(readString.indexOf('?') >=0) {    
       client.println("HTTP/1.1 Controle de LED's");   
       client.println();   
       client.println();    
      }   
      else {

      /*LED 1*/  
      if(readString.indexOf("led1on") >0) //checa se o led 1 foi aceso   
      {  
        flagLed1=1; 
       digitalWrite(5, 1); // set pin 5 high   
       Serial.println("Led1 On");   
      }   
      if(readString.indexOf("led1off") >0) //checa se o led 1 foi apagado   
      {
        flagLed1=0;   
       digitalWrite(5, 0); // set pin 5 low   
       Serial.println("Led1 Off");   
      }   
      /*LED 2*/  
      if(readString.indexOf("led2on") >0)  // checa se o led 2 foi aceso 
      {
       flagLed2=1;
       digitalWrite(7, 1); // set pin 7 high   
       Serial.println("Led2 On");   
      }   
      if(readString.indexOf("led2off") >0) // checa se o led 2 foi apagado  
      {
       flagLed2=0;
       digitalWrite(7, 0); // set pin 7 low   
       Serial.println("Led2 Off");   
      }

        
       client.println("HTTP/1.1 200 OK"); //Envia uma noga Página.   
       client.println("Content-Type: text/html");   
       client.println();   
       /******************************Página em HTML******************************/  
       client.println("<HTML>");   
       client.println("<HEAD>");   
       client.println("<TITLE>Arduino - Teste LED's</TITLE>");   
       client.println("</HEAD>");   
       client.println("<BODY>"); 
               
       client.println("<div align='center'>");
       client.println("<a href='http://www.eletronicaemcasa.blogspot.com.br/' target='parent'>");
       client.println("<img alt='Eletronica em Casa' src='https://db.tt/YXraUkU9' width='120px'/></a><br/>");    
       client.println("<H1>LED's - ON/OFF</H1>");
       
       //Led 1 - Controle de imagem  
       client.println("<table border='1'><tr><th>Led's</th><th>Estados</th></tr>");
       if(flagLed1==0)
        {
          client.println("<tr><td><input type=submit value='LIGAR Led1' style=width:130px;height:45px onclick=\"document.location='led1on'\"/></td>");
          client.println("<td><img alt='Apagada' src='https://db.tt/AogtVLoV' width='80px'/></td></tr>");    
        }
        else
        {
          client.println("<tr><td><input type=submit value='DESLIGAR Led1'");
          client.println("style=width:130px;height:45px onclick=\"document.location='led1off'\"/> </td>");
          client.println("<td><img alt='Ligada' src='https://db.tt/q5TsG0eL' width='80px'/></td></tr>");
        }
       //Led 2 - controle de imagem   
       if(flagLed2==0)
       {
        client.println("<tr><td><input type=submit value='LIGAR Led2'");
        client.println("style=width:130px;height:45px onclick=\"document.location='led2on'\"/></td>");
        client.println("<td><img alt='Apagada' src='https://db.tt/AogtVLoV' width='80px'/></td></tr>");  
       }
       else
       {
        client.println("<tr><td><input type=submit value='DESLIGAR Led2' style=width:130px;height:45px onclick=\"document.location='led2off'\"/> </td>");
        client.println("<td><img alt='Ligada' src='https://db.tt/q5TsG0eL' width='80px'/></td></tr>");
       }
      
       //bloqueio de acesso as páginas{led2on;led2off}   
       client.println("<IFRAME name=inlineframe style=\"display:none\" >");    
       client.println("</IFRAME>");   
       client.println("</BODY>");    
       client.println("</HTML>");   
      }   
      delay(1);   
      client.stop();   
    
      readString="";   
      readString="";   
     }   
    }   
   }   
  }   
 }



Enviando informações pela Ethernet

Acople o Arduíno Ethernet Shield W5100 ao seu Arduíno e conecte o cabo de rede ao seu roteador e ao seu Shield. Dois Led’s com resistores devem ser ligados nos pinos 7 e 5, conforme a Figura 6 apresentada a baixo.

Figura 6 - Ligação dos Led's ao Arduino

Neste momento podemos enviar informações ao WebServe para comandar dois Led’s através de um browser. As informações são simples, sendo elas de ligar e desligar os Led’s.

Teste da aplicação na rede local


Para testar o funcionamento do sistema, basta abrir o seu browser predileto do seu computador e digitar na barra de endereço o IP seguido da porta de acesso que você configurou anteriormente no programa. Para os teste efetuados por mim o IP foi 192.168.1.177:8080 . A porta de acesso é definida pela função "EthernetServer server(8080)" e pode ser modificada pela usuário, entretanto é bom escolher uma porta livre da sua rede.  A Figura 7 ilustra a página criada no Webserve.

Figura 7 - Teste via rede local.


Vale ressaltar que a aplicação só pode ser acessada na rede local.


Teste da aplicação via Internet


O exemplo mostrado aqui também pode ser controlado via internet em qualquer lugar do mundo, mas para isso a porta do roteador e o modem deve ser liberada (no caso a porta 8080 usado no exemplo). Dessa forma a porta 8080 passa a ser redirecionada para o IP associado ao Arduino acessando assim a página do webserve a partir do IP público, fornecido pelo provedor de internet.

Para a liberação de porta do modem ou roteador podem ser feita através da sua rede local. Não irei entrar em detalhes do procedimento, pois as configurações mudam em função da marca dos equipamentos. Sugiro consultar o manual de instruções dos equipamentos ou buscar mais informações na internet.

O IP público é o endereço de IP do seu modem na rede internet, para descobri-lo basta acessar sites como "meu ip" ou "localiza ip". Com o IP público do seu modem basta agora digita-lo no browser seguido da porta liberada (no meu caso 8080). Assim a conexão feita na porta 8080 vai ser associada pelo roteador ao IP do Arduino.

Figura 8 - Teste via rede internet.


No entanto, vale ressaltar que esta configuração não leva em conta a segurança, permitindo que qualquer um que possua o IP controle o Led via internet. Implementações de segurança devem ainda ser criadas para uma aplicação final.


Confira o funcionamento no vídeo:







5 comentários:
  1. ​Hi,
    I’m irinakim and I’m work in the Wiznet.

    Thank you for using our product.

    We are collecting so much data using ourproduct.

    And I will post the this project on our Web site.( http://wiznetmuseum.com)

    Can I post your product on our Web site?

    ResponderExcluir
    Respostas
    1. Hi Irina Kim,
      Yes you can, there is not problem but please inform the link of my website if you use it!
      Thanks your visit!

      Excluir
    2. Hi Irina Kim,
      Yes you can, there is not problem but please inform the link of my website if you use it!
      Thanks your visit!

      Excluir
  2. Guilherme bom dia tem como eu copiar um programa gravado no pic de uma autoclave e regravar em um novo pic.

    ResponderExcluir
    Respostas
    1. é possível sim, mas somente se o PIC não estiver protegido contra a gravação/leitura.

      Excluir

Digite seu cometário...
(Seu comentário será visível apos a moderação)

Related Posts Plugin for WordPress, Blogger...
Paginas