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


10. February 2011 at 7:22 am :
[...] http://blogdoje.com.br/2010/04/11/teste-do-shield-ethernet-seeeduino/ [...]
5. May 2011 at 8:56 am :
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
5. May 2011 at 9:07 am :
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 !!!
5. May 2011 at 3:34 pm :
to comprando o duemilenove e o shield no http://www.webtronico.com
e logo logo o projeto começa a tomar forma,
valeu
10. May 2011 at 9:54 am :
Muito com o projeto Je,
tentei rodar ele no ambiente arduino 0018 e nao consegui compilar, pois nao tem a biblioteca WString.h.
onde posso encontra-lá
10. May 2011 at 11:15 am :
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
10. May 2011 at 11:49 am :
Tentei compilar no windows com o arduino 0022 e tb nao funcionou.
????
10. May 2011 at 12:18 pm :
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
11. May 2011 at 2:06 pm :
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?
11. May 2011 at 2:09 pm :
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 “[”
23. January 2012 at 9:36 pm :
qual sensor de temperatura vc usou pra esse projeto.
23. January 2012 at 11:03 pm :
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