#include <ESP8266WiFi.h> #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> #include <ESP8266mDNS.h> #include <WiFiUDP.h> #include <WakeOnLan.h> WiFiUDP UDP; IPAddress computer_ip(255,255,255,255); //https://www.vultr.com/tools/mac-converter/ byte mac[] = { 0x20,0xcf,0x30,0x8e,0xac,0x51 }; void sendWOL(); WiFiServer server(8085); String header; String magic_packet = "sent"; void setup() { Serial.begin(115200); //Inicializáció WiFiManager wifiManager; //reset saved settings //wifiManager.resetSettings(); //set custom ip for portal wifiManager.setAPStaticIPConfig(IPAddress(192,168,10,50), IPAddress(192,168,10,50), IPAddress(255,255,255,0)); wifiManager.autoConnect("ESP Wifi beállítás"); Serial.println("Csatlakozott....."); server.begin(); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("New Client."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); header += c; if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); if (header.indexOf("GET /send") >= 0) { WakeOnLan::sendWOL(computer_ip, UDP, mac, sizeof mac); magic_packet="send"; Serial.println("Sending Magic packet....."); } else if(header.indexOf("GET /sent") >= 0) { Serial.println("Magic packet sent....."); magic_packet="sent"; } client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #77878A;}</style></head>"); client.println("<body><h1>WOL szerver</h1>"); client.println("<p> Wol Magic Packet Sender</p>"); if (magic_packet=="sent") { client.println("<p><a href=\"/send\"><button class=\"button\">Send</button></a></p>"); } if (magic_packet=="send") { client.println("<p><a href=\"/sent\"><button class=\"button button2\">Re-send</button></a></p>"); } client.println("</body></html>"); client.println(); break; } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } header = ""; client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }
A kód átmásolása után, a MAC címünket be kell írni a „byte mac[]” tömbbe. A MAC címet a következőképpen kell megadni:
20:cf:30:8e:ac:51 –> 0x20,0xcf,0x30,0x8e,0xac,0x51
A kód feltöltése után, ha minden igaz, akkor az „ESP Wifi Beállítás” nevű SSID-re csatlakozva a 192.168.10.50-es IP címen elérjük az eszköz menüjét. Ilyenkor a NodeMCU AP módban van. Amint beállítottuk a felületen a csatlakozásra kijelölt Wifi routert, az eszköz átvált Client módba és már csak azon az IP címen lehet elérni, amit a router osztott neki DHCP-n. Ha a MAC cím alapján beállítottuk az IP cím fix kiosztását, akkor a beállított IP címen elérjük az alább látható weboldalt.
Ezen az oldalon semmi mást sem kell csinálnunk, csak rákattintunk a „SEND” gombra, és ha mindent jól csináltunk, akkor a gép már startol is.
Abban az esetben ha azt szeretnénk, hogy minden újraindítás után a beállított csatlakozási információ törlődjön akkor ki kell venni a komment jelet a következő függvény elől: „wifiManager.resetSettings();”. Ezesetben persze a beállításokat elölről kell kezdeni.
Az ötlet szabadon továbbfejleszthető, én is mástól vettem, bár a kódot nem, de az is GPL.
Forrás: https://logout.hu/bejegyzes/uzsito/nodemcu_alapu_halozati_vezerlo_2.html
A NodeMCU megvásárolható a Webshopban