Пробудження ПК по мережі на Arduino та ENC28J60

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

Технічні вимоги:

Якщо використовується мережева плата, не вбудована в материнську плату, то необхідно буде підключити її через спеціальний роз'єм WOL до материнської плати.

Мережева карта

Функція WOL включається у BIOS'і комп'ютера:

Функція WOL

Невеликою проблемою може стати те, що на деяких комп'ютерах при втраті живлення WOL вимикається. Однак на сучасних материнських платах ця проблема може бути вирішена установкою параметра "пробуджуватися після відсутності живлення" в значення On у BIOS'і:

Пробуджуватися після відсутності живлення

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

Для того, щоб пробудити комп'ютер через LAN, необхідно по мережі надіслати певну послідовність байтів, так званий магічний пакет. Пакет являє собою 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:

Wireshark

Тут червоним виділено широкомовну MAC-адресу, зеленим - IP та UDP протокол, блакитним - MAC-адресу ПК, що повторюється 16 разів.

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

Top