Сетевой Ethernet модуль на ENC28J60, как следует из названия, предназначен для организации передачи данных по сети между различными устройствами, при этом он работает как в локальной сети TCP/IP, так и в сети Internet. Модуль основан на микроконтроллере ENC28J60, максимальная тактовая частота которого составляет 25 МГц. Все функции по работе с сетевыми протоколами возложены на него, Arduino остаётся только отправлять и принимать пакеты данных.
 
		
			
			
			
			
				
					
			
		
		
			
			
			
			
				
					
			
		
			Аппаратные возможности модуля ENC28J60 и соответствующая программа микроконтроллера позволяют создать простой веб-сервер. Модуль связывает управляющий контроллер через интерфейс SPI с сетью TCPIP. ENC28J60 Ethernet модуль для Ардуино может служить не только частью прибора автоматики, но и наглядным пособием для изучения сети TCP/IP и методов построения веб-сервера.
На плате имеется разъем RJ-45, включающий в себя трансформатор, обеспечивающий гальваническую развязку модуля от кабеля TCP/IP, и 2 светодиода, свечение которых сообщает о обмене данными. Кварцевый резонатор модуля рассчитан на частоту 25 МГц. Разъем подключения к управляющему микроконтроллеру (например, к плате Arduino) имеет 10 контактов:
- VCC – питание, «+»;
 
- GND – питание, «земля»;
 
- SCK – тактирование (SPI);
 
- SO – MISO, выход данных (SPI);
 
- SI – MOSI, вход данных (SPI);
 
- CS – вход выбора микросхемы (SPI);
 
- INT – выход прерывания при приеме пакета;
 
- RESET – сброс;
 
- CLKOUT – Clock output, выход тактирования;
 
- WOL – прерывание.
Подключение к Arduino Uno:
 
- VCC → 3.3V;
 
- GND → GND;
 
- SCK → 13;
 
- SO → 12;
 
- SI → 11;
 
- CS → 10.
Пример: testDHCP
| 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 | #include <EtherCard.h> static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 }; byte Ethernet::buffer[700]; void setup () {   Serial.begin(57600);   Serial.println(F("n[testDHCP]"));   Serial.print("MAC: ");   for (byte i = 0; i < 6; ++i) {     Serial.print(mymac[i], HEX);     if (i < 5)       Serial.print(':');   }   Serial.println();   if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)     Serial.println(F("Failed to access Ethernet controller"));   Serial.println(F("Setting up DHCP"));   if (!ether.dhcpSetup())     Serial.println(F("DHCP failed"));   ether.printIp("My IP: ", ether.myip);   ether.printIp("Netmask: ", ether.netmask);   ether.printIp("GW IP: ", ether.gwip);   ether.printIp("DNS IP: ", ether.dnsip); } void loop () {} | 
	
Пример: backSoon
| 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <EtherCard.h> #define STATIC 0  // set to 1 to disable DHCP (adjust myip/gwip values below) #if STATIC // ethernet interface ip address static byte myip[] = { 192,168,1,64 }; // gateway ip address static byte gwip[] = { 192,168,1,1 }; #endif // ethernet mac address - must be unique on your network static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; byte Ethernet::buffer[500]; // tcp/ip send and receive buffer const char page[] PROGMEM = "HTTP/1.0 503 Service Unavailablern" "Content-Type: text/htmlrn" "Retry-After: 600rn" "rn" "<html>"   "<head><title>"     "AmperMarket Test Page"   "</title></head>"   "<body>"     "<h3>AmperMarket Test Page</h3>"     "<p><em>"       "BackSoon sketch<br />"       "Your Text"     "</em></p>"   "</body>" "</html>" ; void setup(){   Serial.begin(57600);   Serial.println("n[backSoon]");   // Change 'SS' to your Slave Select pin, if you arn't using the default pin   if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)     Serial.println( "Failed to access Ethernet controller"); #if STATIC   ether.staticSetup(myip, gwip); #else   if (!ether.dhcpSetup())     Serial.println("DHCP failed"); #endif   ether.printIp("IP:  ", ether.myip);   ether.printIp("GW:  ", ether.gwip);   ether.printIp("DNS: ", ether.dnsip); } void loop(){   // wait for an incoming TCP packet, but ignore its contents   if (ether.packetLoop(ether.packetReceive())) {     memcpy_P(ether.tcpOffset(), page, sizeof page);     ether.httpServerReply(sizeof page - 1);   } } | 
	










