раздел
«Использование SD-карты» главы 6).
Рис. 12.1. Плата расширения Ethernet
На официальных платах используется микросхема W5100, можно найти
более дешевые платы расширения Ethernet на наборе микросхем ENC28J60.
Но эти более дешевые платы не совместимы с библиотекой Ethernet, и
лучше избегать их, если только вы не ограничены во времени или в
средствах.
Arduino Ethernet/EtherTen
Альтернативой использованию отдельной платы расширения является
покупка Arduino со встроенным адаптером Ethernet. Официальной считается
модель Arduino Ethernet, однако в продаже имеется очень неплохая и
совместимая с Uno плата EtherTen, производимая компанией Freetronics
(
www.freetronics.com
) (рис. 12.2).
Рис. 12.2. Плата EtherTen
Комбинированные платы, содержащие все необходимое, наиболее
предпочтительны для сетевых проектов на основе Arduino. Платы Arduino
Ethernet поддерживают технологию питания по линиям Ethernet (Power over
Ethernet, PoE) через отдельный инжектор PoE, что позволяет уменьшить
количество проводов, идущих к плате Arduino, до единственного кабеля
Ethernet. Платы EtherTen выпускаются уже настроенными на питание с
использованием
технологии
PoE.
Более
полную
информацию
об
использовании технологии PoE в платах EtherTen можно найти по адресу
www.doctormonk.com/2012/01/power-over-ethernet-poe.html
.
Arduino и WiFi
Главная проблема подключения к Интернету через Ethernet заключается в
необходимости прокладки кабеля. Если вы хотите подключить Arduino к
Интернету или сети без использования проводов, то вам потребуется плата
расширения WiFi (рис. 12.3). Эти платы стоят довольно дорого, но есть более
дешевые альтернативы сторонних производителей, такие как Sparkfun WiFly
(
https://www.sparkfun.com/products/9954
).
Рис. 12.3. Плата Arduino WiFi
Библиотека Ethernet
Библиотека Ethernet претерпела существенные изменения с момента
выпуска в 2011 году версии Arduino 1.0. Она не только позволяет плате
Arduino с адаптером Ethernet действовать в роли веб-сервера или веб-
клиента (возможность посылать запросы, подобно браузерам), но и реализует
дополнительные
возможности,
такие
как
поддержка
протокола
динамической конфигурации сетевого узла (Dynamic Host Configuration
Protocol, DHCP), автоматически присваивающего плате IP-адрес.
ПРИМЕЧАНИЕ
Превосходное описание библиотеки Ethernet можно найти в официальной
документации Arduino:
http://arduino.cc/en/reference/ethernet10
.
Создание соединения
На первом этапе, прежде чем приступить к взаимодействиям по сети,
необходимо установить соединение с сетью. Эту задачу решает функция
Ethernet.begin(). Она позволяет вручную указать все параметры
соединения с использованием следующего синтаксиса:
Ethernet.begin(mac, ip, dns, gateway, subnet)
Рассмотрим каждый из этих параметров:
• Mac — MAC-адрес сетевой карты (я расскажу о нем чуть позже);
• Ip — IP-адрес платы (можно выбрать любой допустимый для вашей сети);
• Dns — IP-адрес сервера доменных имен (Domain Name Server, DNS);
• Gateway — IP-адрес шлюза для выхода в Интернет (ваш домашний
концентратор);
• Subnet — маска подсети.
Этот синтаксис кажется немного пугающим тем, кто не имеет опыта
настройки параметров подключения к сети вручную. К счастью, все
параметры, кроме
mac, являются необязательными, и в 90% случаев вам
придется указывать только параметры
mac и ip или, весьма вероятно, только
mac. Все остальные параметры будут настроены автоматически.
MAC-адрес, или адрес доступа к среде (Media Access Control), — это
уникальный идентификатор сетевого интерфейса. Иными словами, это адрес
платы расширения Ethernet или чего-то другого, предоставляющего сетевой
интерфейс в распоряжение Arduino. Этот адрес должен быть уникальным
только для вашей сети. Его обычно можно найти на наклейке с обратной
стороны платы Ethernet или WiFi (рис. 12.4) или на упаковке. Если вы
пользуетесь старой платой, не имеющей MAC-адреса, то можете просто
создать свой адрес. Но не используйте в своей сети один и тот же адрес
дважды.
Можно создать соединение с сетью с применением DHCP и получить
динамический IP-адрес, как показано далее:
#include
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
void setup()
{
Ethernet.begin(mac);
}
Рис. 12.4. Наклейка с MAC-адресом на плате WiFi
Если потребуется присвоить плате фиксированный IP-адрес, что
желательно, когда плата Arduino действует в роли веб-сервера, используйте
примерно такой код:
#include
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 1, 200 };
void setup()
{
Ethernet.begin(mac, ip);
}
IP-адрес в параметре
ip должен быть допустимым для вашей сети. Если
вызвать функцию
Ethernet.begin без параметра с IP-адресом, она по-
пытается получить его с использованием DHCP и вернет 1, если соединение
было установлено и динамический IP-адрес успешно получен, в противном
случае вернет 0. Можно написать тестовый скетч, который будет
устанавливать соединение и вызывать функцию
localIP для получения IP-
адреса, присвоенного Arduino. Следующий пример выполняет такую
проверку и выводит сообщение с результатами в монитор последовательного
порта.
Это
полноценный
скетч,
который
вы
можете
опробовать
самостоятельно. Но не забудьте заменить в коде MAC-адрес на указанный на
вашей плате:
// sketch_12_01_dhcp
#include
#include
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
void setup()
{
Serial.begin(9600);
while (!Serial){}; // для совместимости с Leonardo
if (Ethernet.begin(mac))
{
Serial.println(Ethernet.localIP());
}
else
{
Serial.println("Could not connect to network");
}
}
void loop()
{
}
Настройка веб-сервера
Проект «Физический веб-сервер», описанный далее в этой главе,
иллюстрирует организацию скетча, реализующего веб-сервер. А в этом
Do'stlaringiz bilan baham: |