Ethernet shield enc28j60 подключение
Сегодня мы более подробно рассмотрим шилд (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
Наиболее популярные Ethernet модули для ардуино сегодня выпускаются на основе микросхемы wiznet w5100, которая способна поддерживать обмен данными с постоянной скоростью в 100 Мбит/сек. Для устройств на базе w5100 написаны готовые библиотеки, данная архитектура является простой и идеально подойдет начинающим любителям электроники, которые могут использовать как стартовую площадку для последующих проектов.
Ключевые характеристики модулей на базе W5100:
Варианты модулей на базе других микросхем:
- Модуль на базе Wiznet W5500. Имеет меньшие размеры, меньше греется, имеет большую мощность.
- Модуль на базе enc28j60. Это гораздо более бюджетный вариант, дешевле W5100, но и потенциальных проблем с ним может возникнуть больше.
Шилды Ethernet Shield для Arduino Uno или Nano
Наиболее удобным способом работы с W5100 является использование готовых шилдов Ethernet Shield для Arduino Uno или Nano. На таких модулях уже выполнены все необходимые обвязки, шилд просто вставляется в соответствующие разъемы платы и вам остается только загрузить скетч. Естественно, что при желании к плате могут быть подключены и другие устройства.
Подключение платы расширения происходит через соединение 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
Модуль точно так же имеет разъем 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, то вам нужно будет понимать следующие базовые понятия, имеющие отношение к этой технологии:
Как подключить модуль Ethernet к Arduino
Распиновка шилда с описанием элементов платы для Arduino Uno представлена на следующем рисунке.
После подключения внешнего модуля к арудино нужно будет подключить его к уже существующей сетевой инфраструктуре через витую пару с 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. На рисунке показано, где именно это можно сделать.
Выводы
В данной статье была рассмотрена возможность управления платой Arduino через интернет посредством Etherent модуля на базе w5100. Как мы убедились, подключение модуля и программирование скетча не представляет существенной сложности. Главное, это правильно определиться со структурой проекта, определить, что будет являться сервером, а что клиентом, как будет осуществлено подключение к интернету.
Зачастую микроконтроллерам требуется доступ к Интернету, локальной сети. Это может пригодится, например, для построения умного дома, создания метеостанций «Народного мониторинга», установки простого веб-сервера и многого другого. Всё это может обеспечить Ethernet-модуль ENC28J60.
В этой статье я бы хотел рассказать о подключении ENC28J60 к Arduino. Этот модуль позволяет Arduino выходить в Интернет либо в локальную сеть.
Для реализации проекта из этой статьи нам потребуются следующие компоненты:
Краткий обзор 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.
Подключение в Arduino IDE
Среди стандартных библиотек Arduino IDE нет библиотеки для нашего модуля, поэтому будем использовать библиотеку EtherCard, которая поддерживает следующие модели Arduino: UNO, Mega, Leonardo, Nano, Pro Mini, LilyPad, Duemilanove и прочие, основанные на AVR микроконтроллерах. Платы с ARM архитектурой, такие как 101, Zero, Due ей не поддерживаются.
Попробуем вывести в последовательный порт компьютера IP адрес устройства, маску подсети, шлюз по умолчанию и адрес DNS сервера.
После сборки схемы и подключения платы к компьютеру загрузим следующий скетч в Arduino:
Всем привет.
Как многие слышат, что нужно создать WEB сервер – сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваш творение хуже?
Так что Если Вам интересно – идем дальше.
Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим.
За основу взят популярный модуль с контроллером ENC28j60.
Для начала идет инициализация библиотек.
Далее я указал пины для подключения модуля с контроллером 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), ниже в программе мы будем обращаться по этому имени.
Далее Нам необходима инициализация сетевого контроллера – применяем все установки адресов и портов.
Ну тут думаю самое сложное и не интересное закончилось …
Выделенная строка создает крупный тест на страничке, его легко редактировать и таких строчек можно добавлять по необходимости(но все упирается в количество Flash памяти контроллера).
Команда ethernet.respond(); отправляет все наши строчки сайта на браузер с которого сделали запрос на сайт(в данном случае 192.168.0.100).
Но если Вы заметили то названия у этого сайта нет(просто IP адрес).Не волнуйтесь, это поправимо, если добавить одну строчку:
Вот… теперь уже лучше.
Далее добавляя, строчки мы будем добавлять объекты на страничке которые помогут нам отображать информацию или управлять нею.
Начнем с ссылки, при нажатии на которую, мы отправим на контроллер запрос с тестом (который нужен будет нам позже для обработки).
Красной стрелкой название кнопки, а синей мы указываем на текст в запросе при нажатии на ссылку. Значит, если Мы нажмем на ссылку «Стоп» то отправим запрос на наш сервер: «192.168.0.100/stop» — где «stop» будет текст запроса.
Далее рассмотрим такой же вариант только с кнопкой:
Добавились атрибуты необходимые для отображения браузером кнопки. При нажатии, на которую, уже отправится запрос с тестом «start». Думаю здесь все понятно.
Для любителей красоты можно добавить параметры и создать интересную кнопку:
Для следующего варианта нам понадобятся переменные, добавим их в начале скетча:
Сейчас отобразим на Нашей страничке таблицу:
Для обозначения объекта таблица используется атрибут table. Далее я красным подчеркнул ( tr ) внешние границы таблицы и синим — внутренние рамочки. Обратите внимание что они попарно, а в центре пары Ваше значение или переменная(к примеру ves1 или ves2). Так же вы можете заметить что пара создает жирный текст а обычный текст. В конце объект таблица завершается /table.
Думаю с отображением объектов на странице достаточно для создания не сложных WEB страниц(более подробно и наглядно вы можете увидеть ниже в видео уроках для начинающих).
Но как же обработать запрос – для этого немного модифицируем наше условие с самого начала, добавив при этом переменную для строки. Так же создадим для примера два условия обработки запросов: 1-е это пустой запрос (192.168.0.100); 2-е это запрос с текстом «start»(192.168.0.100/start)
В зависимости от поданного запроса на сервер, на браузере сайт будет отображаться согласно указанным строкам:
Вот так можно делать динамические станицы, которые будут меняться, и отображать различную информацию в зависимости от параметров переменных или запросов от ссылок и кнопок.
Более детально и наглядно можно увидеть все, выше упомянутое, в Видео уроках для начинающих:
Старался изложить материал доступными словами не используя сложные термины.
Надеюсь, эта статья поможет многим начинающим создать свой web сервер. Для более продвинутых будут видео по другим библиотекам … более сложным.
Читайте также: