Зачастую микроконтроллерам требуется доступ к Интернету, локальной сети. Это может пригодится, например, для построения умного дома, создания метеостанций «Народного мониторинга», установки простого веб-сервера и многого другого. Всё это может обеспечить Ethernet-модуль ENC28J60.
В этой статье будет рассказано о подключении ENC28J60 к Arduino. Этот модуль позволяет Arduino выходить в Интернет или в локальную сеть.
Для реализации проекта нам потребуются следующие компоненты:
- Arduino Uno R3
- ENC28J60 модуль
- Макетная плата
- Соеденительные провода “папа-папа”
Краткое описание ENC28J60
Модуль подключается к Arduino с помощью SPI интерфейса. Тактовая частота интерфейса может достигать 20 МГц. Для подключения к сети TCP/IP используется разъём RJ-45. Модуль гальванически развязан с ним.
Контроллер модуля имеет максимальную тактовую частоту 25 МГц. Все функции по работе с сетевыми протоколами возложены на него, Arduino остаётся только отправлять пакеты данных и принимать полученные.
Модуль работает при напряжении 3,3 В, благодаря чему совместим и с микроконтроллерами STM32 или STM8. Максимальный потребляемый ток может составлять 250 мА, номинальный – 170 мА.
Теперь разберём подключение ENC28J60 к Arduino.
СХЕМА ПОДКЛЮЧЕНИЯ
Рассмотрим подключение ENC28J60 к UNO и к другим платам на базе Arduino ATmega328/168.

Схема будет выглядеть так:
- VCC – 3v3;
- GND – GND;
- CS – 8;
- SI – 11;
- SO – 12;
- SCK – 13.
При использовании Arduino Mega она станет выглядеть так:
- VCC – 3v3;
- GND – GND;
- CS – 53;
- SI – 51;
- SO – 50;
- SCK – 52.
Номер пина CS можно изменить при помощи функции ether.begin().
Обратите внимание на то, что модуль потребляет достаточно много энергии и тока, выдаваемого портом 3v3 может не хватить, особенно на китайских клонах. В этом случае нужно будет использовать внешний источник питания.
Теперь перейдём к программированию и подключению ENC28J60 к Arduino.
Обратите внимание на то, что модуль потребляет достаточно много энергии и тока, выдаваемого портом 3v3 может не хватить, особенно на китайских клонах. В этом случае нужно будет использовать внешний источник питания.
ПОДКЛЮЧЕНИЕ В ARDUINO IDE
Среди стандартных библиотек Arduino IDE нет библиотеки для нашего модуля, поэтому будем использовать библиотеку EtherCard, которая поддерживает следующие модели Arduino: UNO, Mega, Leonardo, Nano, Pro Mini, LilyPad, Duemilanove и прочие, основанные на AVR микроконтроллерах. Платы с ARM архитектурой, такие как 101, Zero, Due ей не поддерживаются.
Попробуем вывести в последовательный порт компьютера IP адрес устройства, маску подсети, шлюз по умолчанию и адрес DNS сервера.
После сборки схемы и подключения платы к компьютеру загрузим следующий скетч в Arduino:
Код подключения
#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 () {}
MAC-адрес здесь представлен в шестнадцатеричном виде. Следите за тем, чтобы он не совпадал ни с одним из уже имеющихся адресов в сети, иначе возможны проблемы.
Другие примеры использования библиотеки есть в папке «examples» в архиве с ней. Документация к ней расположена по следующему адресу и написана на английском языке.
Эта библиотека не единственная, есть ещё EtherEncLib и UIPEthernet.




