下面要写的这篇博客内容,是由博主自己的实践成功的经验总结,适合有一定的电脑基础及轻量编程及动手能力的人观看!
不知道大家有没有和我一样的,作为一名IT行业从业人员,但是总是不喜欢每天何时何地都背着笔记本电脑上下班,用惯了
台式机,大多数情况也是公司家里两头跑,家里一台电脑,公司一台电脑,一台笔记本,一台手机!所以有时候资料是分散
的,也许有时候你在家里,需要调用及远程公司的电脑,反之你在公司要远程家里的电脑,但是家里电脑公司电脑都不是每个
时间点都是开着机的,在没开机的情况,我们正常情况是没办法直接远程的,所以一个新的问题冒出来了,我们如何能让电脑
远程开机?今天我就会围绕这个问题,展开讲讲个人折腾的精力,我一开始自己也是在网上找一些教程和方法,总结下大概分
为一下几种:

方法1:网上购买一个远程控制的插座开关(小米或其他品牌),然后在电脑blos里设置来电自启功能,这样当你的电脑处于关机状态,
你只要在手机app上远程控制插座断电然后再通电,电脑就会自动重启,然后你就可以远程这台电脑来完成一些工作任务了!

方法2:购买一些网络远程服务商(如向日葵,todesk 等....)的服务和产品,比如向日葵的远程开机卡,基本几十到一百多人民币不等
todesk有远程开机项提供,但是前提是你需要远程开机的电脑旁边必须要有一台手机或者另外一台电脑,是开着机的,而且安装
了他们的app,这样的前提条件下才能实现远程开机的功能!

方法3:通过可以连接WiFi的单片机比如(esp8266等......),来实现远程唤醒需要远程的电脑,这种方式需要一台云服务器来转发唤醒
指令, 需要一定的动手能力!esp8266 单片机很便宜,某宝10块左右能买到,云服务器的话,看你自己有没有,打折的基础云服务器
几十块钱一年!
上面我说的几种方法都能实现我们的需求和解决问题,我都有尝试折腾过都能成功,所以根据每个人的动手能力及个人需求,选择适合
自己的方式方法,这是最重要的!但是我现在用的是方法三,原因很简单,我自己之前有没一台腾讯云的服务器,用来做自己学习的用途
这时候正好能排上用场,下面我讲围绕方法三来展开讲讲具体的操作步骤!
适合人群:有一定动手能力、会刷 Arduino/ESP 固件、能进路由器设置的用户。
目标:在外网通过一个 URL / 按钮,远程唤醒家里电脑(支持 WOL 的情况)。
两种方案:
A. 用 ESP8266 在局域网内发送 Wake-On-LAN(WOL)魔术包(最常用)
B. 若网卡不支持 WOL,再用 ESP8266 驱动继电器短接主板电源按键(物理按键模拟)
下面按步骤讲 —— 先做软件与主机设置(必做),再做 ESP8266 代码与网络配置,最后讲安全与排错。
一、先决条件(必须完成的准备工作)
-
网卡与 BIOS 支持 WOL
-
进入 BIOS/UEFI:启用 Wake on LAN / Wake on PCI-E / Power on by PCI devices(不同主板名称可能不同)。
-
Windows 下(示例):设备管理器 → 网络适配器 → 你的网卡 → 属性 → 电源管理 → 勾选 “允许此设备唤醒计算机”;高级选项里找 “Wake on Magic Packet” 并启用。
-
注意:有些笔记本/网卡在完全断电(S5)状态不支持,测试需在关机状态下试验。
-
-
关闭 Windows 的快速启动(建议)
-
Windows 快速启动(Fast Startup)有时阻止 WOL 正常工作:控制面板 → 电源选项 → 选择电源按钮的功能 → 取消启用快速启动。
-
-
记录电脑网卡 MAC 地址与本地广播地址
-
在电脑上打开命令行运行:
找到 IPv4 地址、子网掩码和物理地址(Physical Address,形式如
AA-BB-CC-DD-EE-FF)。 -
如果你家网络是 192.168.1.x,广播地址通常是 192.168.1.255;如果是 192.168.0.x 则是 192.168.0.255。也可以用工具计算广播:
broadcast = ip | (~netmask)。
-
-
决定远程触发入口(两种方式)
-
局域网触发(简单):手机在同一 Wi-Fi 时直接访问 ESP 的 IP 即可。
-
外网触发(远程):需要路由器端口转发到 ESP(或用 DDNS/动态域名 + 端口转发),或通过 VPN/Cloudflare Tunnel/Ngrok 等更安全方案。下面会细讲。
-
二、方案选型说明(选最适合你的)
-
最简单(且推荐):ESP8266 在家中接入 Wi-Fi,提供一个受密码保护的 HTTP 接口
/wake,当收到请求时向局域网广播 WOL 魔术包。外网访问可用 DDNS + 路由器端口转发(注意风险)。 -
更安全:不要直接做端口转发,改用反向隧道(Cloudflare Tunnel、ngrok)或在家里做 VPN(OpenVPN / WireGuard),外网通过 VPN 直接访问内网 ESP。
-
极端备用:若网卡或 BIOS 不支持 WOL,则把 ESP 用作“物理按键模拟器”——用一个继电器短接主板的 POWER_SW 脚针来按电源,这需要物理连线且更危险(需断电操作与绝对小心)。
三、ESP8266 方案:工作原理(简述)
-
ESP8266 接入你家 Wi-Fi(获得内网 IP)。
-
ESP8266 运行一个简单的 HTTP 服务器(或只监听 UDP/TCP),接收带口令的外部请求。
-
收到合法请求后,ESP8266 构建 WOL 魔术包(6 个 0xFF + 16 次 MAC)并通过 UDP 广播发送到局域网(目标端口通常 9 或 7)。
-
家里电脑的网卡接收到魔术包并被唤醒(前提是 BIOS & 驱动配置正确)。
四、硬件清单与准备
-
ESP8266 开发板(NodeMCU / Wemos D1 mini 任一) ×1
-
USB 5V 电源与数据线(保证稳定电源)
-
(可选)小型面包板与指示灯,用于显示状态
-
(可选,只有当 WOL 不支持时)继电器模块 + 杜邦线(用于短接 POWER_SW)
五、完整 Arduino(ESP8266)代码(示例)
说明:下面代码使用 Arduino core for ESP8266(在 Arduino IDE 里需安装 ESP8266 开发板)。代码实现:连接 Wi-Fi,启动 WebServer(端口 80),访问
http://ESP_IP/wake?pw=YOUR_PASSWORD则发送魔术包到广播地址(9端口)。你也可以改用 7。
重点安全提醒:示例使用简单口令,如果外网直接映射端口,会有风险。强烈推荐使用 VPN 或 隧道方式代替直接端口转发。
// ESP8266 Wake-on-LAN example (Arduino IDE)
// 功能:在访问 /wake?pw=xxx 时向局域网广播 WOL 魔术包
// 注意:将 WiFi SSID/PASS、TARGET_MAC、BROADCAST_IP、WEB_PASS 修改为你的值
代码如下:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASS";
// 目标网卡MAC地址,格式如 "AA:BB:CC:DD:EE:FF"
const char* targetMacStr = "AA:BB:CC:DD:EE:FF";
// 广播地址(局域网广播),例如 "192.168.1.255"
IPAddress broadcastIP(192,168,1,255);
// 端口通常 9 或 7
const uint16_t wolPort = 9;
// Web 接入密码
const String WEB_PASS = "your_secret_password";
ESP8266WebServer server(80);
WiFiUDP Udp;
// helper: convert MAC string "AA:BB:CC:DD:EE:FF" to bytes
bool macStrToBytes(const char* macStr, uint8_t* macBuf) {
int values[6];
if ( 6 == sscanf(macStr, "%x:%x:%x:%x:%x:%x",
&values[0], &values[1], &values[2], &values[3], &values[4], &values[5]) ) {
for (int i = 0; i < 6; ++i) macBuf[i] = (uint8_t) values[i];
return true;
} else {
return false;
}
}
void sendMagicPacket(const uint8_t *mac) {
// 6 * 0xFF + 16 * MAC
uint8_t packet[6 + 16 * 6];
for (int i=0;i<6;i++) packet[i] = 0xFF;
for (int i=0;i<16;i++){
for (int j=0;j<6;j++){
packet[6 + i*6 + j] = mac[j];
}
}
Udp.beginPacket(broadcastIP, wolPort);
Udp.write(packet, sizeof(packet));
Udp.endPacket();
}
void handleRoot() {
String s = "<h3>ESP8266 WOL</h3>";
s += "<p>Use /wake?pw=PASSWORD to wake computer</p>";
server.send(200, "text/html", s);
}
void handleWake() {
if (!server.hasArg("pw") || server.arg("pw") != WEB_PASS) {
server.send(401, "text/plain", "Unauthorized");
return;
}
// parse MAC and send
uint8_t mac[6];
if (!macStrToBytes(targetMacStr, mac)) {
server.send(500, "text/plain", "Bad MAC format");
return;
}
sendMagicPacket(mac);
String resp = "Magic packet sent to " + String(targetMacStr);
server.send(200, "text/plain", resp);
}
void setup() {
Serial.begin(115200);
delay(200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.printf("Connecting to %s\n", ssid);
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
if (millis() - start > 20000) break;
}
Serial.println();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi connected");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nWiFi not connected");
}
Udp.begin(0); // bind to random local port
server.on("/", handleRoot);
server.on("/wake", handleWake);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
如何使用并修改:
-
在代码开头把
ssid,password,targetMacStr,broadcastIP,WEB_PASS改成你自己的值。 -
上传到 ESP8266,串口里会打印分配到的内网 IP(例如 192.168.1.42)。
-
在浏览器或手机输入
http://192.168.1.42/wake?pw=your_secret_password即可触发唤醒。 -
若想做更简洁的 App/按钮,可把该 URL 嵌入手机快捷方式或使用 IFTTT/Webhook(需公网访问或隧道)。
六、如何在外网唤醒(几种可选方案)
必须注意安全:若把 ESP 的端口直接转到公网上,别人也能尝试访问你的
.../wake,务必设置强口令或使用更安全方式(VPN / 隧道)。
A. 端口转发 + DDNS(简单但风险最大)
-
在路由器里设置端口转发(举例):WAN端口 8888 → 内网 192.168.1.42:80。
-
在路由器或服务上启用动态域名(DDNS),比如
yourhome.dyndns.org。 -
外网访问
http://yourhome.dyndns.org:8888/wake?pw=xxx即能唤醒。
风险:端口暴露在公网,建议只用短时间试验或配合复杂口令/白名单。
B. 推荐:使用 VPN(最安全)
-
在家里路由器或树莓派上部署 WireGuard / OpenVPN。
-
手机连上 VPN 后,就像在家里局域网,直接访问
http://192.168.x.x/wake?...即可。
优点:无需端口转发,安全性高。
C. 反向隧道(Cloudflare Tunnel / ngrok / frp)
-
用 Cloudflare Tunnel(cloudflared)或者 ngrok 将 ESP 的本地端口通过安全通道暴露到云端。
-
相比端口转发更易于管理且支持 HTTPS 身份校验。
注意:某些方案需要在家里运行一个客户端(如 cloudflared)在能访问 ESP 的机器或局域网内设备上。
七、若网卡不支持 WOL:用继电器模拟按电源键(备用方案)
仅当 WOL 无法使用时考虑,操作有风险,断电操作并小心!
思路:主板上有两个针脚对应 POWER_SW。按下就是短接这两针。ESP8266 控制继电器模块的常开接点(NO)来短接这两针,模拟按电源键。
连接与注意:
-
切断主机电源,打开机箱,找到主板上的 POWER_SW 针脚(参照主板说明书)。
-
用低压继电器模块(5V)或 optocoupler 做隔离,ESP 控制继电器线圈。
-
当接收到唤醒请求时,ESP 输出 HIGH 驱动继电器闭合 300~500ms,模拟短按电源键。
-
绝对注意安全:操作主板前断电、避免短路、若不了解请勿尝试或请行家代做。
八、安全性建议与强化
-
不要在公网直接暴露未加密的接口。若必须暴露,至少:
-
使用强口令(长字符串);
-
限制请求频率(简单计数器);
-
白名单 IP(在路由器层面实现)。
-
-
优先使用 VPN / Cloudflare Tunnel。
-
在 ESP 上加简单认证:除了 Query 参数口令,可改用 header 验证或 Basic Auth。
-
定期检查路由器日志,若发现异常访问立即改密码。
九、常见问题 & 故障排查(非常重要)
Q:发送魔术包后电脑没反应?
检查顺序:
-
BIOS 中 WOL 已启用?(必须)
-
网卡驱动高级设置里 “Wake on Magic Packet” 是否启用?
-
Windows 电源管理里:允许此设备唤醒计算机?
-
是否用了无线网卡?WOL 只对有线 Ethernet 一般有效(少数笔记本无线也支持但罕见)。
-
发送的目标 MAC 是否正确?格式、大小写无关但要字节正确。
-
是否向 广播地址 发送?如果发向具体 IP 而该设备处于关机,可能无法到达。
-
路由器是否阻止 LAN 广播(某些路由器不允许从无线到有线的广播)?需在路由器允许“无线桥接/局域网广播”。
-
若使用端口转发确保路由器把外网包转发到内网 ESP,而 ESP 再广播在 LAN 上;直接把魔术包从外网发到公网IP上有时会被路由器丢弃。
Q:测试如何做?
-
先 在局域网内 用手机(连接家里 Wi-Fi)直接访问
http://ESP_IP/wake?pw=xxx,如果可唤醒则说明 WOL 与 ESP 功能正常,接下来解决远程访问问题。 -
使用电脑端工具(如 WakeOnLan GUI)在同一 LAN 测试发送魔术包,确认能唤醒。
Q:如何构造Broadcast IP?
-
若路由器 IP 是
192.168.1.1/24,则广播是192.168.1.255。子网不同要对应计算。
十、小结与一步步快速清单(用于实际操作)
准备工作(PC 端):
-
BIOS 开启 WOL;
-
Windows 设备管理器启用 “允许此设备唤醒计算机” + Wake on Magic Packet;
-
记录网卡 MAC、局域网广播地址。
ESP 端:
-
填写 Wi-Fi、目标 MAC、广播 IP、口令;
-
上传示例代码并查看串口得到 ESP IP;
-
局域网内访问
/wake测试能否唤醒。
远程访问(可选):
-
推荐方案:设置家里 VPN(WireGuard)或 Cloudflare Tunnel;连接后访问 ESP 内网地址。
-
简单方案:设置 DDNS+路由器端口转发(注意安全风险)。