Андрей Смирнов
Время чтения: ~14 мин.
Просмотров: 7

WEB Server на базе ENC28j60 + Arduino — проще не бывает

Lesson63_0.png

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

Предыдущий урок     Список уроков     Следующий урок

Локальная сеть Ethernet.

Ethernet – самый распространенный в мире сетевой интерфейс. Когда говорят об объединении компьютеров в локальную сеть, как правило, имеют в виду именно его. Ethernet контроллер стал штатным устройством для каждого компьютера.

Первый вариант стандарта Ethernet появился еще в 70х годах. Первоначально средой передачи был коаксиальный кабель, топология сети – шина, скорость передачи 10 мегабит/сек. Со временем появилось множество разновидностей Ethernet со скоростью передачи до 100 гигабит/сек, изменилась архитектура сети, стала другой среда передачи. Об этом существует много подробной информации: протоколы, форматы данных, алгоритмы обмена и т.п. Я буду рассказывать о сети Ethernet чисто с практической стороны.

Нам интересны стандарты Ethernet  (10 Мбит/сек) и  Fast Ethernet (100 Мбит/сек). Они совместимы и отличаются только скоростью передачи данных. Для подключения к сети плат Ардуино мы будем использовать контроллеры первого стандарта (10 Мбит/сек), а штатные сетевые контроллеры компьютеров поддерживают второй  стандарт (100 Мбит/сек). Но это не помешает подключить компьютер к той же сети. Стандарты обозначаются соответственно 10BASE-T и 100BASE-TX.

Топология сети.

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

Lesson63_3.png

Если используется более двух устройств, то соединение происходит по радиальной топологии с помощью хабов (HUB).

Lesson63_4.png

Хаб или сетевой концентратор — это электронный прибор для соединения нескольких сетевых устройств в один сегмент сети. Он содержит несколько портов ввода/вывода.

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

Хабы можно соединять между собой, но только в древовидные структуры.

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

Гораздо больше возможностей имеет сеть, созданная на базе коммутаторов (switch).

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

Коммутатор это прибор для соединения нескольких устройств сети в пределах одного или нескольких сегментов.

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

  • Хаб — это “тупой” аппаратный повторитель сигналов.
  • Коммутатор – интеллектуальное устройство, которое анализирует заголовки пакетов и передает данные только на нужные порты.

Обычно сетевой коммутатор поддерживает различные скорости передачи данных одновременно.

К портам коммутаторов могут быть подключены другие коммутаторы или хабы. Это позволяет почти бесконечно расширять сеть.

Роутер или маршрутизатор – это сетевой шлюз, устройство для передачи пакетов между различными сетями. Как правило, используется для подключения к глобальной сети Интернет.

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

Среда передачи данных Ethernet (кабель).

В качестве среды передачи нужные нам стандарты требуют применения кабеля категории 3 или категории 5. Используются только две неэкранированные витые пары (4 провода).

Одна витая пара предназначена  для передачи данных, другая для приема.

  • Волновое сопротивление линий — 100 Ом.

Кабель обозначается UTP —  Unshielded twisted pair (неэкранированная витая пара). Часто на нем написано ”ETHERNET LAN CABLE”.

Стандартный кабель содержит 4 витые пары.

Мы будем использовать только две из них.

Для подключения к портам Ethernet используются 8 контактные разъемы RJ-45.

Есть два варианта распиновки разъемов: T568A и T568B. Часто просто называются варианты A и B.

Распиновка T568A.

Номер контакта Назначение сигнала
1 TX+
2 TX-
3 RX+
6 RX-

Распиновка T568B.

Номер контакта Назначение сигнала
1 RX+
2 RX-
3 TX+
6 TX-
  • На сетевой карте компьютера и Ethernet модуле Ардуино  применяется вариант A.
  • Порты ввода/вывода коммутатора или роутера используют вариант B.

Понятно, что выходные сигналы одного устройства должны подключаться к входам другого, и наоборот. Поэтому существует 2 варианта кабелей: прямой и перекрестный. Прямой используется для соединения между устройствами с разъемами типов A и B, а перекрестный – для соединения портов с одинаковой распиновкой.

Для нас это означает:

  • если мы будем подключать плату Ардуино к материнской плате компьютера или другой плате Ардуино, то необходимо использовать перекрестный кабель;
  • если плата Ардуино подключается к коммутатору или роутеру – кабель должен быть прямым.

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

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

На рисунках показаны общепринятые цвета жил кабеля. Лучше их придерживаться.

  • Максимальная длина сегмента кабеля – 100 м.

В сетевом интерфейсе Ethernet существует полная гальваническая развязка каждого устройства от среды передачи (кабеля). Развязка осуществляется за счет применения импульсных трансформаторов.

Это значительно повышает помехозащищенность сети и обеспечивает электрическую безопасность сетевых устройств.

Модуль ENC28J60.

Платы Ардуино будем подключать к сети Ethernet с помощью модуля ENC28J60. Физически он представляет собой плату размерами 51 x 18 мм.

Это самый дешевый сетевой Ethernet контроллер. По моей партнерской ссылке на момент написания статья его цена составляет всего 250 руб.

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

Модуль выполнен на базе микросхемы ENC28J60 фирмы Microchip. Практически это микросхема ENC28J60 в стандартном включении.

Техническую информацию фирмы-производителя можно посмотреть по этой ссылке ENC28J60.pdf.

Вот принципиальная схема модуля.

Основные характеристики модуля ENC28J60.

  • Совместимость с Ethernet сетями 10/100/1000 Base-T. Скорость передачи данных 10 мбит/сек, реализация TCP/IP стека.
  • Интерфейс связи с микроконтроллером – SPI, частота до 20 мГц.
  • Напряжение питания 3,1 – 3,6 В. Типовое 3,3 В.
  • Интерфейсные входы модуля позволяют непосредственное подключение к сигналам с 5 вольтовыми уровнями. Максимально-допустимое напряжение на входах интерфейса SPI — 6 В. В половине статей о подключении ENC28J60 к Ардуино написано, что необходимо подключать входные сигналы через согласующие резисторные делители. Это не так. Сомневающееся могут посмотреть документацию на микросхему ENC28J60.
  • Ток потребления от источника питания 3,3 В:
    • в момент передачи может достигать 180 мА;
    • в активном состоянии, но без передачи 120 мА;
    • в режиме ожидания (сигнал CS в неактивном уровне) не более 2 мА.
  • В модуле обеспечивается гальваническая развязка от линии связи.

Это характеристики, которые я решил выделить. Главное:

  • для питания модуля необходимо использовать источник напряжением 3,3 В и выходным током до 180 мА;
  • выводы интерфейса модуля допускается подключать к 5 вольтовым сигналам.

Интерфейс связи с микроконтроллером.

К микроконтроллеру модуль подключается через 10 контактный разъем типа PLHD, расположенный на печатной плате устройства.

Назначение контактов (распиновка) модуля ENC28J60.

Контакт Обозначение Направление Назначение
1 CLK выход Выход тактового сигнала
2 INT выход Сигнал прерывания
3 WOL Зарезервирован
4 SO выход Сигнал SO интерфейса SPI
5 SI вход Сигнал SI интерфейса SPI
6 SCK вход Сигнал SCK интерфейса SPI
7 CS вход Сигнал CS интерфейса SPI (выбор контроллера)
8 RST вход Сброс
9 VCC Питание модуля 3,3 В 180 мА
10 GND Общий вывод

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

Для питания модуля необходим источник напряжения 3,3 В. Такое напряжение есть на плате Arduino UNO. Поэтому я решил подключить модуль к ней. Для других плат пришлось бы добавлять стабилизатор напряжения 3,3 В.

В характеристиках на плату Arduino UNO указано, что ток потребления на выводе 3,3 В должен быть не более 50 мА. А нам необходимо 180 мА. Но на моей плате Arduino UNO в качестве стабилизатора 3,3 В используется микросхема XC6206P332MR. На плате это корпус SOT-23 с обозначением 662K. Допустимый выходной ток для этого стабилизатора 200 мА (технические характеристики можно посмотреть по ссылке XC6206.pdf). Т.е. модуль можно смело запитывать от Arduino UNO.

Для управления модулем мы будем использовать аппаратный интерфейс SPI микроконтроллера. Поэтому выбора выводов платы Ардуино для подключения модуля у нас нет.

Таблица соединения выводов платы Arduino UNO и модуля ENC28J60 выглядит так.

Плата Arduino UNO Модуль ENC28J60
Вывод № вывода Обозначение
12 4 SO
11 5 SI
13 6 SCK
10 7 CS
RES 8 RST
3.3 V 9 VCC
GND 10 GND

Кому-то удобнее будет работать со схемой.

У меня все это выглядит так.

К роутеру я подключил модуль прямым кабелем.

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

Предыдущий урок     Список уроков     Следующий урок

Поддержать проект Всем привет. Как многие слышат, что нужно создать WEB сервер – сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваш творение хуже? Так что Если Вам интересно – идем дальше. Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим. За основу взят популярный модуль с контроллером ENC28j60. А также я взял Arduino UNO(также можно Nano или Pro Mini). Все они работают на ATmega328. В этой статье я покажу основы создания WEB сервера на самых простых библиотеках. В данном случае: #include «etherShield.h» #include «ETHER_28J60.h» Они просты для понимания – но и возможностей тоже меньше. Для обычного мониторинга и управления нагрузками – более чем достаточно. Давайте рассмотрим, что нам нужно для этого. Выделенная строка создает крупный тест на страничке, его легко редактировать и таких строчек можно добавлять по необходимости(но все упирается в количество Flash памяти контроллера). Команда ethernet.respond(); отправляет все наши строчки сайта на браузер с которого сделали запрос на сайт(в данном случае 192.168.0.100). Но если Вы заметили то названия у этого сайта нет(просто IP адрес).Не волнуйтесь, это поправимо, если добавить одну строчку: Вот… теперь уже лучше. Далее добавляя, строчки мы будем добавлять объекты на страничке которые помогут нам отображать информацию или управлять нею. Начнем с ссылки, при нажатии на которую, мы отправим на контроллер запрос с тестом (который нужен будет нам позже для обработки). Добавились атрибуты необходимые для отображения браузером кнопки. При нажатии, на которую, уже отправится запрос с тестом «start». Думаю здесь все понятно. Для любителей красоты можно добавить параметры и создать интересную кнопку: Для следующего варианта нам понадобятся переменные, добавим их в начале скетча: Сейчас отобразим на Нашей страничке таблицу: Для обозначения объекта таблица используется атрибут table. Далее я красным подчеркнул ( tr ) внешние границы таблицы и синим — внутренние рамочки. Обратите внимание что они попарно, а в центре пары Ваше значение или переменная(к примеру ves1 или ves2). Так же вы можете заметить что пара создает жирный текст а обычный текст. В конце объект таблица завершается /table. Думаю с отображением объектов на странице достаточно для создания не сложных WEB страниц(более подробно и наглядно вы можете увидеть ниже в видео уроках для начинающих). Но как же обработать запрос – для этого немного модифицируем наше условие с самого начала, добавив при этом переменную для строки. Так же создадим для примера два условия обработки запросов: 1-е это пустой запрос (192.168.0.100); 2-е это запрос с текстом «start»(192.168.0.100/start) В зависимости от поданного запроса на сервер, на браузере сайт будет отображаться согласно указанным строкам: Вот так можно делать динамические станицы, которые будут меняться, и отображать различную информацию в зависимости от параметров переменных или запросов от ссылок и кнопок. Более детально и наглядно можно увидеть все, выше упомянутое, в Видео уроках для начинающих: Ссылки на скетчи с примерами(В первом примере библиотека):www.facebook.com/download/1779869258903901/web_urok_01.rarwww.facebook.com/download/351288838383944/web_urok_02.rarwww.facebook.com/download/435653776600017/web_urok_03.rar Старался изложить материал доступными словами не используя сложные термины. Надеюсь, эта статья поможет многим начинающим создать свой web сервер. Для более продвинутых будут видео по другим библиотекам … более сложным.

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

В этой статье будет рассказано о подключении ENC28J60 к Arduino. Этот модуль позволяет Arduino выходить в Интернет или в локальную сеть.

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

  • Arduino Uno R3
  • ENC28J60 модуль
  • Макетная плата
  • Соеденительные провода “папа-папа”

Краткое описание ENC28J60

Модуль подключается к Arduino с помощью SPI интерфейса. Тактовая частота интерфейса может достигать 20 МГц. Для подключения к сети TCP/IP используется разъём RJ-45. Модуль гальванически развязан с ним.

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

СХЕМА ПОДКЛЮЧЕНИЯ

Рассмотрим подключение ENC28J60 к UNO и к другим платам на базе Arduino ATmega328/168.

 scheme.jpg

Схема будет выглядеть так:

  • VCC – 3v3;
  • GND – GND;
  • CS – 8;
  • SI – 11;
  • SO – 12;
  • SCK – 13.

arduino-connect-enc28j60.jpgПри использовании 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      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.

Рекомендуемые товары

WZ9wNGv_yN8-200x200.jpg

Uno SMD с кабелем (Аналог Arduino)

Uno SMD использует ATmega328 микроконтроллер и имеет 14 цифровых входов/выходов (6 может использоват..

3 000 ₸

EfioEcQZi04-200x200.jpg

Контактный провод МАМА-МАМА

Характеристики Контактный провод тип МАМА-МАМА.Длина 20 сантиметров.Цена за 10 проводов…

300 ₸

AHyMdwVve1s-200x200.jpg

Беспаечная макетная плата 400 контактов

Для налаживания и тестирования самодельных электронных устройств радиолюбители используют так называ..

840 ₸

1265-200x200.jpg

Ethernet модуль для Ардуино ENC28J60

Предназначен для сборки устройства управления электрическими приборами через интернет и передачи дан..

2 280 ₸

Используемые источники:

  • http://mypractic.ru/urok-63-lokalnaya-set-ethernet-modul-enc28j60-ego-podklyuchenie-k-plate-arduino.html
  • https://habr.com/post/251403/
  • https://iarduino.kz/blog/connect-enc28j60-to-arduino.hml

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации