Heute kam mein Paket…
…mit einem Ethernet Modul an. Dieses Modul hatte ich dieses Mal wieder über einen ebay-Shop bestellt.
(ENC28J60 Ethernet LAN Network Modul für 2,97 € inklusive Versand).
Das Modul macht bis auf einige Lötspritzer auf der Unterseite, verursacht von der Handlötung der Ethernetbuchse und der Stiftleiste, qualitativ einen passablen Eindruck. Es ist fertig aufgebaut und enthält einen ENC28J60 Chip. Über die bereits eingelötete 2-reihige Stiftleiste im Rastermaß 2,54mm kann es relativ leicht mit dem Arduino Board verbunden werden. Ein auch mechanisch kompatibles Arduinoshield wäre zwar noch leichter zu installieren, dafür aber deutlich teurer wie auch etwas unflexibler bei der Auswahl der Pins auf dem Arduino.
Die Software
Der hier verwendete Ethernet-Controller ENC28J60 ist nicht kompatibel zur bekannten Arduino Ethernet-Library. Aber es gibt ja Internetsuchmaschinen. Bei JeelabsWeb wurde ich fündig. Der Download der Library mit diversen Beispielen kann hier erfolgen. Wer es genauer wissen möchte kann von Microchip auch ein Datenblatt herunterladen.
Die gepackte Datei muss natürlich zuerst wieder entpackt werden und der Ordner anschließend in „EtherCard“ umbenannt werden bevor er vollständig mit seinen gesamten Inhalten ins library Verzeichnis umkopiert wird. Ich habe nur einige der im Download enthaltenen Libraries probehalber gestestet. Bei mir funktionierte es auf Anhieb einwandfrei.
Im Ordner EtherCard ist die Headerdatei EtherCard.h zu finden. In ihr ist die Pinbelegung wie folgt beschrieben.
Arduino – ENC28J60
– – Clockout
Digital Pin 2 – INT
– – WOL
Digital Pin 12 – SO
Digital Pin 11 – SI
Digital Pin 13 – SCK
Digital Pin 8*** – CS
RESET – RESET
3V3 – VCC
GND – GND
*** Es kann auch Digital Pin 10 benutzt werden, sofern im Setup der Sketch wie folgt ergänzt wird:
ether.begin(sizeof Ethernet::buffer, mymac, 10) z.B. auf Pin 10
Wichtig ist unbedingt noch das Board nur mit 3,3V zu versorgen!
Der Aufbau gestaltet sich nicht sonderlich schwierig. Mittels passender Dupont Steckkabel wird das Ethernetmodul gemäß obiger Beschreibung schnell mit dem Arduino Board verbunden. Von meiner 10-pol. Flachleitung bleiben 2 Pole unverdrahtet, wie auf nebenstehendem Foto gut zu erkennen ist.
Das Testprogramm
In der Arduino IDE unter Beispiele ist ein Testsketch gleich oben unter backsoon zu sehen. Damit wird ein simpler Webserver aufgebaut. Da ich der Meinung bin, dass Sensoren über eine feste IP-Adresse verfügen müssen, habe ich im Sketch eine statische IP-Adresse eingegeben. Dazu muss im Sketch
#define STATIC 0 in diesem Fall auf
#define STATIC 1 geändert werden. Weiterhin muss in den Zeilen
static byte myip[] = { 192,165,0,101 };
static byte gwip[] = { 192,165,0,1 };
für das Modul eine gültige IP-Adresse aus dem lokalen Netzwerk sowie die Gateway-Adresse (bei mir die Adresse der FritzBox) eingetragen werden.
Normalerweise sind die üblichen Router auf die Vergabe einer dynamischen IP-Adresse voreingestellt. Bei meiner FritzBox lässt sich dieser DHCP-Bereich auch ausschalten, aber auch unter Heimnetz, Netzwerk und dem Register Netzwerkeinstellungen unter dem Button IPv4-Adressen sogar begrenzen.
Ob der Leistungsumfang, insbesondere auch der hier vorgestellten Library ausreichend sein wird, wird sich zeigen. Eine Methode, den üblichen http-Port 80 auf beispielweise 8080 umzustellen, habe ich derzeit noch nicht gefunden. Hier könnte also noch Handlungsbedarf bestehen.
Die technischen Daten in Kurzform
Controller: Microchip ENC28J60-I/SO
Takt: 25MHz
Betriebsspannung: 3,3V
Anschlüsse: Stiftleiste 2*5pol. 2-reihig
Ethernetbuchse
Größe: 58mm * 34mm * 17mm
Gewicht: 15 g
Hier meine Zusammenfassung
Bauteil: ENC28J60 Ethernet LAN Network Modul
Lieferant: ebay
Verkäufer: seemmy999
Preis: 2,97 €
Lieferzeit: etwa 3 Wochen
Versandkosten: inklusive
Sonstiges:
Bewertung: bin durchaus zufrieden, insbesondere mit dem Preis-/Leistungsverhältnis
Olaf Meier
Arduino Hannover http://Arduino-Hannover.de
http://electronicfreakblog.wordpress.com/
Hi ,danke für den Artikel, ist sehr Hilfreich.
Habe allerdings einer Frage und zwar
Wird die daten per udp oder tcp übertragen?
vVele Grüße.
ich sehe schon is es udp
Hallo, danke fuer den Artikel, darueber habe ich zu Ethercard gefunden. Allerdings habe ich eine Version mit eigenem 3V3 Spannungsregler. Somit kann man es auch alleine mit 5V betrieben, was ganz nuetzlich ist, wenn man eine 5V Umgebung aufbaut.
http://r.ebay.com/dhsUr1
Hallo Marco,
vielen Dank noch für den guten Hinweis mit dem Spannungsregler und den Link dazu.
Hallo Olaf, wie sieht es mit der IRQ Leitung aus? ich habe noch nicht viel experiementiert. Aber ich muss bei UDP Empfang ja in der loop selbst pollen. Von daher nehme ich an, dass man den Int nicht braucht? Hast Du da Erfahrung?
Hallo Marco,
der Chip selber unterstützt auf jeden Fall diverse Interruptquellen, ist alles ab Seite 63 des Manuals beschrieben. An Pin 2 des Moduls wird der Interruptausgang auch herausgeführt. Beim UDP-Polling wird normalerweise jedoch kein Interrupt benötigt. Ob das hier beim ENC28J60 nun aber vielleicht nicht doch anders ist, kann ich leider auch nicht verbindlich sagen. Habe ich nicht wirklich durchgetestet. Sehe aber keinen Grund warum das hier anders sein sollte.
Guten Tag,
hätten sie noch ein Paar Programmbeispiele,
mir würde ein Code reichen, wo man einfach über einen Button einen Pin an- und ausschalten kann.
Hallo DonKingShott,
bei der hier von mir vorgeschlagenen Jeelabs Library sollten Beispiele dabei gewesen sein. Ansopnsten gibt es noch eine weitere gute Library von Norbert Truchsess mit potentiellen Beispielen:
https://github.com/ntruchsess/arduino_uip
Da könnte ein in den Beispielen ein Parser mit dabei gewesen sein.
Ansonsten könnte ich einen rudimentären Sketch dafür sicher noch irgendwo haben. Könnte ich bei Interesse und etwas Geduld per Email versenden. Mit dem Beitrag hier möchte ich den Sketch nicht unbedingt in Verbindung bringen, da der Sketch definitiv noch nicht völlig ausgereiift ist.
Gruß Olaf
Pingback: Arduino Additional Libraries | Andreas' Blog
Hallo Olaf,
zur Info … beim googln habe ich deine Infos gefunden, Es fehlen leider div. Bilder auf der Seite. Nur das oberste Bild wir angezeigt
Lg
Danke
Dietmar
Hallo Dietmar,
vielen Dank für Dein Feedback. Das ist noch keinem aufgefallen. Es sind einige Links verlorengegangen. Sollte jetzt wieder klappen. Ich schaue später auch noch einmal rein.
Schönes Wochenende!
Olaf
Hallo
Ich kämpfe schon den ganzen Tag mit dem Ethernet-Arduino.
AUFBAU
Arduino IDE
– Platine : Arduino Nano
– CPU : ATmega328
Lan
– HanRun, HR911105A, 16/02
Verdratung
– o o – o
NT SO SCK RST GND
——————–
CLK WOL SI CS VCC
– – o o o
VCC an 3.3V
GND an GND
CS an D8 oder D10 beides probiert
SI an D11
SCK an D13
SO an D12
RST, WOL und IN (wohl INT) nicht angeschlossen, jedoch mal mit INT probiert.
Lan-Leitung zum switch oder direkt in Fritzbox, alles erfolglos.
Lankabel geprüft, io.
Am Switch sieht man keine LED blinken.
Ping geht auch nicht.
Das Problem ist hier:
das while (!readOp(ENC28J60_READ_CTRL_REG, ESTAT) & ESTAT_CLKRDY);
erwartet ein 0, jedoch kommt immer 0.
———————————–
enc28j60.cpp
byte ENC28J60::initialize (uint16_t size, const byte* macaddr, byte csPin) {
….
Serial.println(„readOp A“); // smaz
int x = readOp(ENC28J60_READ_CTRL_REG, ESTAT);
Serial.print(„ESTAT_CLKRDY „); // smaz
Serial.println(ESTAT_CLKRDY); // smaz
Serial.print(„x“); // smaz
Serial.println(x); // smaz
while (!readOp(ENC28J60_READ_CTRL_REG, ESTAT) & ESTAT_CLKRDY);
Serial.println(„readOp B“); // smaz
…
———————
readOp A
ESTAT_CLKRDY 1
x 0
=================================
keine einzige Lib (habe 5 probiert) geht.
Was mach ich falsch?
Was kann ich noch testen?
Ein CanOpen-Arduino-Chip, auch mit SPI, das geht.
gruss,
Robert
„Eine Methode, den üblichen http-Port 80 auf beispielweise 8080 umzustellen…“ –> in net.h steht die Definition „#define HTTP_PORT 80“.
Diese kann einfach überschrieben werden