Pages: [1] 2 3   Go Down
Author Topic: ENC28J60 Ethernet beste Library  (Read 6176 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 125
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe mir überlegt ein Ethernetboard wie dieses hier zu holen:
http://www.ebay.de/itm/ENC28J60-Ethernet-LAN-Network-Module-For-Arduino-51-AVR-LPC-STM32-/170900783614?pt=LH_DefaultDomain_0&hash=item27ca7b01fe
Da diese Chips meines Wisssens nach nicht mit der Standard Library funktionieren (oder doch? Bitte klärt mich auf) suche ich eine gute Library die schon gut ausgereift ist.
Es sollte hauptsächlich in der Lage sein via telnet eine Email zu senden. Ich habe viele gefunden weiß aber nicht welche ich benutzen sollte.
Wer benutzt vielleicht sogar so ein Board und hat Erfahrung damit ?
Logged

Everybody makes mistakes, me too smiley

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Für Deinen Einsatzzweck würde ich von einem ENC28J60 abraten. Bisher kenne ich keine Lib, die TCP vernünftig umsetzt. Vor allem wenn es um einen TCP-Stream mit mehreren Paketen geht. Die Libs die ich kenne, können eine TCP-Verbindung aufbauen, ein Paket senden und gut. Beim Empfangen ebenso. Das klappt z.B. bei HTTP recht gut, solange nicht mehr Daten transportiert werden (egal in welche Richtung), als in ein Paket passen. Bei einer default MTU von 1500 sind das knapp 1.4KB. Mehrere Pakete erhöhen die Komplexität, da plötzlich Sequenznummern und ähnliches eine Rolle spielen.
Da Du aber SMTP (Mail senden) spechen willst, müssen immer mehrere Pakete übertragen werden, da SMTP eine Art "Frage-Antwort" Spiel zwischen Client und Server ist. Wenn Du eh in Hongkong bestellen willst, pack lieber noch 4 Euro drauf und nimm ein Shield mit W5100 Chip. Dort bildet der Chip die Protokolle TCP und UDP intern ab und Du kannst Dich auf die darüber liegenden Protokollschichten (siehe Wikipedia) kümmern.
Außerdem hast Du dann mit der Arduino IDE immer eine aktuelle Ethernet-Lib, die zur IDE passt, da sie Bestandteil davon ist.
Ein weiterer Vorteil ist, das Du mehr Speicher auf dem Arduino zur Verfügung hast, da die W5100 Lib deutlich Resourcen schonender ist, als die ENC28J60 Lib.
Mario.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 125
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, dann wird es so ein Shield. Ich habe den Code schon am Computer mit telnet ausprobiert.
Wieso kann ich keine Email an mich bzw. an andere Server senden. Es geht nur mit 2 unterschiedlichen Emailadressen beim gleichen Server.
Was ist los?
Logged

Everybody makes mistakes, me too smiley

Germany S-H
Offline Offline
Faraday Member
**
Karma: 168
Posts: 3203
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wieso kann ich keine Email an mich bzw. an andere Server senden. Es geht nur mit 2 unterschiedlichen Emailadressen beim gleichen Server.
Was ist los?

Wie sieht die Kommunikations zwischen Server und Client aus?
Authentifikation?

In Deutschland sind schon seit Jahren fast alle Mailserver bei Providern auf irgendeine Form von User-Authentifikation umgestellt und versenden Mail an fremde Mailserver nur dann, wenn sich der User als Kunde des Providers authentifiziert hat.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 125
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also ich benutze telnet und gmail:

>telnet gmail-smtp-in.l.google.com 25
220
>HELO
250
>MAIL FROM: <MEINEMAIL@gmail.com>
250
>RCPT TO: <empfänger@web.de>
hier kommt die Fehlermeldung:
550-5.1.1
Meine Empfängeradresse würde nicht exsistiern
Bei einer anderen Adresse (@online.de)kommt :
451-4.3.0 Multiple destination domains is unsupported

Brauch ich einen anderen Befehl?
Logged

Everybody makes mistakes, me too smiley

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5242
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auch Gmail liefert nicht einfach jede abgelieferte Email an andere Server aus, sonst wäre es in der SPAM-Flut schon längst versunken. Mit SMTP-Auth könnte es gehen, habe es aber selbst noch nicht ausprobiert. Evtl. musst Du dazu aber den Port 587 nehmen, da häufig nur dort authentisierte Verbindungen entgegengenommen werden.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 168
Posts: 3203
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Brauch ich einen anderen Befehl?

Du brauchst eine Authentifikation, vielleicht hilft Dir dieser Thread weiter, da ist sogar ein kompletter Arduino-Sketch dabei:
http://arduino.cc/forum/index.php/topic,151986.0.html

Der Sketch sendet allerdings per ungefragtem Pipelining die Kommandos viel zu schnell hintereinander, so dass manche Mailserver wie z.B. der von AOL darauf allergisch reagieren. Normal mußt Du nach jedem an den Mailserver abgesetzten Kommando die Rückantwort des Mailservers abwarten, bevor das nächste Kommando gesendet wird. Bei vielen Mailservern wie z.B. denen von 1&1 funktioniert der Sketch trotzdem, und bei vielen anderen wie AOL reicht ein delay an passender Stelle.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 125
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke dann habe ich nur noch eins.
Brauche ich eine bestimte Library oder kann ich die normale aus der IDE nutzen.
Im Internet finde ich nichts dazu.
Logged

Everybody makes mistakes, me too smiley

Germany S-H
Offline Offline
Faraday Member
**
Karma: 168
Posts: 3203
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke dann habe ich nur noch eins.
Brauche ich eine bestimte Library oder kann ich die normale aus der IDE nutzen.

Ethernet und SPI sind Standard-Libraries, die zur Arduino-Software bereits dazugehören und daher nicht extra installiert werden müssen.

Im Internet finde ich nichts dazu.

Mein Internet listet die Arduino Standard-Libraries auf dieser Seite auf:
http://arduino.cc/en/Reference/Libraries
« Last Edit: November 28, 2013, 05:20:38 pm by uwefed » Logged

Offline Offline
Full Member
***
Karma: 11
Posts: 185
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Für Deinen Einsatzzweck würde ich von einem ENC28J60 abraten. Bisher kenne ich keine Lib, die TCP vernünftig umsetzt. Vor allem wenn es um einen TCP-Stream mit mehreren Paketen geht.

Nun, das hat sich jetzt geändert:
Die von mir geschriebene UIPEthernet-library (https://github.com/ntruchsess/arduino_uip) implementiert die von der Ethernet-library bekannten EthernetClient, EthernetServer und EthernetUDP Interfaces inklusive persistenten TCP-Verbindungen, DHCP, DNS und allem was dazu gehört. Der Speicherverbrauch ist moderat, da die Library alle empfangenen Packete im Speicher des ENC28J60 zwischenlagert um kontinuierlich streamen zu können. Sie verbraucht zwischen 200-400 Bytes RAM, je nach Anzahl offener Verbindungen, der Flash Speicherbedarf ist sicher größer als beim WIZ5100, da der code unvermeidlicherweise umfangreicher als der der Standard Ethernet-library ist. Mehr als 16kb Flash sollte der Arduino unbedingt haben, also alles mit ATmega328 aufwärts.
Die Standard-Ethernet-library Beispiele laufen damit ohne weitere Änderung, indem man das include von 'Ethernet.h' auf 'UIPEthernet.h' ändert (und das include von 'Spi.h' entfernt).

Gruß,

Norbert
« Last Edit: October 09, 2013, 02:55:59 am by ntruchsess » Logged

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe mal einen Sketch nach der Anweisung

Quote
Die Standard-Ethernet-library Beispiele laufen damit ohne weitere Änderung, indem man das include von 'Ethernet.h' auf 'UIPEthernet.h' ändert (und das include von 'Spi.h' entfernt).

umgearbeitet. Respekt, lief auf Anhieb. Mein Shield habe ich bis heute nie ans laufen bekommen und lag nur dumm in der Ecke 'rum. Aber nun....

Speicherverbrauch:
Mit WIZ5100-Shield:    15.734 Bytes
Mit ENC28J60-Shield: 27.306 Bytes

Da ist bei einem Uno schnell die Luft 'raus. Trotzdem: Gute Arbeit geleistet. Danke!
Gruß
Eberhard
Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

Offline Offline
Full Member
***
Karma: 11
Posts: 185
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Speicherverbrauch:
Mit WIZ5100-Shield:    15.734 Bytes
Mit ENC28J60-Shield: 27.306 Bytes

ja, ist leider so. Der WIZ5100 macht ja tcp, arp, icmp und udp in Hardware. Beim ENC28J60 kommt der ganze µIP-code, der das in Software macht, dazu.

Wenn man kein udp (und auch kein dhcp oder dns) braucht, kann man den Flash-speicherbedarf um fast 5kb senken, indem man in der uip-conf.h das define für UIP_CONF_UDP auf 0 setzt. Die nötigen Changes, damit das sauber compiliert, habe ich gerade in den dev-branch committed.

Die Checksummenprüfung und icmp wegzulassen würde ca. 600bytes sparen, das reißt es nicht raus. (Ist aktuell auch nicht konfigurierbar).

Gruß,

Norbert
« Last Edit: October 14, 2013, 08:46:26 am by ntruchsess » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wow, *thumbs up!!". Das ist eine ordentliche Leistung. Damit können die ENC28J60 endlich deutlich sinnvoller eingesetzt werden.
Bisher haben die alten Libs ja TCP zu einer Art UDP 2.0 degradiert :-)

Vielen Dank für diese Arbeit.

Mario.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 40
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hallo,

ich habe gerade versucht die UIP library (tolle Arbeit übrigens) mit einem  LC Soft Studio Modul zum Laufen zu bringen (z.B. die Beispielprogramme). Leider klappt das nicht. Auf demselben setup laufen ohne Hardwareänderung die Beispiele für die  Ethercard ohne Probleme.
Hat das schon jemand einmal gesehen ? woran könnte es liegen ? Welche Pins nutzt die UIP Library ?

Gruss

s
Logged

Offline Offline
Full Member
***
Karma: 11
Posts: 185
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

in der Enc28J60Network.h sind bisher nur defines für Uno und Mega 2560 enthalten. Füge da bitte die passenden Werte für Dein Board ein.

Du kannst mir dann gerne auf Github einen Pull-request oder per email einen Patch schicken (addresse im Readme der library und in den copyright-notizen im Sourcecode) um das zu übernehmen.

viel Erfolg :-)

- Norbert

P.S. Google sagt mir gerade, dass das gar kein Shield ist, sondern sowieso über Kabel verbunden wird. Also wohl nix mit in die Library aufnehmen, es sei denn, dass Du einen anderen Arduino als Uno oder Mega 2560 benutzt...
« Last Edit: November 28, 2013, 09:55:21 am by ntruchsess » Logged

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