Go Down

Topic: Arduino + enc28j60 (ethernet) + biblioteca ethercard = não funciona (Read 2744 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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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