Já de cara quis aprender a mexer com esse shield tão poderoso, verifiquei que há muitos projetos na net mas poucos projetos didáticos, então decidir criar algo fácil de entender.
No caso eu decidir criar um sketch cujo tal o usuário apertava um botão e um led acendesse, coisa simples porém queria já criar um ambiente em html. Então...decidir estudar e foi esse o resultado
Mas antes vamos entender um pouco sobre o shield Ethernet:
O shield que eu usei em questao foi WiZnet W5100, como podemos notar ele possui uma entrada RJ-45 que faz a conexão com a LAN/WLAN possibilitando o Arduino interagir com a rede pessoal ou internet, podendo então fazer uma interação remota.
Podemos notar pelas fotos que as pernas de conexão do shield com o Arduino e bem grande e também possui conectores fêmeas para a conexão de outros shields se for preciso. Note também que o shield possui uma entrada para microSD, que pode ser usado para armazenar dados da rede, até onde pesquisei a biblioteca sdfatlib é a que funciona melhor.
Arduino comunica tanto com o W5100 e o cartão SD usando o barramento SPI (através do cabeçalho ICSP).São os pinos digitais 11, 12 e 13 no Duemilanove e pinos 50, 51 e 52 no mega. Em ambas placas, pino 10 é usado para selecionar o W5100 e o pino 4 para o cartão SD. Esses pinos não pode ser usado em geral para i / o. No Mega, o pino SS hardware, de 53 anos, não é usado para selecionar o W5100 ou o cartão SD, mas deve ser mantido como uma saída ou a interface SPI não vai funcionar.
A conexão com o Arduino mais o protoboard que eu montei está representada pela foto abaixo:
Material:
- Arduino
- Protoboard
- Fios Jumpers
- Resistor 220 ohms
- Led
Código:
#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,170); //<<<<<<<<<<<<<<<<<<<<<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
//Inicializa a biblioteca da placa ethernet com as configurações de IP fornecidas
EthernetServer server(80);
char link[]="http://arduinoprog.blogspot.com.br//"; //link
boolean ledState = false; //estado do led
int botao1 = 6; //Botao que aciona o led vermelho
int led = 2; //pino do led
int estado = 0; //Armazena o valor de leitura do botao1
char mensagem[20]; //Mensagem a ser apresentada para o botao1
void setup()
{
pinMode(botao1, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
//Inicializa a conexao ethernet e o servidor web na porta 80
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop(){
estado=digitalRead(botao1); //Verifica o status do Botao1 e imprime mensagem no browser
switch(estado){
case HIGH:
acionaBotao(); // chama a função que aciona o botão
break;
}
}
void acionaBotao(){
char mensagem[] = "Botao acionado. Led Aceso !!!"; // mensagem que apresenta no browser
dados(mensagem);
ledState =~ ledState;
delay(150);
if (ledState==false) //condição de apresentação de mensagem na tela se led estiver apagado
dados("Loading... Led apagado "); //Imprime mensagem padrao, aguardando novo acionamento
Serial.println("botao Acionado");
digitalWrite(led, ledState);
}
//Rotina que recebe os valores de Mensagem, imprimindo o resultado no browser
void dados(char msg[])
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 0"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
//BackGround
client.print("<body style=background-color:white>"); //cor do background
client.print("<title> Teste do Shield Ethernet </title>");
// Configuração da página do HTML
client.print("<h1><p align=center> Teste Shiled - Arduino </center></h1>"); //alinhamento do testo centralizado e cabeçalho tipo h1
client.print("<hr width=30% noshade"); //linha horizontal abaixo do texto: Teste Shield - Arduino
client.print("<h3>Link >> </h3>"); //Linha duvidas
/*link pra pagina arduinoprog.blogspot.com.br*/
client.print("<a href=");
client.print(link);
client.print(">ArduinoProg</a>");
client.print("<br /br>"); //quebra de linha
client.print("<p align=center> Leitura do botao: </center>");
client.print(msg);
client.print("<hr width=30% noshade"); //linha horizontal abaixo do texto: Teste Shield - Arduino
client.println("<br /br>");
client.print("<h6> Esse texte foi desenvolvido por Felipe S. Amaral. </h6>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disonnected");
}
}
Imagens:
Ao carregar o sketch no seu arduino você deverá entrar com o ip que você selecionou no começo do programa se tudo ocorrer certo estas telas deverão ser apresentadas.
No caso do led desligado.
No caso do led aceso.
Conclusão:
O programa desenvolvido é de fácil compreensão e fácil montagem. O uso do shield ethernet e bastante amplo, pode ser usado desde uma simples interação com sua LAN ou até mesmo com sua redeWLAN.
Espero que tenham gostado e aprendido.
Estou a disposição para futuras discussões.
Parabéns Felipe, excelente material.
ResponderExcluirPara projetos onde a iteração remota é essencial, com essa shield, uma conta do no.ip e alguns ajustes no model ADSL fica fácil monitorar ou acionar algo em qualquer parte do mundo.
Muito bom este exemplo, mas me tira uma duvida, eu defini um endereço IPAddress ip(192,168,0,170) como IPAddress ip(192,168,0,123), e o mac tambem mudei de byte mac[] = { 0xAB, 0xCD, 0x12, 0x34, 0xFF, 0xCA } para byte mac[] = { 0xCC, 0x14, 0x62, 0x22, 0xAC, 0xED } quando eu coloco o endereco de ip que defini no browser nao acontece nada, tem algum erro que nao sei o que e'. vc poderia me ajudar? No aguardo
ResponderExcluirRafel, desculpe a demora em responde-lo, semana de provas...e ainda estou nela!!! Mas vamos la, acredito eu que ao mudar seu MAC vc declarou o errado da sua placa, afinal cada placa de shield Ethernet possui uma MAC diferente.
ExcluirEste é o endereço de hardware exclusivo que é usado para comunicar diretamente com seu shield através da Ethernet. Então, tente usar esse:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
Agora sou eu que espero o retorno para ter a certeza que funcionou. Grato!!!
Internet Arduino com Ethernet Shield, sabe informar se esta placa usa protocolo de gerenciamento SNMP?
ResponderExcluirSim é possível, mas é limitado. Dê uma olhada aqui:
Excluirhttps://code.google.com/p/agentuino/
Quando vou importar o agentuino aparece um erro " Specified folder/zip file does not contain a valid library"
ResponderExcluirse alguem souber me ajude
Deve-se baixar a library correta para utilizar o ethernet shield: https://github.com/Wiznet/WIZ_Ethernet_Library. No seu compilador, clique em Sketch - Include Library - Add .ZIP Library. Espero ter lhe ajudado!
Excluir