Подключение Ethernet модуля ENC28J60 к Arduino
Зачастую микроконтроллерам требуется доступ к Интернету, локальной сети. Это может пригодится, например, для построения умного дома, создания метеостанций «Народного мониторинга», установки простого веб-сервера и многого другого. Всё это может обеспечить 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.