如何用 ESP8266 单片机实现远程唤醒家里电脑(详细教程)

办公软件技巧
发表时间:2025-10-27 16:41

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

如何用 ESP8266 单片机实现远程唤醒家里电脑(详细教程)

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

如何用 ESP8266 单片机实现远程唤醒家里电脑(详细教程)

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

如何用 ESP8266 单片机实现远程唤醒家里电脑(详细教程)

方法3:通过可以连接WiFi的单片机比如(esp8266等......),来实现远程唤醒需要远程的电脑,这种方式需要一台云服务器来转发唤醒
指令, 需要一定的动手能力!esp8266 单片机很便宜,某宝10块左右能买到,云服务器的话,看你自己有没有,打折的基础云服务器
几十块钱一年!
 
上面我说的几种方法都能实现我们的需求和解决问题,我都有尝试折腾过都能成功,所以根据每个人的动手能力及个人需求,选择适合
自己的方式方法,这是最重要的!但是我现在用的是方法三,原因很简单,我自己之前有没一台腾讯云的服务器,用来做自己学习的用途
这时候正好能排上用场,下面我讲围绕方法三来展开讲讲具体的操作步骤!

适合人群:有一定动手能力、会刷 Arduino/ESP 固件、能进路由器设置的用户。
目标:在外网通过一个 URL / 按钮,远程唤醒家里电脑(支持 WOL 的情况)。
两种方案
A. 用 ESP8266 在局域网内发送 Wake-On-LAN(WOL)魔术包(最常用)
B. 若网卡不支持 WOL,再用 ESP8266 驱动继电器短接主板电源按键(物理按键模拟)

下面按步骤讲 —— 先做软件与主机设置(必做),再做 ESP8266 代码与网络配置,最后讲安全与排错


一、先决条件(必须完成的准备工作)

  1. 网卡与 BIOS 支持 WOL

    • 进入 BIOS/UEFI:启用 Wake on LAN / Wake on PCI-E / Power on by PCI devices(不同主板名称可能不同)。

    • Windows 下(示例):设备管理器 → 网络适配器 → 你的网卡 → 属性 → 电源管理 → 勾选 “允许此设备唤醒计算机”;高级选项里找 “Wake on Magic Packet” 并启用。

    • 注意:有些笔记本/网卡在完全断电(S5)状态不支持,测试需在关机状态下试验。

  2. 关闭 Windows 的快速启动(建议)

    • Windows 快速启动(Fast Startup)有时阻止 WOL 正常工作:控制面板 → 电源选项 → 选择电源按钮的功能 → 取消启用快速启动。

  3. 记录电脑网卡 MAC 地址与本地广播地址

    • 在电脑上打开命令行运行:

       
      ipconfig /all

      找到 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)

  4. 决定远程触发入口(两种方式)

    • 局域网触发(简单):手机在同一 Wi-Fi 时直接访问 ESP 的 IP 即可。

    • 外网触发(远程):需要路由器端口转发到 ESP(或用 DDNS/动态域名 + 端口转发),或通过 VPN/Cloudflare Tunnel/Ngrok 等更安全方案。下面会细讲。


二、方案选型说明(选最适合你的)


三、ESP8266 方案:工作原理(简述)

  1. ESP8266 接入你家 Wi-Fi(获得内网 IP)。

  2. ESP8266 运行一个简单的 HTTP 服务器(或只监听 UDP/TCP),接收带口令的外部请求。

  3. 收到合法请求后,ESP8266 构建 WOL 魔术包(6 个 0xFF + 16 次 MAC)并通过 UDP 广播发送到局域网(目标端口通常 9 或 7)。

  4. 家里电脑的网卡接收到魔术包并被唤醒(前提是 BIOS & 驱动配置正确)。


四、硬件清单与准备


五、完整 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();
}

如何使用并修改


六、如何在外网唤醒(几种可选方案)

必须注意安全:若把 ESP 的端口直接转到公网上,别人也能尝试访问你的 .../wake,务必设置强口令或使用更安全方式(VPN / 隧道)。

A. 端口转发 + DDNS(简单但风险最大)

  1. 在路由器里设置端口转发(举例):WAN端口 8888 → 内网 192.168.1.42:80。

  2. 在路由器或服务上启用动态域名(DDNS),比如 yourhome.dyndns.org

  3. 外网访问 http://yourhome.dyndns.org:8888/wake?pw=xxx 即能唤醒。
    风险:端口暴露在公网,建议只用短时间试验或配合复杂口令/白名单。

B. 推荐:使用 VPN(最安全)

C. 反向隧道(Cloudflare Tunnel / ngrok / frp)


七、若网卡不支持 WOL:用继电器模拟按电源键(备用方案)

仅当 WOL 无法使用时考虑,操作有风险,断电操作并小心!

思路:主板上有两个针脚对应 POWER_SW。按下就是短接这两针。ESP8266 控制继电器模块的常开接点(NO)来短接这两针,模拟按电源键。

连接与注意


八、安全性建议与强化

  1. 不要在公网直接暴露未加密的接口。若必须暴露,至少:

    • 使用强口令(长字符串);

    • 限制请求频率(简单计数器);

    • 白名单 IP(在路由器层面实现)。

  2. 优先使用 VPN / Cloudflare Tunnel

  3. 在 ESP 上加简单认证:除了 Query 参数口令,可改用 header 验证或 Basic Auth。

  4. 定期检查路由器日志,若发现异常访问立即改密码。

九、常见问题 & 故障排查(非常重要)

Q:发送魔术包后电脑没反应?
检查顺序:

  1. BIOS 中 WOL 已启用?(必须)

  2. 网卡驱动高级设置里 “Wake on Magic Packet” 是否启用?

  3. Windows 电源管理里:允许此设备唤醒计算机?

  4. 是否用了无线网卡?WOL 只对有线 Ethernet 一般有效(少数笔记本无线也支持但罕见)。

  5. 发送的目标 MAC 是否正确?格式、大小写无关但要字节正确。

  6. 是否向 广播地址 发送?如果发向具体 IP 而该设备处于关机,可能无法到达。

  7. 路由器是否阻止 LAN 广播(某些路由器不允许从无线到有线的广播)?需在路由器允许“无线桥接/局域网广播”。

  8. 若使用端口转发确保路由器把外网包转发到内网 ESP,而 ESP 再广播在 LAN 上;直接把魔术包从外网发到公网IP上有时会被路由器丢弃。

Q:测试如何做?

Q:如何构造Broadcast IP?


十、小结与一步步快速清单(用于实际操作)

准备工作(PC 端)

  1. BIOS 开启 WOL;

  2. Windows 设备管理器启用 “允许此设备唤醒计算机” + Wake on Magic Packet;

  3. 记录网卡 MAC、局域网广播地址。

ESP 端

  1. 填写 Wi-Fi、目标 MAC、广播 IP、口令;

  2. 上传示例代码并查看串口得到 ESP IP;

  3. 局域网内访问 /wake 测试能否唤醒。

远程访问(可选)

分享:

常见问题

答:ESP8266 是一款支持 Wi-Fi 功能的低功耗单片机芯片,常用于 IoT(物联网)项目。它能通过编程实现远程控制、数据采集、网络通信等功能。 在本项目中,我们利用它的 Wi-Fi 模块功能,让它通过网络向电脑发送 Wake-on-LAN(魔术包) 来实现远程唤醒。

答:电脑必须支持并开启 Wake-on-LAN(局域网唤醒) 功能。 设置步骤如下: 1.进入 BIOS → 找到 “Power Management” 或 “Advanced” 菜单,开启 Wake on LAN / PCI-E Device Power On。 2.系统内设置: 打开设备管理器 → 网络适配器 → 属性 → 电源管理。 勾选 “允许此设备唤醒计算机” 和 “只允许魔术包唤醒计算机”。 3.确保电脑 用网线连接路由器,因为无线网卡多数不支持休眠下唤醒。

答:1.打开命令提示符(CMD),输入以下命令:ipconfig /all 2.在对应的有线网卡信息中找到 “物理地址(Physical Address)”,格式类似:00-1A-2B-3C-4D-5E 这就是你需要配置到 ESP8266 程序中的 MAC 地址,(每个人的不一样)

答:最基础的接法只需要供电即可: VCC → 3.3V GND → GND TX / RX → 连接到 USB 转串口模块进行编程 完成后 ESP8266 会通过 Wi-Fi 连接路由器,无需额外引脚控制。

答:默认情况下 Wake-on-LAN 只能在 同一局域网 内工作。 如果要实现 外网唤醒(跨网络唤醒),有两种方式: 使用路由器端口转发:(内网穿透技术VPN) 在路由器中将 UDP 端口(默认 9 或 7)转发到电脑所在的内网 IP。 借助服务器中转:(我上面就是讲的此种唤醒类型) 可以让 ESP8266 定期连接你的云服务器(如腾讯云、阿里云),当你发送远程指令时,由服务器通知 ESP8266 执行唤醒操作。 这种方式安全性更高,也方便后续扩展成智能家居控制系统。

使用 Arduino IDE 即可,需提前安装以下库: ESP8266WiFi.h WiFiUdp.h 核心思路是: WiFiUDP udp; udp.beginPacket(broadcastIP, 9); udp.write(magicPacket, sizeof(magicPacket)); udp.endPacket(); 这里的 magicPacket 是根据目标电脑 MAC 地址生成的“魔术包”。

答:仅当电脑处于 睡眠(Sleep)、休眠(Hibernate) 或 关机但主板通电(S5) 状态时,才能通过网络唤醒。 如果是 完全断电(如插座断电、拔掉电源),则无法唤醒。

答:可以! 一种常见做法是: 用智能插座恢复电脑供电; 电脑 BIOS 设置为“来电自启(AC Power Recovery)”; 或者由 ESP8266 控制一个继电器模块,模拟按下电源键; 这样即使完全断电也能“远程开机”,相当于“物理层唤醒”。

答:ESP8266 功耗很低,待机时仅几十毫安,全年运行的电费可忽略不计。 建议使用 USB 电源或路由器 5V 接口供电即可,保持 7×24 小时在线。

答:有潜在风险,如果开放外网端口,可能被他人恶意唤醒或扫描。 建议: 设置路由器防火墙; 或者让 ESP8266 接收带密码的 HTTP 请求后再发送魔术包; 进一步可结合 Token 验证、MQTT 安全通道或 HTTPS 通信。

答:完全可以! ESP8266 可作为一个 Web Server,提供一个简单的网页界面,一键发送唤醒命令; 也可以通过 MQTT 协议接入 Home Assistant 或 Node-RED 等自动化平台,实现: 手机 App 一键开机 定时唤醒电脑 智能语音控制(如小爱同学 / Alexa)

答:ESP8266 模块(如 NodeMCU):¥15-25 USB 转串口下载器:¥10 左右 其他(杜邦线、电源):约 ¥5 (不包含服务器的费用) 整体预算 不超过 ¥40,比市面上的远程开机插座方案便宜得多,还能自由扩展功能。

相关文章推荐
阅读 196