Pages: 1 2 [3]   Go Down
Author Topic: ENC28J60 Funcionando perfectamente. ¿Cual es la limitacion?  (Read 11154 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:

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
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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   ?
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Correcto, pero tienes que redireccionar el puerto 5000 en el router.

98.34.123.123:5000

Aqui viene un ejemplo
http://www.taringa.net/posts/info/895064/Abrir-puertos-router-_NAT-o-Virtual-Server__.html
Logged

Trabajando en ...

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

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

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 739
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.



Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buena apreciación de nuestro amigo @curro92
Logged

Trabajando en ...

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

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

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

¿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
« Last Edit: August 25, 2012, 01:55:49 pm by yOPERO » Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Pages: 1 2 [3]   Go Up
Jump to: