Ethernet shield для Arduino: подключение и веб-сервер

Ethernet shield для Arduino: подключение и веб-сервер

Плата расширения на чипе Wiznet W5100 подключает Arduino к локальной сети. Получение IP-адреса, проверка связи и сервер с показаниями датчика BMP280.

Назначение и характеристики

Ethernet shield — плата расширения, которая подключает Arduino к сети. Она построена на чипе Wiznet W5100 и дополнительно несёт разъём для карт micro-SD.

Плата Ethernet shield на чипе W5100
КонтроллерW5100
Напряжение питания5 В
Число соединенийдо 4
Скорость подключения10 и 100 Мбит/с
Карта памятиmicro-SD
Протокол обмена с ArduinoSPI
Габариты74х54х27 мм

Установка на Arduino

Плата выполнена в формате шилда и надевается поверх Arduino. И с чипом W5100, и с SD-картой контроллер общается по SPI. Вывод 10 выбирает W5100, вывод 4 — SD-карту; одновременно активным может быть только одно из двух устройств.

Ethernet shield, установленный на плату Arduino

MAC-адрес и получение IP

Сетевое взаимодействие программируют с помощью библиотеки Ethernet из стандартной поставки Arduino IDE; вместе с ней подключают SPI.h. Библиотеке нужно передать MAC-адрес — уникальный идентификатор сетевого устройства. На новых версиях шилда он указан на наклейке. Если наклейки нет, подойдёт любая комбинация, лишь бы в сети не оказалось устройства с таким же адресом.

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

В первом варианте скетч вызывает Ethernet.begin(mac) с одним только MAC-адресом. Если функция вернула 0, в последовательный порт на скорости 9600 выводится сообщение об ошибке, иначе — полученный адрес, который читается через Ethernet.localIP().

IP-адрес, полученный по DHCP, в мониторе порта

Во втором варианте адрес статический. В скетче задают массивы с IP, сервером DNS, шлюзом и маской подсети — значения подставляют под свою сеть — и вызывают Ethernet.begin(mac, ip, dns, gtway, subnet). Через секунду адрес выводится в монитор порта.

Статический IP-адрес платы в мониторе порта

Проверка связи

Чтобы убедиться, что плата доступна по сети, на компьютере открывают командную строку и выполняют ping <ip-адрес> -t, указав адрес, полученный Arduino. Если плата подключена и связь с компьютером по локальной сети есть, в окне командной строки начнут появляться ответы от неё.

Если адрес по DHCP не выдаётся, проверяют сетевой кабель и наличие DHCP-сервера в сети. Когда связи нет при статическом адресе, кроме кабеля проверяют IP, шлюз и маску. В обоих случаях причиной может быть совпадение MAC-адреса с другим устройством — тогда его меняют на другой.

Веб-сервер с датчиком BMP280

Практический пример — сервер, который по запросу отдаёт страницу с показаниями датчика. Для сборки нужны плата Arduino, Ethernet shield, макетная плата, датчик BMP280 и провода.

К библиотекам SPI и Ethernet в скетче добавляются Wire, Adafruit_Sensor и Adafruit_BMP280: датчик работает по шине I2C. Сервер создаётся на порту 80 — EthernetServer srv(80). В setup() настраивается сеть со статическим адресом, запускаются сервер и датчик, а IP выводится в последовательный порт.

В основном цикле программа ждёт клиента. Когда тот подключился, она посимвольно читает запрос и по пустой строке определяет его конец. В ответ уходят HTTP-заголовки — статус 200 OK, тип text/html, закрытие соединения и Refresh: 10 — и сама страница с температурой в градусах Цельсия и давлением. Давление датчик выдаёт в паскалях; для перевода в миллиметры ртутного столба значение делится на 133.3224. После отправки соединение закрывается.

При сборке собственного варианта стоит помнить про занятые шилдом линии: шина SPI и выводы 10 и 4 используются для обмена с W5100 и картой памяти.

Остаётся набрать IP-адрес сервера в браузере: откроется страница с температурой и атмосферным давлением, которая обновляется каждые 10 секунд.

← Все статьи