- Подключение микроконтроллера к локальной сети
- А зачем это нужно?
- Disclaimer
- The Plan
- Модель OSI
- Физический уровень
- Канальный уровень
- Сетевой уровень
- Транспортный уровень
- Прикладной уровень
- Подключение Arduino к сети интернет с помощью Ethernet модуля W5100
- Необходимые компоненты
- Ethernet модуль W5100
- Схема проекта
- Объяснение программы для Arduino
Подключение микроконтроллера к локальной сети
Локальная сеть — вещь прикольная и интересная. Место обитания каждого гика, включая его самого, опутано витой парой сверху донизу. Почему бы не использовать всё это на пользу дела?
Тем более, существует микросхема, позволяющая микроконтроллеру прекрасно чувствовать себя в сети Ethernet. А именно, ENC28J60, разработка вражеской компании Microchip. Об её использовании мы и поговорим.
Вообще-то, Ethernet — достаточно обширная тема. В один пост явно не поместится. Так что частей будет несколько.
Эта первая часть, и как обычно, — вводная и обзорная.
А зачем это нужно?
С точки зрения микроконтроллера, локальная сеть — лишь ещё один интерфейс «наружу». Зачем использовать именно его, а не простейший RS-232, скажем?
- Это удобно. Любая нормальная операционная система имеет нативную поддержку сети и API для работы с ней. Много стандартного софта умеет работать в сети и сможет обращаться к нашему девайсику.
- Девайс будет доступен как минимум с любого компа, подключенного к локальной сети, а максимум — вообще с любого компа, имеющего доступ в интернет. В том числе, по беспроводному соединению — к девайсу можно будет обращаться, например, с ноутбука, не привязывая себя к девайсу проводами.
- Девайс сам сможет выходить в интернет и получать различную информацию — от точного времени до прогноза погоды и последних новостей (хм, ну конечно если памяти у МК хватит на всё это).
- Это быстро. 10 мбит/с — более чем прилично для микроконтроллерного девайсика.
- Девайс больше не привязан к компу проводами — максимальные 100 м для витой пары не идут ни в какое сравнение с «классическими» интерфейсами.
- Это просто. Нет, правда! IP-стек мне кажется куда проще и логичнее чем, скажем, USB.
Конечно, есть и недостатки — для работы с сетью нужен контроллер с обвязкой. Что несколько повышает стоимость конечного девайса.
Disclaimer
Стоит сразу сказать что здесь подразумевается под Ethernet и что это есть на самом деле.
Ethernet — группа стандартов IEEE 802.3, описывающая различные технологии локальных сетей. В этих стандартах определён общий канальный уровень и набор технологий физического уровня (использующих для передачи данных оптоволокно, витую пару, коаксиал, с разными скоростями, etc.).
Здесь же под Ethernet будет подразумеваться конкретный стандарт IEEE 802.3i, который и поддерживается ENC28J60. В этом стандарте физический уровень — это 10BASE-T, 10 мбит/с по витой паре (Twisted pair).
The Plan
Вот, в общем виде, структурная схема девайса:
Здесь вроде-бы всё просто. ENC28J60 содержит в себе физический уровень (PHY) и канальный уровень (MAC) Ethernet. Микроконтроллеру остаётся только подтаскивать пакеты для отправки и забирать принятые через SPI.
В прошивке микроконтроллера реализован простенький IP-стек, позволяющий прикладной задаче общаться с задачами на других системах с помощью стандартных протоколов.
Более подробно обо всём этом будет в следующих частях.
Модель OSI
А что это за уровни, о которых я всё говорю? Если ты знаешь, эту часть можно пропустить.
Модель OSI — полезная вещь для понимания того, как работает сеть. Здесь о ней очень кратенько.
Данная модель разбивает коммуникационную систему на простые части, называемые уровнями. Каждый уровень обслуживает следующий (верхний) и обслуживается предыдущим (нижним) — вертикальные связи. Особенности функционирования каждого уровня скрыты от других уровней.
Взаимодействует две системы, соответственно есть и по два экземпляра каждого уровня. На каждом уровне используются свои протоколы (горизонтальные связи).
Всего есть 7 уровней модели OSI.
У нас будет только 5 уровней.
Физический уровень
У нас это 10BASE-T. Физический уровень реализован в ENC28J60. Сюда входит витая пара и всё, что нужно для передачи данных по ней (драйверы, трансформаторы).
Канальный уровень
Канальный уровень Ethenet (MAC) тоже реализован в ENC28J60. Канальный уровень отвечает за передачу Ethernet-фреймов между узлами локальной сети (адресацию, проверку контрольной суммы, разрешение коллизий, etc.).
Проще говоря, канальный уровень — это то, что позволяет посылать фреймы другим узлам локальной сети и принимать фреймы от них.
Также к канальному уровню относится протокол ARP, который служит для преобразовния IP-адресов в MAC-адреса.
Сетевой уровень
Сетевой уровень отвечает за передачу пакетов. У нас это IP. IP-пакет спокойно может пройти через несколько разных сетей с различными технологиями физического и канального уровня.
Проще говоря, сетевой уровень — это то, что позволяет отправлять пакеты любым узлам и принимать пакеты от любых узлов.
В нашем маленьком IP-стеке сетевой уровень будет очень простой. Скажем, отправка пакета будет сводиться к добавлению к блоку данных IP-заголовка и отрпавке в виде фрейма канального уровня на определённый MAC-адрес.
Транспортный уровень
Транспортный уровень отвечает за связь узлов. Скажем, приложение хочет отправит данные другому узлу. Транспортный уровень представляет эти данные в виде пакета сетевого уровня (или пакетов) и отправляет. Если используется протокол с установкой соединения, транспортный уровень занимается также установкой и контролем соединения. UDP и TCP — протоколы транспортного уровня.
Прикладной уровень
А тут может быть всё, что нам вздумается. Это то, ради чего всё затевалось. Та самая задача, обменивающаяся с внешним миром данными по какому-то своему или стандартному протоколу.
Вприницпе, пока это всё. В следующей части будет ближе к делу. Будем писать библиотеку для работы с ENC28J60. 🙂
- Подключение микроконтроллера к локальной сети: Теория
- Подключение микроконтроллера к локальной сети: работаем с ENC28J60
- Подключение микроконтроллера к локальной сети: UDP-сервер
- Подключение микроконтроллера к локальной сети: UDP-клиент
- Подключение микроконтроллера к локальной сети: Широковещательные сообщения и DHCP
- Подключение микроконтроллера к локальной сети: TCP-клиент
- Подключение микроконтроллера к локальной сети: HTTP и CGI
- Подключение микроконтроллера к локальной сети: TCP и HTTP (продолжение)
- Подключение микроконтроллера к локальной сети: HTTP и CGI (заключение)
- Подключение микроконтроллера к локальной сети: тесты производительности и краткое описание API стека
- Подключение микроконтроллера к локальной сети: Заключение
- Веб сервер на Tiny2313. Чисто ради лулзов
Подключение Arduino к сети интернет с помощью Ethernet модуля W5100
В настоящее время большинство устройств интернета вещей (Internet of Things, IoT) подключаются к сети Интернет с помощью технологии Wi-Fi. Однако в ряде случаев для стационарных устройств целесообразно подключение к сети Интернет с помощью Ethernet кабеля поскольку такое соединение более стабильно чем Wi-Fi и обеспечивает более высокую скорость передачи данных.
Ранее на нашем сайте мы уже рассматривали подключение платы Arduino к сети Интернет с помощью модулей ESP8266 (удаленный мониторинг здоровья пациента, управление сервомотором, удаленный мониторинг температуры и влажности, передача данных на веб-страницу и другие). В этой же статье мы рассмотрим подключение платы Arduino к сети интернет с помощью Ethernet модуля W5100. Таким образом, плата Arduino будет подключена к компьютеру с помощью локальной вычислительной сети (LAN). С помощью установленного интернет соединения мы будем управлять светодиодом, подключенным к плате Arduino.
Для реализации данного проекта необходимы базовые знания основ построения локальных вычислительных сетей, принципов работы хабов/роутеров, разъемов RJ45, IP и MAC адресации.
Необходимые компоненты
Ethernet модуль W5100
Ethernet модуль W5100 позволяет устанавливать полнофункциональное интернет соединение. С его помощью можно подключать плату Arduino к сети интернет без поддержки операционной системы компьютера. Модуль поддерживает различные протоколы стека TCP/IP: TCP, PPPoE, Ethernet, UDP, ICMP, IPv4 и другие. Модуль W5100 способен работать в дуплексном и полудуплексном режимах работы. Также он имеет поддержку ADSL соединений (до 4-х соединений одновременно).
Для подключения Ethernet модуля W5100 мы будем использовать библиотеку Arduino Ethernet library, которая поддерживает все версии плат Arduino: UNO, NANO, mega 1280, mega 2560 и другие. Функциональность Ethernet модуля W5100 такая же, как и у шилда (shield) Arduino Ethernet, а стоит модуль в два раза дешевле чем данный шилд.
Схема проекта
Схема подключения Ethernet модуля W5100 к плате Arduino Nano представлена на следующем рисунке.
В схеме необходимо подключить контакты 5V и GND платы Arduino Nano к контактам +5 и G Ethernet модуля соответственно – это обеспечит подачу питания на модуль.
Также необходимо подключить контакты 9, 10, 11, 12 и 13 платы Arduino к контактам to R, SS, MO, MI, CK Ethernet модуля соответственно – это обеспечит взаимодействие между платой Arduino и Ethernet модулем по интерфейсу SPI.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим библиотеку для работы по интерфейсу SPI.