• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом ESP8266 + Arduino IDE = Wake On LAN (WOL) by WiFi

RjLexx

New member
Всем привет. Возникла потребность включать комп через ESP. Сам комп подключен к WiFi роутеру по шнурку. На просторах интернета что-то не нашлось примерчиков для Arduino IDE. Решил набросать свой. Выкладываю в общее пользование, вдруг кому-то пригодится. Данный пример позволяет включить комп отправив на ESP запрос в виде http://[IP ESP]/wol.
У меня нет внешнего 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();
}
 
Последнее редактирование:

DeGlucker

New member
Попробовал этот скетч на ESP8266-12.
Зависает на while (WiFi.status() != WL_CONNECTED), (status = 6).
Cвой скетч с библиотекой ESP8266WiFiMulti коннектится нормально,
в чем может быть проблема ?

Через некоторое время статус сменяется на 1 (WL_NO_SSID_AVAIL),
затем опять на 6 (WL_DISCONNECTED). В скетче #define SSID "TestServer"
В списке сетей сервера нет.

Когда статус = 1 в списке сетей появляется ThingDev-2D97, но подключиться к нему невозможно.
На другом таком-же модуле картина аналогичная, только в списке сетей не появляетсе и статус всегда 1. Сплошные глюки, хотя в режиме WiFiMult и AP и STA работают нормально.
 
Последнее редактирование:

AndrF

Active member
Не понятно, а причем тут Blynk? Ведь в коде он совсем не используется.

Хотя с ним все было бы очень просто реализовать...
 

AndrF

Active member
Этот я и не пробовал. Но с Blynk - работал. Потому и говорю что там проще...
 
. Данный пример позволяет включить комп отправив на ESP запрос в виде http://[IP ESP]/wol.
У меня нет внешнего IP и данный пример вместе с blynk, позволил мне включать комп даже вне домашней сети.
Добрый день, а скетч с Blynk можно посмотреть? В твоем коде же нет ничего про Blynk ;)
 

Linux

New member
Так же поделюсь своим обновлённым скетчем Wake-On-Line на ESP-01, 3 дня назад закончил его.
 

Вложения

Jon

Member
не компилируется.
//Страница для обновления OTA прошивки (по Воздуху)
httpUpdater.setup(&server, OTAPATH, www_login, www_pswd);
 

Сергей_Ф

Moderator
Команда форума
Опередил.
И еще вопрос - а наку# эти все навороты нужны чтобы просто пощелкать релюшкой?
Китайцы продают толкатель, так что можно даже в комп не лазить. Для совсем ленивых
 

Сергей_Ф

Moderator
Команда форума
не компилируется.
//Страница для обновления OTA прошивки (по Воздуху)
httpUpdater.setup(&server, OTAPATH, www_login, www_pswd);
Вы к кому обращаетесь? По какому вопросу? У автора топика такой строчки нет!! Так что дальнейшее обсуждение будет считаться ОФФТОПОМ.
В любом случае, чтобы получить ответ надо как минимум показать ошибку, а не строчки кода. Успехов.
 

Jon

Member
Вы к кому обращаетесь? По какому вопросу? У автора топика такой строчки нет!! Так что дальнейшее обсуждение будет считаться ОФФТОПОМ.
В любом случае, чтобы получить ответ надо как минимум показать ошибку, а не строчки кода. Успехов.
Речь идет о скетче из этого сообщения:
Так же поделюсь своим обновлённым скетчем Wake-On-Line на ESP-01, 3 дня назад закончил его.
//Страница для обновления OTA прошивки (по Воздуху)
httpUpdater.setup(&server, OTAPATH, www_login, www_pswd);
а вот и ошибка при компиляции этой строчки:
no matching function for call to 'esp8266httpupdateserver::ESP8266HTTPUpdateServerTemplate<WiFiServer>::setup(ESP8266WebServer*, const char [10], const char*&, const char*&)'
 
Сверху Снизу