Skip to content

Wake On LAN magic packets generator library for ESP8266 & ESP32 boards

License

Notifications You must be signed in to change notification settings

a7md0/WakeOnLan

Repository files navigation

WakeOnLan Build Status PlatformIO Registry arduino-library-badge

This Library provides an easy way to generate/send magic packets from an ESP8266 or ESP32 to any MAC Address. Additionally, it supports the "SecureOn" feature from some motherboard manufacturers. Finally, it also supports using any port number (instead of the default port 9.)

This library can be used in any environment that the IPAddress, WiFiUDP & delay classes are available.

Install

You can install this library in the Arduino IDE by navigating to Tools -> Library Manager and search for this library's name. Alternatively, download this repository as zip file, then in the IDE navigate to Sketch -> Include library -> Add .ZIP library

To install the library in the PlatformIO IDE, use the library name like so: lib_deps = WakeOnLan OR copy the repository link and add to the 'lib_deps' variable: lib_deps = https://github.com/a7md0/WakeOnLan.git

Include and initialize WiFiUDP

#include <WiFiUdp.h>
WiFiUDP UDP;

Include and initialize WakeOnLan class

#include <WakeOnLan.h>
WakeOnLan WOL(UDP); // Pass WiFiUDP class

Add this line in void setup() (optional)

WOL.setRepeat(3, 100); // Repeat the packet three times with 100ms delay between

After connecting to WiFi successfully, Calculate and set the broadcast address (optional)

WOL.calculateBroadcastAddress(WiFi.localIP(), WiFi.subnetMask());

Manually set the broadcast address (optional)

WOL.setBroadcastAddress("192.168.1.255");

Usage

Send WOL from char array MAC Address

Set MAC address in variable

const char *MACAddress = "01:23:45:67:89:AB";
Send WOL UDP packet (Using the default port - 9)

WOL.sendMagicPacket(MACAddress);

Send WOL UDP packet (Use port 7)

WOL.sendMagicPacket(MACAddress, 7);

Set MAC address and SecureOn variables

const char *MACAddress = "01:23:45:67:89:AB";
const char *secureOn = "FE:DC:BA:98:76:54";
Send WOL UDP packet with password (Using the default port - 9)

WOL.sendSecureMagicPacket(MACAddress, secureOn);

Send WOL UDP packet with password (Use port 7)

WOL.sendSecureMagicPacket(MACAddress, secureOn, 7);

Send WOL from byte array MAC Address

Set MAC address in variable

uint8_t MAC[6] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB}; // 01:23:45:67:89:AB
Send WOL UDP packet (Using the default port - 9)

WOL.sendMagicPacket(MAC, sizeof(MAC));

Send WOL UDP packet (Use port 7)

WOL.sendMagicPacket(MAC, sizeof(MAC), 7);

Set MAC address and SecureOn in variable

uint8_t MAC[6] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB}; // 01:23:45:67:89:AB
uint8_t SECURE_ON[6] = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54}; // FE:DC:BA:98:76:54
Send WOL UDP packet with password (By default port 9)

WOL.sendSecureMagicPacket(MAC, sizeof(MAC), SECURE_ON, sizeof(SECURE_ON));

Send WOL UDP packet with password (Use port 7)

WOL.sendSecureMagicPacket(MAC, sizeof(MAC), SECURE_ON, sizeof(SECURE_ON), 7);

Generate magic packet

Generate

size_t magicPacketSize = 6 + (6 * 16);  // FF*6 + MAC*16
uint8_t* magicPacket = new uint8_t[magicPacketSize]; // Magic packet will be stored in this variable

uint8_t MAC[6] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB}; // 01:23:45:67:89:AB

WOL.generateMagicPacket(magicPacket, magicPacketSize, pMacAddress, sizeof(MAC));

Generate with "SecureOn"

size_t magicPacketSize = 6 + (6 * 16) + 6;  // FF*6 + MAC*16 + SecureOn
uint8_t* magicPacket = new uint8_t[magicPacketSize]; // Magic packet will be stored in this variable

uint8_t MAC[6] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB}; // MAC Address = 01:23:45:67:89:AB
uint8_t SECURE_ON[6] = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54}; // SecureOn = FE:DC:BA:98:76:54

WOL.generateMagicPacket(magicPacket, magicPacketSize, MAC, sizeof(MAC), SECURE_ON, sizeof(SECURE_ON));