Сетевой 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 () {} |

Пример: Веб-страница
|
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 |
#include <EtherCard.h> // Уникальный MAC-адрес static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 }; // Статический IP-адрес под вашу сеть, проверьте в настройках роутера static byte myip[] = { 192, 168, 1, 64 }; // Выделяем буфер под сетевые пакеты byte Ethernet::buffer[500]; BufferFiller bfill; void setup () { Serial.begin(9600); Serial.println(F("\n[ENC28J60 WebServer Test]")); // Инициализация модуля. Пин CS подключен к D10 if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) { Serial.println(F("Ошибка доступа к ENC28J60")); while(1); } // Настройка статического IP ether.staticSetup(myip); Serial.print(F("Сервер запущен. Перейдите по адресу: http://")); ether.printIp(ether.myip); Serial.println(); } void loop () { // Проверяем наличие входящих пакетов word len = ether.packetReceive(); word pos = ether.packetLoop(len); // Если пришел валидный HTTP-запрос if (pos) { // Инициализация буфера под ответ bfill = BufferFiller(Ethernet::buffer + pos); // Формируем HTTP-ответ и простейшую HTML-страничку bfill.emit_p(PSTR( "HTTP/1.0 200 OK\r\n" "Content-Type: text/html; charset=utf-8\r\n" "Refresh: 5\r\n" "\r\n" "<html>" "<head><title>Arduino ENC28J60</title></head>" "<body>" "<h1>AmperMarket Test Page</h1>" "<p>BackSoon sketch</p>" "<p>Время работы платы (аптайм): $D секунд.</p>" "</body>" "</html>"), millis() / 1000); // Отправляем данные клиенту с использованием bfill.position() ether.httpServerReply(bfill.position()); } } |










