Internet for Arduino

Arduino — это платформа, основными компонентами которой являются простая плата ввода-вывода и среда разработки на языке Processing/Wiring. Ядром платы выступает микроконтроллер ATmega.

Существует несколько версий этой платы. Они все отличаются размером, количеством пинов, памяти и совместимости с различными шилдами (платами расширения).

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

Однако сейчас появились версии Arduino, которые изначально имеют build-in Ethernet-разъем или Wi-Fi, Bluetooth чипы.

Оборудование

Чтобы вывести нашу плату в сеть Интернет, будем использовать:

Arduino Uno
Ethernet shield 28j60
ZyXEL Keenetic 4g II
Hame A3

У нас было два разных роутера: ZyXEL и Hame.

Первый роутер использовался как обычный рядовой для расшаривания интернета в лаборатории для всех гостей по Wi-Fi. Он умеет работать как с модемом, так и с обычным кабелем.

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

Второй роутер — Hame — проще, но сложнее в настройке. Он также умеет работать с модемом и кабелем и раздавать Wi-Fi.

Подключение Ethernet shield

Подключение пинов на Ethernet Shield
Подключение пинов на Arduino Uno

Чтобы подключить Arduino к сети Интернет, надо сначала подключить его к ethernet shield-у. Мы приобрели Ethernet Shield на базе чипа ENC28J60.

Сам шилд работает по шине SPI.

SPI, или Serial Peripheral Interface, представляет собой интерфейс, работающий в полном дуплексе. С его помощью можно управлять несколькими устройствами. Эта шина очень похожа на I2C, но для её подключения требуется больше проводов: четыре вместо двух у I2C. Однако, это всё же меньше, чем для параллельных интерфейсов. Кроме этого, пропускная способность SPI выше, чем у I2C.

Распиновка на разных линейках плат Arduino разная. Поэтому схема подключения такая:

Пины Arduino Uno |Пины Arduino Mega |Пины Ethernet shield |Описание
GND GND GND Земля
3,3V 3,3V VCC Питание
10 53 CS Chip Select
11 51 SI Master Output
12 50 SO Master Input
13 52 SCK Serial Clock

В SPI используются четыре линии:

  • MOSI — выход ведущего, вход ведомого (Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
  • MISO — вход ведущего, выход ведомого (Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCLK — последовательный тактовый сигнал (Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS — выбор микросхемы, выбор ведомого (Chip Select, Slave Select).

Но имена могут быть разными на разных устройствах:

  • MOSI: SIMO, SDO, DO, DOUT, SI, MTSR;
  • MISO: SOMI, SDI, DI, DIN, SO, MRST;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.

На Arduino используются такие названия: MOSI, MISO, SCK, SS.

Библиотека для чипа ENC28J60

Чтобы подключить Arduino к Интернетам с помощью шилда используют штатную библиотеку Ethernet. Но эмпирическим путем и исследованием на многих форумах стало понятно, что не все типы чипов поддерживаются этой библиотекой. А именно библиотека Ethernet хорошо работает с чипом W5100 от Wiznet. 
 У нас же на шилде стоит другой чип — ENC28J60, и он не совсем совместим с этой библиотекой.

К счастью, эта проблема решается. Есть дополнительные другие библиотеки, которые помогают работать с шилдом. Это:

"etherShield" 
"ETHER_28J60"

Их можно скачать тут. Или можно найти их здесь. Также они лежат и в github репозитории вместе с примерами кода. Стоит отметить, что эти две библиотеки используются в связке.

ZyXEL

Для того, чтобы Ethernet shield смог помогать Arduino общаться через сеть Интернет с внешним миром, надо подключить его к роутеру, который это обеспечивает.

Начнем с ZyXel. Подключаем Ethernet shield с Arduino к роутеру. Пишем код и тестируем соединение.

Eshield & ZyXEL

В библиотеке для этого чипа есть примеры, которыми можно проверить работоспособность шилда и роутера тоже (на работу DHCP). По умолчанию для домашней сети ZyXel настроен как DHCP-сервер, поэтому с этим проблем не должно быть.

Для примера можно попробовать управлять лампочкой со страницы в браузере.

Но нужно убедиться, что компьютер, с которого будем заходить на страницу, создаваемую Arduino, и сама Arduino находятся в одной подсети.

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

Схема получается такая:

Arduino & Ethernet shield

Hame

Чтобы проверить работоспособность Hame с Ethernet shiled-ом для Arduino будем использовать те же библиотеки и тот же пример. Включаем Ethernet-кабель в шилд и в роутер:

Arduino & Hame

Но одну вещь надо проверить в настройках своего роутера — это настроен ли он в режим DHCP-сервера. Проверить это можно во вкладке Internet в пункте Lan Networking. Надо проверить пункт DHCP Type. Он должен быть установлен в тип Server. Такие мелочи я имела в виду, когда писала, что этот маленький роутер сложнее в настройке.

Лампочку на 6 пине ещё не отключаем, потому что будем снова ею управлять со страницы браузера удаленного клиента.

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

Единственной разницей в коде для Arduino будет IP-адрес подсети, в которой мы запускаем Arduino. При условии, если есть желание запустить оба примера одновременно и в таком ключе.

Код можно посмотреть на github.


Originally published at wiki.perexy.com on July 9, 2015.