Go Down

Topic: ENC28J60 Funcionando perfectamente. ¿Cual es la limitacion? (Read 11899 times) previous topic - next topic

Cheyenne

Aprovecho que se ha subido este tema. Al final yo también adquirí un módulo ENC28J60 y lo hice funcionar. Yo he utilizado la librería EtherCard.h. Sin embargo os comento una limitación que he visto y es que ninguna de las librerías para este módulo que hay por la red (al menos no he sabido encontrar ninguna) permite la comunicación UDP.
http://cuadricopterodiyarduino.blogspot.com/

lm386


Aprovecho que se ha subido este tema. Al final yo también adquirí un módulo ENC28J60 y lo hice funcionar. Yo he utilizado la librería EtherCard.h. Sin embargo os comento una limitación que he visto y es que ninguna de las librerías para este módulo que hay por la red (al menos no he sabido encontrar ninguna) permite la comunicación UDP.


1º ¿Solo funciona a 3,3v?
2º Cuando conectas el enc28j60 con el cable de red, windows detecta algo?, me refiero a que si la detección de la tarjeta por windows es automática, evidentemente si la tarjeta está alimentada o para que windows detecte algo, es necesario dar con el controlador adecuado.

Omnimusha


Aprovecho que se ha subido este tema. Al final yo también adquirí un módulo ENC28J60 y lo hice funcionar. Yo he utilizado la librería EtherCard.h. Sin embargo os comento una limitación que he visto y es que ninguna de las librerías para este módulo que hay por la red (al menos no he sabido encontrar ninguna) permite la comunicación UDP.


SI LO soporta, bajate esta libreria.http://kmtronic.com/dino-internet-ethernet-io-board-ping-example.html

aqui, mi code-


Code: [Select]

#include "EtherShield.h"

uint8_t mymac[6] = {0xCF,0x70,0x7C,0xE4,0x8A,0xB8};
uint8_t myip[4] = {192,168,1,25};
uint16_t MYWWWPORT = 80;

#define BUFFER_SIZE 750
static uint8_t buf[BUFFER_SIZE+1];

char reply[]="Realized";


static uint8_t udp_length;
static float udp_buffer[50];

EtherShield es=EtherShield();

uint16_t plen, dat_p;

///----------------------------------------------------------
void setup(){

 

  Serial.begin(9600);
  es.ES_enc28j60Init(mymac);
  es.ES_init_ip_arp_udp_tcp(mymac,myip, MYWWWPORT);

} // end setup
///----------------------------------------------------------
String readString;
float n;
char c;
void loop(){

    // read packet, handle ping and wait for a tcp packet:
    dat_p=es.ES_packetloop_icmp_tcp(buf,es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf));
   
    if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){
     
       udp_length=buf[39]-8; // calculate UDP data lenght
       
       for (int i = 0; i < udp_length; i++)
        {
           c = buf[42+i];
          readString += c;
          // Serial.println(udp_length);
       
     
        }
       
        char carray[readString.length()+1];
       
//readString.toCharArray(carray, sizeof(carray));
         readString.toCharArray(carray, sizeof(carray));
       n = atof(carray);
     //  udp_buffer[0]= n;
        Serial.print("   ");
       Serial.println(carray);
       Serial.println(n);
       es.ES_make_udp_reply_from_request(buf,carray,sizeof(carray),12345);
       readString="";
       
     
       
       buf[IP_PROTO_P]=0;
    }   
   
} // end loop





Para Processing 1.5 o te bajas este programita del aautor.http://www.kmtronic.com/software/DINo/UDP_Example/KMTronic%20DINo%204%20Relay%20UDP%20Test%20Software.zip
Code: [Select]


import hypermedia.net.*;

UDP udp;  // define the UDP object


void setup() {
udp = new UDP( this, 12345 );  // create a new datagram connection on port 6000
//udp.log( true );         // <-- printout the connection activity
udp.listen( true );           // and wait for incoming message 
}

void draw()
{
}

void keyPressed() {
String ip       = "192.168.1.25"; // the remote IP address
int port        = 12345;        // the destination port

float f=1.9;
String s2 = Float.toString(f); //version 2

udp.send(s2, ip, port );   // the message to send

}

void receive( byte[] data ) {          // <-- default handler
//void receive( byte[] data, String ip, int port ) {   // <-- extended handler

for(int i=0; i < data.length; i++)
print(char(data[i])); 
println(); 
}



.................................
el problema que me tiene en vela, es que siempre actua el envio como un estimulo-repuesta.
es decir, que siempre que se quiera enviar un paquete udp desde el arduino se debe hacer un ping (o enviar un paquete)al "Server Arduino".
yo quiero que actue de forma independiente, como si seria un puerto serial, envio y resivo si ninguna condicion .espero que se me alla
entendido.
Si alguien tiene a solucion se lo agradeceria

Cheyenne

Gracias Omnimusha, lo probaré. Lo que sí es cierto es que parece más sencillo con la librería original del IDE para el W5100. Además la sensación es que el protocolo UDP es más sencillo pero no debe utilizarlo mucha gente y por eso nadie ha debido de implementarlo de forma sencilla, como bien dices para su manejo como si fuera un puerto serie, para el ENC28J60. Si no se puede hacer de otra manera creo que es poco útil que Arduino sólo pueda enviar un UDP si previamente recibe un PING.
http://cuadricopterodiyarduino.blogspot.com/

lm386

El cable de red tiene que ser cruzado o directo???. Yo conecto el arduino al PC por el puerto ethernet, pero lo único que consigo es que las luces parpadeen y nada más. Windows tampoco detecta que esté conectado.

Cheyenne

En principio si lo conectas a un router o switch tiene que ser paralelo y si lo conectas a un ordenador tiene que ser cruzado aunque algunos ordenadores lo detectan y puedes conectarlo tanto en paralelo como en cruzado.
http://cuadricopterodiyarduino.blogspot.com/

lm386

Conecté el arduino a mi router con un cable ethernet y funciona. La pregunta es, si quiero que se pueda acceder al arduino desde Internet como lo hago. Es decir, yo cuando en mi navegador escribo 192.168.1.25 me sale la página que genera el arduino, pero si quiero acceder a la página del arduino desde Internet, por ejemplo en otro lugar fuera de mi red domestica como lo hago?

Sería la IP que tengo en Internet más un puerto por ejemplo   98.34.123.123:5000   ?

flico

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

curro92

Hola,
desde Internet depende: si tienes IP fija, abres un puerto en el router y entras tal como planteas. Pero la mayoría de la gente no tenemos IP fija,  la IP cambia cada vez que nos conectamos a Internet. En este último caso se necesitan los servicios de algun proveedor de Dynamic DNS, mejor si es gratuito.




flico

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

alejandroloppez

¿Alguien ha probado esta placa en una Leonardo?, a mi me funciona genial en una UNO pero en la Leonardo no... ¿alguna sugerencia?.

yOPERO

#41
Aug 25, 2012, 08:16 pm Last Edit: Aug 25, 2012, 08:55 pm by yOPERO Reason: 1

¿Alguien ha probado esta placa en una Leonardo?, a mi me funciona genial en una UNO pero en la Leonardo no... ¿alguna sugerencia?.


Los pines del SPI han sido movidos al ICSP.
Solucion HW: tendrás que hacer puentes, jumpers para moverlos.
Solucion SW: toquetear pins_arduino.h, libreria ethernet y probablemente spi.h(no estoy seguro de esto, debe ser estudiarlo a fondo)

Edito: el SS ahora esta asignado al RXled, el resto (SCK,MOSI,MISO) al ISCP
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

yOPERO

Me he puesto ha investigar sobre el tema y he creado un post en mi blog:
http://yopero-tech.blogspot.com.es/2012/08/arduino-leonardo-ethernet-shield.html

Es una explicación breve de los cambios que hubo con el tema del SPI en Vinciduino y también un gráfico de como conectar Vinciduino + Ethernet Shields.
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Go Up