В интернете много статей по подключению сетевого модуля ENC28J60 к различным платам arduino, но нет информации по подключению к плате arduino mega 2560 и сегодня мы более подробно рассмотрим это подключение. Для демонстрации работы модуля с ардуино мега 2560 смотрите видео.
Теперь немного познакомимся с самим сетевым модулем и его характеристиками
Блок схема ethernet модуля ENC28J60 :
Блок схема сетевого модуля ENC28J60
Основные характеристики ethernet модуля ENC28J60:
- чип ENC28J60 Ethernet, корпус SOP28
- SPI интерфейс
- 1×10 разъем подключения к ардуино
- встроенный разъем RJ45
- светодиод на питании
- питание: +3.3В
- рабочая частота 25МГц
Сетевой модуль ENC28J60
Контакты модуля ENC28J60 :
Где купить ENC28J60 (ссылки на продавцов) :
Настройка библиотеки для работы с модулем ENC28J60 :
Для начала работы с модулем ENC28J60 скачаем две библиотеки
Для подключения плат arduino uno, arduino nano, arduino pro mini и других , в библиотеках ничего менять не надо…
Для подключения сетевого модуля к arduino mega 2560, нам потребуется в папке библиотеки etherShield
открыть с помощью графического редактора файл enc28j60.c и в нем отредактировать строки выделенные красным цветом ( прописать пины для подключения к arduino mega)
файл библиотеки enc28j60.с
у нас должно получится так
отредактированный файл enc28j60.с
Старые значения пинов для обычных плат ардуино я не удалял а просто закомментировал .
Теперь в папке библиотеки ETHER_28J60
откроем файл ETHER_28J60.cpp и отредактируем строки выделенные красным цветом
а точнее изменим размер двоих буферов ( смотрите на фото ниже)
Отредактированный файл ETHER_28J60
Теперь сохраняем файлы и устанавливаем наши библиотеки в arduino IDE 1.0.5 ( с версией 1.6.2 библиотеки не работают)
Схема подключения модуля ENC28J60 к Arduino mega 2560 :
Подключение arduino mega 2560 к enc28j60
Подключаем по схеме:
- Arduino mega GND – enc28j60 pin GND
- Arduino mega +3.3v – enc28j60 pin VCC
- Arduino mega pin 50 – enc28j60 pin SO (MISO)
- Arduino mega pin 51 – enc28j60 pin SI (MOSI)
- Arduino mega pin 52 – enc28j60 pin SCK
- Arduino mega pin 53 – enc28j60 pin CS
После подключения платы, открываем тестовый скетч из примеров
и в открытом скетче
пропишем IP адрес нашего модуля в диапазоне адресов нашей подсети ( у меня диапазон IP адресов от 192.168.0.1 до 192.168.0.255 ) и я в строке указал IP адрес 192.168.0.9
Загружаем наш скетч в плату и отроем страничку браузера по адресу http://192.168.0.9
Отображение в браузере
Теперь немного изменим наш скетч и добавим отображение текста на русском языке “Привет мир” и добавим картинку.
Для правильного отображения текста на русском языке добавим в начале строку
а для отображения картинки добавим строку
Загрузим наш скетч и снова откроем браузер
Отображение в браузере
Как видим надпись на русском языке и картинка отображаются правильно.
Теперь подключим три скетодиода к пинам 11, 12, 13 на плате ардуино мега и загрузим мой. немного переработанный скетч, который позволит нам управлять светодиодами через веб браузер.
откроем браузер и поморгаем светодиодами как на видео в начале статьи
На этом все, удачных Вам проектов.
17 responses on “ Подключение ENC28J60 к arduino mega 2560 ”
У вас ошибка в описании подключения модуля…
На картинке все верно, а в тексте надо заменить RST на CS – у меня не работало, пока не присмотрелся внимательно к картинке 😉
Переподключил, все побежало 😉
Исправил, спасибо большое за подсказку!
А нет случайно под рукой ссылки на статью, где описывается как повесить на один SPI на меге два модуля, и настроить их стабильную работу??
Один – как раз этот ENC28J60, другой – радио модуль nRF24L01+.
Надо их вдвоем подключить, а SPI один )))
все дело в прописи СS пина, айпи один будет с мак адресом, это в теории а вот на практике как не знаю!
Говорят не в одном этом дело. Говорят что множество устройств на одной SPI шине проваливают по напряжению MISO и типа после отключения по CS пину, устройство все равно продолжает мешать общению по MISO/MOSI другому устройству… Так что надо искать хардварный метод решения проблемы…
А раскидывать CS пины на разные ноги пробовал. Даже в библиотеке менял номера выводов, к которым привязывается ENC, сервер работает, но жутко висит и быстро отваливается… так что вот так ))) Подтверждение того, что вместе они на одной шине не дружат.
что не так…версия правильная 1,0,5 буду признателен за помощь …
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:26:22: error: WProgram.h: No such file or directory
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘void ETHER_28J60::setup(uint8_t*, uint8_t*, uint16_t)’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:52: error: ‘delay’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘char* ETHER_28J60::serviceRequest()’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:112: error: ‘strncmp’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:120: error: ‘strncmp’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘void ETHER_28J60::print(int)’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:152: error: ‘itoa’ was not declared in this scope
при подключении меги все работает не долго! хотя на библиотеке EtherCard все работает устойчиво, проверил на UNO 24/7. Но возникла сложность, не смог ее настроить под мегу. может кто подскажет?
Вы размер буферов изменяли. Как написано в статье ….
тоже так сделал ..сначала работает, потом вообще отваливается даже роутер не видит
не советую покупать этот шилд редкостный шлак! Устройства зависает постоянно
А можно подключит шилд к другим pin (не к 50-53, а, например 38-41)? Просто к этим pin уже подключен другой модуль (rfid-rc522). Пробовал задавть в библиотеке вместо 50-53 pin свои, не заработало :/.
Изменил размер буфера, но тем не менее после превышения веса страницы 1500кб все просто зависает. Кто что может сказать?
Всем привет.
Как многие слышат, что нужно создать WEB сервер – сразу становится не по себе, всячески пытаются отойти от этой темы применив другие варианты управления и мониторинга своих устройств. Но ведь интернет и сеть есть уже почти в каждом устройстве. Так чем Ваш творение хуже?
Так что Если Вам интересно – идем дальше.
Не так страшен Волк, как его рисуют. Среди Нас много специалистов, но и много новичков. Учится никогда не поздно, я сам многому учусь, и многое познаю в практике. Надеюсь, эта статья поможет начинающим или освежит память начавшим.
За основу взят популярный модуль с контроллером ENC28j60.
А также я взял Arduino UNO(также можно Nano или Pro Mini). Все они работают на ATmega328.
В этой статье я покажу основы создания WEB сервера на самых простых библиотеках.
В данном случае:
#include «etherShield.h»
#include «ETHER_28J60.h»
Они просты для понимания – но и возможностей тоже меньше. Для обычного мониторинга и управления нагрузками – более чем достаточно.
Давайте рассмотрим, что нам нужно для этого.
Для начала идет инициализация библиотек.
Далее я указал пины для подключения модуля с контроллером 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), ниже в программе мы будем обращаться по этому имени.
Далее Нам необходима инициализация сетевого контроллера – применяем все установки адресов и портов.
Ну тут думаю самое сложное и не интересное закончилось …
Далее в основном цикле программы мы должны поставить условие которое будет проверять, есть ли запрос по нашему IP адресу. Если есть то отправить строчки нашей странички, а браузер уже придаст ей привычный нам вид. Давайте посмотрим пример:
Выделенная строка создает крупный тест на страничке, его легко редактировать и таких строчек можно добавлять по необходимости(но все упирается в количество 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 сервер. Для более продвинутых будут видео по другим библиотекам … более сложным.
В интернете много статей по подключению сетевого модуля ENC28J60 к различным платам arduino, но нет информации по подключению к плате arduino mega 2560 и сегодня мы более подробно рассмотрим это подключение. Для демонстрации работы модуля с ардуино мега 2560 смотрите видео.
Теперь немного познакомимся с самим сетевым модулем и его характеристиками
Блок схема ethernet модуля ENC28J60 :
Блок схема сетевого модуля ENC28J60
Основные характеристики ethernet модуля ENC28J60:
- чип ENC28J60 Ethernet, корпус SOP28
- SPI интерфейс
- 1×10 разъем подключения к ардуино
- встроенный разъем RJ45
- светодиод на питании
- питание: +3.3В
- рабочая частота 25МГц
Сетевой модуль ENC28J60
Контакты модуля ENC28J60 :
Где купить ENC28J60 (ссылки на продавцов) :
Настройка библиотеки для работы с модулем ENC28J60 :
Для начала работы с модулем ENC28J60 скачаем две библиотеки
Для подключения плат arduino uno, arduino nano, arduino pro mini и других , в библиотеках ничего менять не надо…
Для подключения сетевого модуля к arduino mega 2560, нам потребуется в папке библиотеки etherShield
открыть с помощью графического редактора файл enc28j60.c и в нем отредактировать строки выделенные красным цветом ( прописать пины для подключения к arduino mega)
файл библиотеки enc28j60.с
у нас должно получится так
отредактированный файл enc28j60.с
Старые значения пинов для обычных плат ардуино я не удалял а просто закомментировал .
Теперь в папке библиотеки ETHER_28J60
откроем файл ETHER_28J60.cpp и отредактируем строки выделенные красным цветом
а точнее изменим размер двоих буферов ( смотрите на фото ниже)
Отредактированный файл ETHER_28J60
Теперь сохраняем файлы и устанавливаем наши библиотеки в arduino IDE 1.0.5 ( с версией 1.6.2 библиотеки не работают)
Схема подключения модуля ENC28J60 к Arduino mega 2560 :
Подключение arduino mega 2560 к enc28j60
Подключаем по схеме:
- Arduino mega GND – enc28j60 pin GND
- Arduino mega +3.3v – enc28j60 pin VCC
- Arduino mega pin 50 – enc28j60 pin SO (MISO)
- Arduino mega pin 51 – enc28j60 pin SI (MOSI)
- Arduino mega pin 52 – enc28j60 pin SCK
- Arduino mega pin 53 – enc28j60 pin CS
После подключения платы, открываем тестовый скетч из примеров
и в открытом скетче
пропишем IP адрес нашего модуля в диапазоне адресов нашей подсети ( у меня диапазон IP адресов от 192.168.0.1 до 192.168.0.255 ) и я в строке указал IP адрес 192.168.0.9
Загружаем наш скетч в плату и отроем страничку браузера по адресу http://192.168.0.9
Отображение в браузере
Теперь немного изменим наш скетч и добавим отображение текста на русском языке “Привет мир” и добавим картинку.
Для правильного отображения текста на русском языке добавим в начале строку
а для отображения картинки добавим строку
Загрузим наш скетч и снова откроем браузер
Отображение в браузере
Как видим надпись на русском языке и картинка отображаются правильно.
Теперь подключим три скетодиода к пинам 11, 12, 13 на плате ардуино мега и загрузим мой. немного переработанный скетч, который позволит нам управлять светодиодами через веб браузер.
откроем браузер и поморгаем светодиодами как на видео в начале статьи
На этом все, удачных Вам проектов.
17 responses on “ Подключение ENC28J60 к arduino mega 2560 ”
У вас ошибка в описании подключения модуля…
На картинке все верно, а в тексте надо заменить RST на CS – у меня не работало, пока не присмотрелся внимательно к картинке 😉
Переподключил, все побежало 😉
Исправил, спасибо большое за подсказку!
А нет случайно под рукой ссылки на статью, где описывается как повесить на один SPI на меге два модуля, и настроить их стабильную работу??
Один – как раз этот ENC28J60, другой – радио модуль nRF24L01+.
Надо их вдвоем подключить, а SPI один )))
все дело в прописи СS пина, айпи один будет с мак адресом, это в теории а вот на практике как не знаю!
Говорят не в одном этом дело. Говорят что множество устройств на одной SPI шине проваливают по напряжению MISO и типа после отключения по CS пину, устройство все равно продолжает мешать общению по MISO/MOSI другому устройству… Так что надо искать хардварный метод решения проблемы…
А раскидывать CS пины на разные ноги пробовал. Даже в библиотеке менял номера выводов, к которым привязывается ENC, сервер работает, но жутко висит и быстро отваливается… так что вот так ))) Подтверждение того, что вместе они на одной шине не дружат.
что не так…версия правильная 1,0,5 буду признателен за помощь …
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:26:22: error: WProgram.h: No such file or directory
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘void ETHER_28J60::setup(uint8_t*, uint8_t*, uint16_t)’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:52: error: ‘delay’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘char* ETHER_28J60::serviceRequest()’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:112: error: ‘strncmp’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:120: error: ‘strncmp’ was not declared in this scope
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp: In member function ‘void ETHER_28J60::print(int)’:
C:UsersUserDocumentsArduinolibrariesETHER_28J60ETHER_28J60.cpp:152: error: ‘itoa’ was not declared in this scope
при подключении меги все работает не долго! хотя на библиотеке EtherCard все работает устойчиво, проверил на UNO 24/7. Но возникла сложность, не смог ее настроить под мегу. может кто подскажет?
Вы размер буферов изменяли. Как написано в статье ….
тоже так сделал ..сначала работает, потом вообще отваливается даже роутер не видит
не советую покупать этот шилд редкостный шлак! Устройства зависает постоянно
А можно подключит шилд к другим pin (не к 50-53, а, например 38-41)? Просто к этим pin уже подключен другой модуль (rfid-rc522). Пробовал задавть в библиотеке вместо 50-53 pin свои, не заработало :/.
Изменил размер буфера, но тем не менее после превышения веса страницы 1500кб все просто зависает. Кто что может сказать?