# 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€. ![](https://i.imgur.com/DEtmYcF.png) ## How to do it * Se procurer un ESP8266 à 5€ [de ce genre là](https://www.ebay.fr/itm/Carte-Module-sans-fil-CH340-NodeMcu-V3-WIFI-base-ESP8266-1278Z/293106969309) * Installer [Arduino IDE](https://www.arduino.cc/en/Main/Software) 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) ![](https://i.imgur.com/ZwKhbKP.png) * 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 #include #include #include #include #include #include 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", ""); // 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", ""); } ~~~ {{tag>wakeonlan esp8266 arduino wifi joseph}}