Teste do Shield Ethernet Seeeduino

Este post foi atualizado em 13/05/2011 – Veja o final do post para as atualizações.

Há algum tempo estava interessado em adquirir um shield Ethernet. Pesquisei as opções do shield oficial e dos clones que utilizassem o chip W5100 da WIZNET. Optei por comprar o clone fabricado pela SeeedStudio, em virtude da boa qualidade dos produtos que eles fazem, a boa experiencia que tive em comprar outros produtos deles. O preço e frete barato para o Brasil tambem contribuiram para a escolha. Esta placa é um clone da ethernet shield oficial do Arduino mas com algumas modificações, principalmente para baratear o custo:

  • Ausência do conector para memoria SD
  • Ausência dos soquetes e conectores para replicação dos sinais do Arduino. Para ter acesso a estes sinais é necessário soldar os soquetes e pinos nos pontos mais convenientes .
  • O design da placa foi refeito , colocando todos os leds indicativos de atividade, alinhado em apenas um lado da placa

A placa é bem construída e com acabamento branco. Todos os exemplos presentes no ambiente do Arduino 0018 para o shield Ethernet, funcionaram direto sem problemas. Este shield por usar o chip Wiznet5100 e estar ligado ao Arduino da mesma forma que no shield oficial, usa os exemplos do Ethernet Shield sem modificação.

Para testar o shield , construi um sketch que cria um web-server e montei um ambiente de teste com um led e um sensor de temperatura.

O programa em execução no Arduino cria um web-server, disponibiliza o formulario abaixo, e através de um browser ( firefox, internet explorer, etc), possibilita ligar e desligar o led e tambem visualizar a temperatura lida de um sensor.

Para isso, fiz uma adaptação no programa do exemplo web-server, existente na ide arduino-0018 e usei um outro exemplo do blog “http://www.scienceprog.com/” , resultando em um pequeno formulário. O programa guarda o estado do led e o mantem aceso até ser clicada a opção de desliga-lo.

O programa tem trechos de código que merecem explicação.

A definição dos endereços ip e mac para a interface e a porta onde escutará as requisições estão definidas abaixo:


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 169, 1, 201 };
Server server(80);

Lembre-se de alterar o endereço ip para a faixa utilizada na sua rede. No trecho abaixo, é feita a inicialização da interface e inicializada a execução do web-server


Serial.begin(9600) ;
Ethernet.begin(mac, ip);
server.begin();

Note que todo o codigo HTML transmitido para o browser é escrito via client.println.


client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// começa a enviar o formulário
client.print("<html>") ;
client.print("<body>");


/* le sensor de temperatura , ele fornece uma resistencia
que é função da temperatura */
int analogValue = analogRead(0);
temperatura = converteTemp( analogValue) ;
client.println("<h2>TEMPERATURA AMBIENTE</h2><hr/>");
client.println(temperatura) ;
client.println("<br>") ;
client.println("<h2>CONTROLE DO LED</h2><hr/>");
client.println("<form method=get name=LED>") ;


client.println("LIGA <input ")  ;
/* verifica o status do led e ativa o radio button
correspondente */
if(LEDON) {
client.println("checked='checked'") ;
}
client.println("name='LED' value='ON' type='radio' >");
client.println("DESLIGA <input ")  ;
if(!LEDON) {
client.println("checked='checked'") ;
}
client.println("name='LED' value='OFF' type='radio' >");

Não tem JSP, ASP, PHP e outras abstrações e facilidades oferecidas por linguagens para web. Tudo é feito na unha.
O chip W5100 esquenta  e na primeira vez que liguei pensei que tinha feito algo errado, mas consultando na internet vi que é “normal” esquentar.

O programa pode ser modificado facilmente para controlar outros pinos e exibir outras informações desejadas.

Divirtam-se.

Atualização em 13/05/2011:

Após a versão 0019 da IDE Arduino, foi introduzida a classe String para manipulações de cadeias de caracteres. Com a introdução desta classe torna-se desnecessária a biblioteca WString. O código do WebServer foi atualizado para atender esta modificação e também para as novas dependências exigidas pela biblioteca Ethernet. O código do WebServer passa a ser hospedado no GitHub, é só clicar no link do download para ser redirecionado. Os testes desta atualização foram realizadas na versão 0022 da IDE Arduino.

Download:
Sketch do Web Server no GitHub: WebServerDoJe

Links:
Exemplo de WEbServer do site Arduino.cchttp://arduino.cc/en/Reference/Ethernet
Exemplo de Formulário no site ScienceProg http://www.scienceprog.com/getting-hands-on-arduino-ethernet-shield/

Posts Relacionados:
Ethernet Shield Oficial para o Arduino

16 thoughts on “Teste do Shield Ethernet Seeeduino”

  1. Je,
    preciso fazer algo no mesmo esquema,
    para fechar reles e verificar chaves de fim de curso
    rola de boa né?!

    vc consegue me mandar o programa do arduino?

    att
    Joao azevedo

  2. Joao ,
    O seu projeto é totalmente possível. Não tenho no momento nenhum programa pronto para realizar o que voce precisa. Sugiro que voce experimente modificar o exemplo que disponibilizei, até ele ficar do jeito que voce precisa.
    Qualquer duvida é só colocar aqui nos comentários.
    Boa sorte !!!

  3. Olá Je,

    encontrei a biblioteca WString no arduino 0019.
    mas agora esta dando o seguinte erro:

    No arquivo incluído de /home/carlos/Downloads/arduino-0019/libraries/Ethernet/Client.cpp:1:
    /home/carlos/Downloads/arduino-0019/libraries/Ethernet/w5100.h:14:17: erro: SPI.h: Arquivo ou diretório não encontrado

    eu estou usando o ubuntu 10.10.
    vc tem ideia de como resolver esse problema??

    agradeço antecipadamente

  4. Carlos ,
    Obrigado pelo comentário. Este post está desatualizado , é necessário trocar a bibilioteca WString para tratamento de strings pela String (http://arduino.cc/en/Reference/StringObject). É necessário tambem , verificar e adaptar o código para a nova biblioteca. Eu vou altera-lo e colocar no ar o mais rápido possível.
    Abs
    Jeronimo

  5. Já estou me sentindo um ignorante,
    Quase dois dias tentando fazer a mesma coisa e não consigo :@

    “Só” preciso que ao apertar um botão ele inverta uma saída
    o mais ‘próximo’ que cheguei foi isso:

    client.print(“”);

    Mais ainda não me parece estar certo

    Depois que isso estiver funcionando, vou precisar que o a saida fique fechada por 5seg e torne a abrir

    Alguma dica amigo?

  6. tá de brincadeira….
    não apareceu o código que eu escrevi
    rssss
    client.print(“[ INPUT TYPE=BUTTON OnClick=digitalWrite(ledPin10, HIGH) VALUE= Abrir/Fechar ]”);
    *troquei os “<” por “[“

  7. Jaelcio , o fabricante é chines , generico e so consegui obter a tabela resistencia x temperatura. Funciona bem e me custou 1 dolar cada sensor se eu não me engano.
    Abs

  8. Meu amigo… estou tentando fazer a mesma coisa que voce postou… porem nao funciona na IDE 0022 ! ele consegue passar o codigo para o arduino sem nenhum erro porem ele nao cria a pagina web! Quando entro meu ip no browser ele nao aparece nada!! OBS : peguei o seu codigo e tentei rodar na IDE 0022 , nao fiz nenhuma alteraçao. O que eu faço me de uma força ai!!

    Meus items : arduino UNO / Ethernet shield ENC28J60 /

  9. Guilherme ,
    O teste deste post foi feito com uma placa que é clone da ethernet oficial do arduino , ou seja , o chip principal é o w5100 da Wiznet
    De uma procurada por exemplos para o ENC28j60 , preferencialmente no site do fabricante da sua placa. Pesquise no google por “arduino enc28j60 ethernet library”

    Boa sorte

  10. Jeronimo, boa noite.

    Parabéns pelo blog!!
    Testei o exemplo acima e funcionou perfeitamente porém não estou conseguindo fazer funcionar com mais de um led.

    Você tem ideia de como adicionar mais leds?

    Obrigado.

  11. Alexandre ,
    A principio seria duplicar os pontos do programa onde é feita configura,acionamento e exibição das informações na pagina web e modificar para adequa-lo ao pino que em voce vai usar o segundo led.

Leave a Reply

Your email address will not be published. Required fields are marked *