Module – ENC28J60 – Ethernet LAN Netwerk
Hardware
Met deze module kan je eenvoudig een Raspberry Pi Zero, Arduino UNO/MEGA/NANO verbinden met het internet als server of client.
– Werkt op 3.3V.
– Ethernet controller: ENC28J60 met 8K interne buffer.
– Connectie snelheid: 10/100Mb.
– Commnicatie via SPI interface.
Ps. er zijn verschillende versies in omloop, pin benamingen voor de versie met 12 pins:
Q3 = 3.3V
ST = SI
LNT = INT
Pinout
Arduino
Aansluiten op een Arduino
Ps. Afhankelijk van welke bibliotheek je gebruikt zul je CS (Chip Select) moeten aan passen in de code of hardwarematig.
Voorbeeld schema’s:
ENC28J60 module: | Arduino pin: |
---|---|
SO (MISO) | 12 |
SI of ST (MOSI) | 11 |
SCK | 13 |
CS (Chip Select) | 8, 10, 53 (configureerbaar en/of afhankelijk van library) |
VCC | 3.3v |
GND | GND |
Hardware: Arduino NANO Shield – Ethernet ENC28J60
Met deze shield kan je eenvoudig een Arduino NANO verbinden met het internet als server of client
Pinout van module:
SS(CS) pin: D10
MOSI(SI of ST) pin: D11
MISO(SO) pin: D12
SCK pin: D13
Voorbeeld met UIPEthernet bibliotheek (Vast IP)
CS bij bibliotheek UIPEthernet = Pin 10
Wat heb je nodig?
– UIPEthernet bibliotheek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <UIPEthernet.h> byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 }; IPAddress ip(192, 168, 2, 28); EthernetServer server(80); void setup() { Serial.begin(115200); Ethernet.begin(mac, ip); server.begin(); Serial.print("IP Address: "); Serial.println(Ethernet.localIP()); } void loop() { EthernetClient client = server.available(); if (client) { Serial.println("-> Nieuwe connectie"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n' && currentLineIsBlank) { client.println("<!DOCTYPE html>"); client.println("<html xmlns='http://www.w3.org/1999/xhtml'>"); client.println("<head>\n<meta charset='UTF-8'>"); client.println("<title>Hallo Wereld</title>"); client.println("</head>\n<body>"); client.println("<H2>Hallo Wereld</H2>"); client.print("</body>\n</html>"); break; } if (c == '\n') currentLineIsBlank = true; else if (c != '\r') { currentLineIsBlank = false; } } } delay(10); client.stop(); Serial.println(" Connectie verbroken\n"); } } |
1 |
IP Address: 192.168.2.28 |
1 |
Hallo Wereld |
Voorbeeld met ETHERCARD bibliotheek (vast adres)
Ps. zelf het IP (en/of MAC) adres aanpassen.
CS bij bibliotheek Ethercard = Pin 8 standaard, maar is configureerbaar (onder voorbeeld met pin 10)
Wat heb je nodig?
– Ethercard bibliotheek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <EtherCard.h> static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x01,0x05}; static byte myip[] = {192,168,2,28}; byte Ethernet::buffer[700]; void setup () { Serial.begin(9600); Serial.print("Intialiseer ENC28J60 module..."); if (!ether.begin(sizeof Ethernet::buffer, mymac, 10)) Serial.println("ERROR"); else Serial.println("OK"); Serial.print("IP adres instellen..."); if (!ether.staticSetup(myip)) Serial.println("ERROR"); else Serial.println("OK"); } static word homePage() { BufferFiller bfill = ether.tcpOffset(); bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\nPragma: no-cache\r\nRefresh: 5\r\n\r\n" "<html><head><title>Hallo Wereld</title></head>" "<body>" "<div style='text-align:center;'>" "<h1>Hallo Wereld</h1>" "</body></html>" )); return bfill.position(); } void loop() { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if(pos) { ether.httpServerReply(homePage()); } // Geef webpagina weer } |
1 2 |
Intialiseer ENC28J60 module...OK IP adres instellen...OK |
1 |
Hallo Wereld |
Voorbeeld met ETHERCARD bibliotheek (DHCP)
CS bij bibliotheek Ethercard = Pin 8 standaard, maar is configureerbaar (onder voorbeeld met pin 10)
Wat heb je nodig?
– Ethercard bibliotheek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <EtherCard.h> static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x01,0x05}; byte Ethernet::buffer[700]; void setup () { Serial.begin(9600); Serial.print("Intialiseer ENC28J60 module..."); if (!ether.begin(sizeof Ethernet::buffer, mymac, 10)) Serial.println("ERROR"); else Serial.println("OK"); Serial.print("IP adres instellen..."); if (!ether.dhcpSetup()) Serial.println("ERROR"); else Serial.println("OK"); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); } static word homePage() { BufferFiller bfill = ether.tcpOffset(); bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\nPragma: no-cache\r\nRefresh: 5\r\n\r\n" "<html><head><title>Hallo Wereld</title></head>" "<body>" "<div style='text-align:center;'>" "<h1>Hallo Wereld</h1>" "</body></html>" )); return bfill.position(); } void loop() { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if(pos) { ether.httpServerReply(homePage()); } // Geef webpagina weer } |
1 2 3 4 5 |
Intialiseer ENC28J60 module...OK IP adres instellen...OK IP: 192.168.2.15 GW: 192.168.2.254 DNS: 192.168.2.254 |
1 |
Hallo Wereld |
Raspberry Pi
Ps. Werkt ook op een Raspberry Pi Zero W
Het is mogelijk om op de Raspberry Pi Zero een ethernet connectie aan te sluiten, het gaat om de ENC28J60 module via SPI, zodoende kan je de raspberry pi zero eenvoudig met het internet verbinden!
Sluit de ethernet module aan volgens onderstaand schema (als voorbeeld de RPI3)
Pinout:
ENC28J60 module: | RPI functie: | RPI pin: |
---|---|---|
VCC | VCC 3.3V | 1 |
GND | GND | 6 |
SI/ST | GPIO 10 (MOSI) | 19 |
SO | GPIO 9 (MISO) | 21 |
INT/IRQ/LNT | GPIO 25 | 22 |
SCK | GPIO 11 (SCKL) | 23 |
CS | GPIO 8 (CE0/SPCS0) | 24 |
Praktijk:
Activeren van SPI
1) Log in met SSH (raspberrypi.local)
2) Geef het commando: sudo rapi-config om de raspberry pii te configureren.
3) Ga naar > Interfacing options > SPI > Yes om de SPI interface aan te zetten:
ENC28J60 activeren onder Raspbian
De ENC28J60 module wordt standaard door Raspbian over SPI ondersteund, deze moet alleen met behulp van het config.txt bestand worden geactiveerd, hiervoor moeten we het bestand /boot/config.txt bewerken:
sudo nano /boot/config.txt
Plaats onderaan dit bestand de volgende regel:
dtoverlay=enc28j60
Sla de wijzigingen op (control + X, Y, gevolgd door ENTER).
Dat was alles, herstart nu de Raspberry Pi, de nieuwe ethernet poort zal tijdens het booten automatisch worden geactiveerd. Je kunt er direct een netwerkkabel op aan sluiten om gebruik te kunnen maken van je netwerk.
sudo reboot
Na de reboot kun je met behulp van het ifconfig commando controleren of de nieuwe ethernet interface actief is. Wanneer er geen andere ethernet poort aanwezig is dan wordt dit ETH0. Is er nog een ethernet poort dan zal je ETH0 en ETH1 in het ifconfig overzicht terugvinden.
Genoeg stroom
Uit eigen ervaring ging bovenstaand niet werken op de 3.3V of 5V aansluiting via USB2 (500mA), de verbinding was erg onstabiel, wellicht werkt het beter op een USB3 poort (950mA), aanbevolen is een 1A of 2A 5V adapter te gebruiken en dan de Raspberry Pi Zero te voeden via PWR USB aansluiting.
Bron: raspi.tv / raspberrytips.nl
Schema
Teardown
GEEN GEGEVENS
Datasheet
Fritzing
- ENC28J60 Breakout Board 12 pins.fzpz 8,95 kb
- ENC28J60 Breakout Board 10 pins.fzpz 13,36 kb
Downloads
GEEN GEGEVENS