Outils pour utilisateurs

Outils du site


module_wakeonlan

Table des matières

WakeOnLan

WakeOnLan est un standard réseau qui permet à un ordinateur éteint d'être démarré à distance. Résumé rapide:

  • Faire du WakeOnLan en réseau local est assez facile, il suffit a) que la carte-mère+carte réseau de l'ordinateur qui doit être démarré supporte cette fonctionnalité et b) d'envoyer à l'ordinateur à démarrer un "Magic Packet" ; il y a pas mal de tutoriels là dessus (sous Windows, voir le freeware WakeMeOnLan.exe). Note: il faut connaître l'adresse MAC de l'ordinateur à démarrer (et non pas l'adresse IP, car ces paquets sont envoyés en broadcast sur tout le réseau local)

  • WakeOnLan "à distance" (parfois appelé "WakeOnWan"), exemple: démarrer un ordi gentillement à la maison, depuis l'extérieur.

Ce 2ème point est plus difficile car certains routeurs filtrent ce Magic Packet lorsqu'il vient de l'extérieur. C'est le cas des Livebox Orange. Il y a d'innombrables pages de forums à ce sujet sur les forums Orange, tous les réglages de NAT etc. ont été testé, et ça ne fonctionne pas.

Le but de cette page est de fournir une solution avec un module ESP8266 à 5€.

How to do it

  • Se procurer un ESP8266 à 5€ de ce genre là

  • Installer Arduino IDE et ajouter dans le menu Préférences > Additional Boards Manager URL l'URL suivante: http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Uploader le code ci-dessous sur le module ESP8266, en ayant choisi au préalable menu Tools > Board: Generic ESP8266 Module.

  • Brancher le module et le laisser tourner 24/24

  • Régler sur la Livebox le NAT: port 5555 de l'extérieur => port 80 de l'ESP8266 (voir "Baux DHCP statiques" sur l'interface admin de la Livebox)

  • Aller depuis n'importe quel ordi sur http://11.22.33.44:5555/wol, ça doit allumer l'ordi en question :)

(Remplacer 11.22.33.44 par l'adresse IP de votre Livebox, utiliser un service de DynDNS si besoin)

Code

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h> 
#include <ESP8266HTTPClient.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
#include <WiFiUDP.h>

ESP8266WiFiMulti wifiMulti;
ESP8266WebServer server(80); 
void handleRoot();  
void handleWol();
void handleNotFound();
WiFiClient client;
HTTPClient http;
WiFiUDP udp;

void setup(void) {
  Serial.begin(9600);      
  delay(10);
  Serial.println('\n');
  wifiMulti.addAP("Livebox-ABCD", "<MOT DE PASSE WIFI>");           // METTRE ICI LE MOT DE PASSE WIFI DE VOTRE BOX
  Serial.println("Connecting ...");
  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) { 
    delay(250);
    Serial.print('.');
  }
  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());        
  if (MDNS.begin("esp8266")) {           
    Serial.println("mDNS responder started");
  } else {
    Serial.println("Error setting up MDNS responder!");
  }
  server.on("/", handleRoot);            
  server.on("/wol", handleWol);          
  server.onNotFound(handleNotFound);
  server.begin();
  udp.begin(9);
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
}

void handleRoot() {
  server.send(200, "text/plain", "Hello world!");
}

void handleWol() {
  byte preamble[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  byte mac[] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB };    // METTRE ICI L'ADRESSE MAC DE VOTRE ORDINATEUR A DEMARRER
  IPAddress computer_ip(255,255,255,255);                 // cette IP car on envoie le paquet en "broadcast" sur tout le réseau local
  udp.beginPacket(computer_ip, 9);
  udp.write(preamble, sizeof preamble);
  for (byte i = 0; i < 16; i++)
    udp.write(mac, sizeof mac);
  udp.endPacket();
  
  server.send(200, "text/plain", "WOL done!");
}

void handleNotFound(){
  server.send(404, "text/plain", "");
}
module_wakeonlan.txt · Dernière modification: 2020/01/08 22:56 de joseph