• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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*&)'
 
Сверху Снизу