Go Down

Topic: Arduino + enc28j60 (ethernet) + biblioteca ethercard = não funciona (Read 3286 times) previous topic - next topic

MKazan

Boa tarde amigos.

Estou com um problema que não consigo resolver.
Tenho um arduino Duemilanove e uma placa ethernet com enc28j60.
Instalei a biblioteca EtherCard, e as devidas ligações SPI.

Liguei a placa ao meu roteador Linksys WRT54G, e comecei a testar alguns exemplos tanto da biblioteca quanto deste site http://www.lucadentella.it/en/category/enc28j60-arduino/ , mas nada funciona, não consigo nem pingar a placa.
As vezes o DHCP chega a funcionar, as vezes não.
O arduino chega a aparecer na tabela DHCP do roteador, mas nunca consigo pingar ou acessar a pagina de webserver.
Sem utilizar DHCP, o arduíno chegou a aparecer na tabela ARP uma vez mas não pingava. Em outras tentativas não aparece mais.


Meu computador está no IP 192.168.1.108
O DHCP dá ao ardunino IPs entre o 100 e o 149 (normalmente 100, 110, 111 ou 112).
Quando rodo com IP fixo costumo colocar no 10
A mensagem que recebo pelo ping executado a partir do computador é: "Resposta de 192.168.1.108: Host de destino inacessível"
Quando executo ping a partir do roteador, dá Timeout.


Segui exatamente os passos do site do lucadentella e nada funciona.
Alguém pode me ajudar?

HugoPT

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

Não uses DHCP.

Liga o teu computador ao router num porto qualquer e vê qual é o IP que o router dá ao teu computador. Depois, mete esse endereço no Arduino e liga-o nesse mesmo porto onde tinhas o computador. Por experiência o router costuma dar sempre o mesmo IP nos portos físicos e deixa o DHCP para o Wi-fI (por experiência com os meus routers...). Então assim garantes que estás na mesma rede que o teu computador para pingar.

Outra coisa... deixa apenas o mínimo indispensável no código do Arduino.
This... is a hobby.

MKazan

Como eu disse no post inicial, os códigos que testei e não funcionaram são os codigos exemplo da biblioteca EtherCard e os codigos do site http://www.lucadentella.it/en/category/enc28j60-arduino/ .

Não achei necessário postá-los aqui denovo mas se acham necessário, aqui vai:

IP fixo:
Code: [Select]
#include <EtherCard.h>
static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,10};
byte Ethernet::buffer[700];

void setup () {

  Serial.begin(57600);
  Serial.println("PING Demo");

  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
    Serial.println( "Failed to access Ethernet controller");

  if (!ether.staticSetup(myip))
    Serial.println("Failed to set IP address");
}

void loop() {

  ether.packetLoop(ether.packetReceive());
}


DHCP:
Code: [Select]
#include <EtherCard.h>
static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
byte Ethernet::buffer[700];

void setup () {

  Serial.begin(57600);
  Serial.println("DHCP Demo");

  if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
    Serial.println( "Failed to access Ethernet controller");
else
   Serial.println("Ethernet controller initialized");

  if (!ether.dhcpSetup())
    Serial.println("Failed to get configuration from DHCP");
  else
    Serial.println("DHCP configuration done");

  ether.printIp("IP Address:\t", ether.myip);
  ether.printIp("Netmask:\t", ether.mymask);
  ether.printIp("Gateway:\t", ether.gwip);
}

void loop() {

  ether.packetLoop(ether.packetReceive());
}


Web Server:
Code: [Select]
#include <EtherCard.h>
static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
byte Ethernet::buffer[700];

void setup () {

  Serial.begin(57600);
  Serial.println("BasicServer Demo");

  if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
    Serial.println( "Failed to access Ethernet controller");
else
   Serial.println("Ethernet controller initialized");

  if (!ether.dhcpSetup())
    Serial.println("Failed to get configuration from DHCP");
  else
    Serial.println("DHCP configuration done");

  ether.printIp("IP Address:\t", ether.myip);
  ether.printIp("Netmask:\t", ether.mymask);
  ether.printIp("Gateway:\t", ether.gwip);
  Serial.println();
}
 
void loop() {

  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
 
  if(pos) {
   
    Serial.println("---------------------------------------- NEW PACKET ----------------------------------------");
    Serial.println((char *)Ethernet::buffer + pos);
    Serial.println("--------------------------------------------------------------------------------------------");
    Serial.println();
   
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"
                      "<html><body><h1>BasicServer Demo</h1></body></html>"));
    ether.httpServerReply(bfill.position());
  }
}

fionoob

Ola amigo... tive um problema parecido e aqui era a conexão do arduino com a placa de rede... refiz a conexão e encurtei bem a conexão entre as duas placas e funcionou...

DiegoCarrilho

Tive o mesmo problema, porem, era apenas conflito entre duas bibliotecas de Ethernet, tenho os dois Shields e sempre que vou usar um diferente,, removo a biblioteca do outro por completo.

Go Up