Всем привет. Возникла потребность включать комп через ESP. Сам комп подключен к WiFi роутеру по шнурку. На просторах интернета что-то не нашлось примерчиков для Arduino IDE. Решил набросать свой. Выкладываю в общее пользование, вдруг кому-то пригодится. Данный пример позволяет включить комп отправив на ESP запрос в виде http://[IP ESP]/wol.
У меня нет внешнего IP и данный пример вместе с blynk, позволил мне включать комп даже вне домашней сети.
У меня нет внешнего IP и данный пример вместе с blynk, позволил мне включать комп даже вне домашней сети.
Код:
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#define SSID "YOU_WIFI"
#define PASSWORD "your_password"
// MAC адрес компа, который нужно разбудить
const byte targetMacAddress[] = { 0xa1, 0xb2, 0xd3, 0xe4, 0xf5, 0x67 };
// IP адрес компа, который нужно разбудить. Также можно указать широковещательный адрес сети, указав в 4м сегменте 255
const byte targetIPAddress[] = { 192, 168, 1, 255 };
// WOL порт. Обычно 7 или 9
const int targetWOLPort = 9;
const unsigned int localUdpPort = 12345;
WiFiServer server(80);
WiFiUDP Udp;
void setup() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (client) {
// Wait until the client sends some data
while(!client.available()){
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
String response = "";
client.flush();
if (req.indexOf("/wol") != -1) {
sendWOL();
response += "ok";
}
client.print(formatResponse(response));
delay(1);
}
}
String formatResponse(String body) {
// Prepare the response
String s = F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n");
s += body;
s += F("</html>\n");
return s;
}
void sendWOL() {
const int magicPacketLength = 102;
byte magicPacket[magicPacketLength] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
for (int ix=6; ix < magicPacketLength; ix++)
magicPacket[ix] = targetMacAddress[ix % 6];
Udp.begin(localUdpPort);
Udp.beginPacket(targetIPAddress, targetWOLPort);
Udp.write(magicPacket, magicPacketLength);
Udp.endPacket();
Udp.stop();
}
Последнее редактирование: