Пробудження ПК по мережі на Arduino та ENC28J60
Переважна більшість сучасних мережевих плат має функцію Wake On Lan, яка дозволяє реалізувати пробудження персонального комп'ютера через мережу.
Технічні вимоги:
Якщо використовується мережева плата, не вбудована в материнську плату, то необхідно буде підключити її через спеціальний роз'єм WOL до материнської плати.
Функція WOL включається у BIOS'і комп'ютера:
Невеликою проблемою може стати те, що на деяких комп'ютерах при втраті живлення 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:
Тут червоним виділено широкомовну MAC-адресу, зеленим - IP та UDP протокол, блакитним - MAC-адресу ПК, що повторюється 16 разів.