Go Down

Topic: ENC28J60 Ethernet beste Library (Read 7028 times) previous topic - next topic

legotechnicus

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 ?
Everybody makes mistakes, me too :)

mkl0815

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.

legotechnicus

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?
Everybody makes mistakes, me too :)

jurs


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.

legotechnicus

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?
Everybody makes mistakes, me too :)

pylon

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.

jurs


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.

legotechnicus

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.
Everybody makes mistakes, me too :)

jurs

#8
May 09, 2013, 10:29 pm Last Edit: Nov 28, 2013, 11:20 pm by uwefed Reason: 1

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

ntruchsess

#9
Oct 09, 2013, 09:54 am Last Edit: Oct 09, 2013, 09:55 am by ntruchsess Reason: 1

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

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
Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."

ntruchsess

#11
Oct 10, 2013, 04:43 pm Last Edit: Oct 14, 2013, 03:46 pm by ntruchsess Reason: 1

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

mkl0815

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.

serenissimus

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

ntruchsess

#14
Nov 28, 2013, 03:52 pm Last Edit: Nov 28, 2013, 03:55 pm by ntruchsess Reason: 1
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...

Go Up