Пробуждение ПК по сети на Arduino

Как правильно реализовать пробуждение персонального компьютера через сеть на Arduino, используя функцию Wake On Lan и отправляя магический пакет?

Подавляющее большинство современных сетевых плат имеют функцию Wake On Lan, которая позволяет реализовать пробуждение персонального компьютера через сеть.

Технические требования:

Если используется сетевая плата не встроенная в материнку, то необходимо будет подключить ее через специальный разъем WOL, к материнской плате.

Пробуждение ПК по сети на Arduino

Функция WOL включается в BOIS’е компьютера:

Пробуждение ПК по сети на Arduino

Небольшой проблемой может стать то, что на некоторых компьютерах при потери питания, WOL отключается. Но на современных материнских платах, данная проблема может быть решена установкой параметра «пробуждаться после пропадания питания» в значение On в BOIS’е:.

Пробуждение ПК по сети на Arduino

Магический Пакет (Magic Packet)

Для того, чтобы пробудить компьютер через LAN, необходимо по сети послать определенную последовательность байтов, т.н. Magic packet. Пакет представляет собой 6 байт со значением FF: (FF:FF:FF:FF:FF:FF), а далее идет MAC-адрес сетевой карты ПК, повторяющийся 16 раз подряд.

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

Arduino

Для посылки магического пакета используется метод sendWol(). В качестве параметра указывается MAC-адрес компьютера, который необходимо «пробудить»:
static byte targetmac[] = {0x00,0x1A,0x4B,0x38,0x0F,0x5C};

ether.sendWol (targetmac);

Полный пример работы с WOL можно найти в репозитарии GiHub.

Используя ПО анализатор сети (к примеру Wireshark) вы можете мониторить корректность отсылки пакетов от Arduino:

Пробуждение ПК по сети на Arduino

Здесь красным выделен широковещательный MAC-адрес, зеленым — IP и UDP протокол, голубым — MAC-адрес ПК, повторяющийся 16 раз.

Оригинал статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *