Ethernet shield enc28j60 подключение

Обновлено: 06.07.2024


Сегодня мы более подробно рассмотрим шилд (shield), то есть плату расширение для Arduino Nano . Этот шилд оснащен чипом ENC28J60 , который занимается обработкой данных отправляемых в сеть. При правильном использовании он станет настоящим сетевым комбайном, который будет способен предоставлять данные с датчиков или собирать и выполнять пользовательские рекомендации для всех пользователей целевой сети

Подключение модуля ENC28J60 к плате Ардуино и сети

Подключить шилд ENC28J60 к Arduino чрезвычайно просто. Мы должны установить нашу Arduino Nano в разъем шилда. На фото ниже показано правильное подключение модуля ENC28J60 к плате Arduino Nano.


Библиотеки и необходимые материалы

Для запуска модуля ENC28J60 и начала успешного сотрудничества с платой нам понадобится библиотека. Воспользуемся библиотекой EtherCard. Помимо EtherCard, мы можем найти в сети еще несколько библиотек, но, на наш взгляд, эта самая простая в использовании. Предлагаемых в ней функций достаточно для большинства задач.

Библиотеку можно скачать по этой ссылке. Конечно, скаченную библиотеку в IDE Arduino придется установить вручную.

Поэтому проще будет использовать программу установки. Для этого в Arduino IDE перейдите по пути Эскиз/Include Library/Manage libraries, в поле поиска введите EtherCard и нажмите Install для установки библиотеки.

Мы начнем тестировать модуль с загрузки примера backSoon, измененного под наши требования. Данный пример предназначен для подключения к сети и настройки простого веб-сайта, который будет отображать текст. Скетч представлен ​​ниже:

Большинство элементов скетча объяснено с помощью комментариев к исходному коду, но стоит сосредоточиться не на самой программе, а на сетевых аспектах. Это может быть неочевидно для людей, которые не имеют ежедневного контакта с настройкой компьютерных сетей.


Прочная металлическая основа с порошковым покрытием, четыре гибкие руч.

Мы использовали адрес 192.168.1.200, чтобы получить безопасное расстояние до других устройств в сети, но если у нас есть одно устройство, подключенное к сети, модуль Ethernet может иметь IP 192.168.1.3.

Здесь может возникнуть резонный вопрос, так как в сети всего два устройства, почему бы не дать модулю Ethernet адрес 192.168.1.2?

После загрузки скетча в Arduino, стоит включить Serial Monitor, он будет отображать введенные нами данные. Скорость передачи данных в Serial Monitor должна быть изменена с 9600 на 57600 бод.



Отображение показаний датчика DS18B20

Для проверки скорости работы программы подключим датчик температуры DS18B20 к контакту 4, благодаря чему мы сможем проверить, как работает отображение данных с датчиков. Датчик подключается к контакту 4. Не забудьте соединить контакт данных и VCC подтягивающим резистором 4,7 кОм. Макет должен быть построен согласно фото ниже:


После сборки системы мы можем перейти к программной части. Нам понадобятся библиотеки OneWire, DallasTemperature для поддержки датчика DS18B20 и пакет библиотеки ETHER_28J60 для упрощения работы с датчиком на нашем веб-сайте.

Установив новый пакет библиотек, мы можем перейти к написанию программы, которая должна выглядеть, как показано ниже:

После загрузки программы мы должны увидеть следующее:


Мы уже ознакомились с основами этого модуля. Как видите, использование Arduino в сети не так сложно, как может показаться. Кстати, чип ENC28J60 считается самым сложным в программировании и адаптации для правильной работы, поскольку он официально не поддерживается Arduino. Но немного практики и использование соответствующих библиотек даст вам желаемый результат!

Модули Ethernet для Arduino

Плата расширения Arduino Ethrnet Shield

Наиболее популярные Ethernet модули для ардуино сегодня выпускаются на основе микросхемы wiznet w5100, которая способна поддерживать обмен данными с постоянной скоростью в 100 Мбит/сек. Для устройств на базе w5100 написаны готовые библиотеки, данная архитектура является простой и идеально подойдет начинающим любителям электроники, которые могут использовать как стартовую площадку для последующих проектов.

Ключевые характеристики модулей на базе W5100:

Варианты модулей на базе других микросхем:

  • Модуль на базе Wiznet W5500. Имеет меньшие размеры, меньше греется, имеет большую мощность.
  • Модуль на базе enc28j60. Это гораздо более бюджетный вариант, дешевле W5100, но и потенциальных проблем с ним может возникнуть больше.

Шилды Ethernet Shield для Arduino Uno или Nano

Наиболее удобным способом работы с W5100 является использование готовых шилдов Ethernet Shield для Arduino Uno или Nano. На таких модулях уже выполнены все необходимые обвязки, шилд просто вставляется в соответствующие разъемы платы и вам остается только загрузить скетч. Естественно, что при желании к плате могут быть подключены и другие устройства.

Arduino Ethernet

Подключение платы расширения происходит через соединение RJ-45. Плата обладает встроенным слотом SD/MicroSD , который используется для хранения файлов, используемых для подключения и передачи по локальной сети. Такой слот совместим со всеми платами Arduino/Genuino, т.е. работать с данными на карте можно с помощью стандартной библиотеки SD Library. На плате расширения также можно найти кнопку перезагрузки . питания. Ранние версии платы расширения не дружили с ардуино мега, там требовался ручной сброс после поступления питания.

Если плата оснащена POE модулем (питание подается по витой паре), то шилд будет соответствовать следующим спецификациям:

  • Совместим со стандартом IEEE3af.
  • Имеет низкие пульсации на выходе.
  • Защищает от явлений перегрузки и короткого замыкания.
  • Эффективно преобразует напряжение.
  • Имеет изоляцию 1500 вольт на точке между «вход-выход»

По умолчанию плата не комплектуется данным модулем, нужно находить соответствующую модель.

Назначение светодиодов Ethernet Shield:

  • PWR показывает наличие питания на плате.
  • LINK светится при наличии сети и мигает при передаче/приеме данных.
  • FULLD обозначает сетевое полнодуплексное соединение.
  • 100M обозначает сетевое соединение со скоростью 10мбит/сек.
  • RX мигает при приеме экраном данных.
  • TX мигает при отправке данных экраном.
  • COLL мигает при обнаружении сетевых конфликтов.

Кроме этих имеются еще пара светодиодов на гнезде rj 45, один из которых при подключенном шнуре светится, а другой мерцает при поступлении данных.

Ehternet для Arduino Nano

Ethernet Arduino Nano Shield

Модуль точно так же имеет разъем RJ-45, слот для SD и в некоторых модификациях тоже оснащен PoE контроллером.

Как работает Ethernet

Подразумевается, что для проектов, связанных с подключением Arduino к сети вы должны обладать хотя бы общими знаниями в области сетевых технологий. Сегодня можно без труда найти соответствующие материалы в интернете. Хотя мы не ставим себе целью написать учебник по Ethernet, но общие сведения могут оказаться полезными.

Сегодня существует несколько вариантов и модификаций Ethernet, отличающихся скоростными характеристиками и способом организации физического канала:

  • Ethernet. Скорость до 10Mb/s. Любые типы проводов (коаксиал, витая пара, оптоволокно).
  • Fast Ethernet. Скорость до 100Mb/s. Только витая пара или оптика.
  • Gigabit Ethernet. Скорость до 1Gb/s. . Только витая пара и оптика.
  • 10G Ethernet. Скорость до 10Gb/s. Естественно, тоже без коаксиала.

Существует еще с десяток различных групп и подгрупп стандарта, в этой статье мы не будем рассматривать их все.

С практической точки зрения работа с Ethernet выглядит как возможность соединить определенным образом конечное оборудование с ближайшей точкой, имеющей выход в другие сегменты сети. Чаще всего это роутер или маршрутизатор с доступом в интернет или к другим ресурсам локальной сети.

Если вы начинаете проект с Ethernet, то вам нужно будет понимать следующие базовые понятия, имеющие отношение к этой технологии:

Arduino Ethernet Shield на базе W5100 enc28j60
Arduino Ethernet Shield на базе W5100 enc28j60

Как подключить модуль Ethernet к Arduino

Arduino Ethernet Shield на базе W5100 enc28j60

Распиновка шилда с описанием элементов платы для Arduino Uno представлена на следующем рисунке.

Описание Ethernet Shield

После подключения внешнего модуля к арудино нужно будет подключить его к уже существующей сетевой инфраструктуре через витую пару с RJ45 разъемом. Причем подключать можно и к WiFi роутеру, что позволяет вашему проекту выходить на связь в беспроводном режиме (провод от ардуино до роутера все равно понадобится).

Выполнив физическое подключение, останется сделать только последний, но самый сложный и важный шаг. Нужно написать и загрузить в плату соответствующий скетч, который превратит плату в сервер, отвечающий на запросы удаленных устройств или в клиента, собирающего данные с серверов или отправляющего на них данные.

Программирование скетча для Ethernet модуля в Arduino

Поддержка Ethernet для платформы ардуино появилась уже в первых версиях Arduino IDE. Вам нужно просто добавить стандартные библиотеки в ваш скетч с помощью <include> и использовать уже готовые классы.

Нельзя сказать, что библиотека написана безупречно, время от времени в ней находят очень сомнительные фрагменты кода, влияющие на производительность. Но для первых учебный проектов она подходит полностью. Для работы с картой памяти можно использовать встроенную библиотеку SD.

Сервер на Arduino Ethernet

Создаваемый Web-Сервер работает в полном соответствии с НТТР протоколом. Основные функции сервера заключаются в отслеживании клиентских запросов и выполнении различных функций на основе принятых данных. А затем следует отправка непосредственно самого результата в виде НТМL кода. Пример скетча можно найти в Arduino IDE (Файл-Примеры). Ниже приведем лишь короткие фрагменты и описание ключевых моментов.

Работа с библиотекой разбивается на два этапа. Сначала мы создаем необходимые объекты и производим настройку. В процессе инициализации следует прописать MAC-адрес и IP, по которому пользователь будет получать доступ к серверу.

Затем мы включаем бесконечный цикл, в котором постоянно проверяем наличие в очереди запросов от клиентов. Если запросы есть, то анализируем их и в зависимости от параметров формируем ответ. В принципе, мы реализуем логику обычного web-сервера, только все задачи по аутентификации, роутингу и генерации ответа приходится реализовывать самостоятельно. Дополнительный неудобства создают весьма скромные возможности встроенных библиотек по работе со строками.

После того, как пользователь загрузил скетч и подключил его к компьютеру при помощи сетевого кабеля, сервер на ардуино ожидает команд. После того как пользователь перейдет по заданному IP адресу, на сервер попадает get запрос, который информирует о необходимости выдачи интернет-страницы. В задачу сервера входит формирование этой страницы и посыле ее на клиента обратно, после чего браузер сам перерабатывает НТМL код и отображает формы, таблицы и другой контент. Пользователь может выполнить какие-то действия в форме (например, отметив включение необходимых пинов) и они опять отправятся на Arduino-сервер. И так до бесконечности, пока будет работать система и не отвалится сеть.

Arduino Ethernet как клиент. Отправка данных на сервер

Следующим этапом является подключение и отправка данных на сервер

Все приведенные фрагменты скетчей не будут работать по отдельности. Вы можете получить полный работающий код для Ethernet модуля бесплатно в самой среде Arduino IDE. На рисунке показано, где именно это можно сделать.

Библиотеки Ethernet в Arduino IDE

Выводы

В данной статье была рассмотрена возможность управления платой Arduino через интернет посредством Etherent модуля на базе w5100. Как мы убедились, подключение модуля и программирование скетча не представляет существенной сложности. Главное, это правильно определиться со структурой проекта, определить, что будет являться сервером, а что клиентом, как будет осуществлено подключение к интернету.

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

Для реализации проекта из этой статьи нам потребуются следующие компоненты:

Краткий обзор 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.

Подключение ENC28J60 к Arduino

При использовании Arduino Mega она станет выглядеть так:

  • VCC – 3v3;
  • GND – GND;
  • CS – 53;
  • SI – 51;
  • SO – 50;
  • SCK – 52.

Номер пина CS можно изменить при помощи функции ether.begin().

Обратите внимание на то, что модуль потребляет достаточно много энергии и тока, выдаваемого портом 3v3 может не хватить, особенно на китайских клонах. В этом случае нужно будет использовать внешний источник питания.

Теперь перейдём к программированию и подключению ENC28J60 к Arduino.

Подключение в Arduino IDE

Среди стандартных библиотек Arduino IDE нет библиотеки для нашего модуля, поэтому будем использовать библиотеку EtherCard, которая поддерживает следующие модели Arduino: UNO, Mega, Leonardo, Nano, Pro Mini, LilyPad, Duemilanove и прочие, основанные на AVR микроконтроллерах. Платы с ARM архитектурой, такие как 101, Zero, Due ей не поддерживаются.

Попробуем вывести в последовательный порт компьютера IP адрес устройства, маску подсети, шлюз по умолчанию и адрес DNS сервера.

После сборки схемы и подключения платы к компьютеру загрузим следующий скетч в Arduino:

image

Всем привет.
Как многие слышат, что нужно создать WEB сервер – сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваш творение хуже?
Так что Если Вам интересно – идем дальше.

Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим.
За основу взят популярный модуль с контроллером ENC28j60.

image

image

Для начала идет инициализация библиотек.
Далее я указал пины для подключения модуля с контроллером ENC28j60. Так же Нам необходимо указать параметры нашего сетевого устройства. Для этого указываем MAC адрес –помните он не должен совпасть с MAC адресом Ваших сетевых устройств. Так же и IP Адрес – должен быть индивидуальным – но находиться в Вашей подсети.
К примеру, у Вас роутер(192,168,0,1), Ваш ПК(192,168,0,5) то Ваше устройство может быть(192,168,0,100).
К примеру, у Вас роутер(192,168,4,1), Ваш ПК(192,168,4,10) то Ваше устройство может быть(192,168,4,100).
Далее нужно указать порт. По умолчанию 80 – так как Веб браузеры по умолчанию опрашивают именно его(смотрите тест изменения порта в видео ниже).
Далее ETHER_28J60 ethernet; — указываем на имя объекта для обращения(ethernet), ниже в программе мы будем обращаться по этому имени.
Далее Нам необходима инициализация сетевого контроллера – применяем все установки адресов и портов.

Ну тут думаю самое сложное и не интересное закончилось …

image

Выделенная строка создает крупный тест на страничке, его легко редактировать и таких строчек можно добавлять по необходимости(но все упирается в количество Flash памяти контроллера).
Команда ethernet.respond(); отправляет все наши строчки сайта на браузер с которого сделали запрос на сайт(в данном случае 192.168.0.100).
Но если Вы заметили то названия у этого сайта нет(просто IP адрес).Не волнуйтесь, это поправимо, если добавить одну строчку:

image

Вот… теперь уже лучше.
Далее добавляя, строчки мы будем добавлять объекты на страничке которые помогут нам отображать информацию или управлять нею.
Начнем с ссылки, при нажатии на которую, мы отправим на контроллер запрос с тестом (который нужен будет нам позже для обработки).

image

Красной стрелкой название кнопки, а синей мы указываем на текст в запросе при нажатии на ссылку. Значит, если Мы нажмем на ссылку «Стоп» то отправим запрос на наш сервер: «192.168.0.100/stop» — где «stop» будет текст запроса.
Далее рассмотрим такой же вариант только с кнопкой:

image

Добавились атрибуты необходимые для отображения браузером кнопки. При нажатии, на которую, уже отправится запрос с тестом «start». Думаю здесь все понятно.
Для любителей красоты можно добавить параметры и создать интересную кнопку:

image

Для следующего варианта нам понадобятся переменные, добавим их в начале скетча:

image

Сейчас отобразим на Нашей страничке таблицу:

image

Для обозначения объекта таблица используется атрибут table. Далее я красным подчеркнул ( tr ) внешние границы таблицы и синим — внутренние рамочки. Обратите внимание что они попарно, а в центре пары Ваше значение или переменная(к примеру ves1 или ves2). Так же вы можете заметить что пара создает жирный текст а обычный текст. В конце объект таблица завершается /table.
Думаю с отображением объектов на странице достаточно для создания не сложных WEB страниц(более подробно и наглядно вы можете увидеть ниже в видео уроках для начинающих).
Но как же обработать запрос – для этого немного модифицируем наше условие с самого начала, добавив при этом переменную для строки. Так же создадим для примера два условия обработки запросов: 1-е это пустой запрос (192.168.0.100); 2-е это запрос с текстом «start»(192.168.0.100/start)

image

В зависимости от поданного запроса на сервер, на браузере сайт будет отображаться согласно указанным строкам:

image

Вот так можно делать динамические станицы, которые будут меняться, и отображать различную информацию в зависимости от параметров переменных или запросов от ссылок и кнопок.

Более детально и наглядно можно увидеть все, выше упомянутое, в Видео уроках для начинающих:

Старался изложить материал доступными словами не используя сложные термины.
Надеюсь, эта статья поможет многим начинающим создать свой web сервер. Для более продвинутых будут видео по другим библиотекам … более сложным.

Читайте также: