共计 3448 个字符,预计需要花费 9 分钟才能阅读完成。
本文作者:R3 默秒全
寒假将至,为了防止居家期间办公室的远程电脑出现死机、自动关机等问题,我耗了一天时间做了一个简单的远程强制开关机工具。本文不再赘述摸索和踩坑过程,仅以教程形式进行分享,网友也可在此基础上进一步开发更多别出心裁的功能。无心了解原理的可以直接翻到第三部分。
一、DIY 原料与价格
DIY 核心:ESP 8266 开发板 V3(CH340),淘宝 10.8 元包邮
烧录数据线:usb-microusb 数据线,家里翻找即可,成本不计
其他材料:跳线 4 - 5 根,成本不计
环境要求:802.11b/g/n wifi,手机一个,人人都有
总计:10.8 元
二、DIY 背景知识
1、WOL 远程唤醒(软)
WOL(Wake on LAN),中文名局域网唤醒。顾名思义,能够使局域网内处于关机或休眠状态的计算机,将状态转换成引导(Boot Loader)或运行状态。过程很简单,通过发送一组特殊格式的网络封包(Magic Packet,幻包)给某个 MAC 地址的电脑,从 ACPI 的 Sx(S3,S4,S5)模式返回 S0 运行模式,即让电脑从睡眠或关机模式恢复运行。
实现方法:
(1)启用 BIOS 中网络唤醒的相关选项;
(2)进入系统,在设备管理器中找到所用网卡,右键设置,在高级中启用唤醒魔包(可能名称不同),在电源管理中启用唤醒计算机;
(3)在上级路由器中设置主机 IP 与 MAC 绑定,设置 DMZ 或转发,端口不要选 ISP 阻塞端口,协议选择 UDP 或 ALL,若无公网 IP,需要使用带透传的 DDNS 解析;
(4)在主控端安装 WOL 软件进行控制,如 Depicus(http://www.depicus.com/wake-on-lan/welcome.aspx)或 Wake On Lan(https://sourceforge.net/projects/aquilawol/)。
WOL 方法通常不需要额外的硬件,但 BIOS 和网卡不能太老,且对公网 IP 有要求。此外,WOL 只能实现唤醒,碰上意外死机等状况则无能为力,无法满足我的使用需求。
2、主板开机电路(硬)
为了实现强制性开关机和状态检测,有必要了解主板开机触发电路的工作原理。主板的开机电路类型大体上可分为四种类型:即南桥组成的开机电路、南桥和逻辑门电路组成的开机电路、南桥和 I / O 芯片组成的开机电路和经过特殊芯片的开机电路。基本触发电路如下。
在接上电源待机情况下,ATX 第 9 脚会输出 5V 电压,经稳压电路后输出 3.3V 给触发电路 (A 点),另外 5V 电压一般也会直接作用于前置 USB 的 VCC 针脚,可用于开发板的供电。开机键按下时,A 点的电平被拉低,产生信号进入触发电路,集电极(ATX 的 14 脚) 被拉低,ATX 电源开始工作,输出各路电压,主板通电自检。按键关机时,A 点再次低电平,B 点电压反转,三极管截止,集电极电位升高,停止工作。此外,主板跳线插座的 RST 针脚与开机动作关联,关机时处于低电平,开机时有 3.3V 电压,可用于判断主板通电状态。基于该电路,我可以实现强制的远程开关机和检测。
3、ESP8266 与 Blinker
ESP8266 是一款价格低廉的面向物联网集成的 Wi-Fi MCU,集成 32 位处理器、标准数字外设接口、天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块。我购买的是带有 CH340 的开发板,可直接通过老安卓数据线进行 Arduino 程序烧录,在特定的针脚上可以实现高低电平的输入输出、上拉下拉,若需要还可以实现模拟信号的输入。
Blinker 是点灯科技物联网解决方案,通过几行代码就可以与 ESP8266 实现双向通讯控制,简单易懂,快速入门,可玩性强,可 APP 直接自定义控制界面。入门案例教程:https://diandeng.tech/doc/getting-start-8266
三、DIY 操作
1、ESP8266 与主板针脚关系
参见上图左图引脚定义,其中 GPIO16 可以设置为输入下拉 (INPUT_PULLDOWN_16) 模式,可进行开机状态检测。此外,我选择 GPIO12(OUTPUT)进行开机信号触发。主板与开发板的接线关系如下表。
ESP8266开发板针脚 | 主板针脚 | 功能 |
D0-GPIO16 | 跳线插座重启高电平针脚 | 主板开机状态检测 |
D6-GPIO12 | 跳线插座开机高电平针脚 | 开机触发按键 |
Vin-VIN 5V | F_USB VCC(5V)针脚 | 开发板 5V 供电 |
G-GND | 跳线插座 GND 针脚 | 开发板接地 |
2、Blinker APP 设置
流程:下载、打开 Blinker APP(应用商城就有)→点击右上角加号→独立设备→WIFI 接入→选择一个服务器→复制 Key,后面要用→切回主界面→打开新的设备→点击右上角三个点→界面配置→复制下面我已经写好的配置信息→更新配置→切回主界面重新打开→大功告成。
{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨tex¨¨t0¨¨远程开关机第二版¨¨t1¨¨DIYER:R3 默秒全¨¨bg¨Ë¨ico¨´´¨cols¨Í¨rows¨Ë¨key¨¨tex-1¨´x´Ë´y´Ì¨speech¨|÷¨lstyle¨Ì¨clr¨¨#076EEF¨}{ßA¨deb¨¨mode¨ÉßGÉßIÑßJÍßK¨debug¨´x´É´y´ÐßM|÷ßNÊ}{ßA¨btn¨ßH¨fal fa-power-off¨ßRÉßC¨电源键¨ßE¨文本 2¨ßGÉßIËßJËßK¨btn-power¨´x´Ê´y´ÎßM|÷ßNÉßO¨#00A90C¨}{ßAßTßHßUßRÉßC¨强制关机¨ßEßWßGÉßIËßJËßK¨btn-shutdown¨´x´Î´y´ÎßM|÷ßO¨#EA0909¨}{ßAßTßHßUßRÉßC¨当前状态¨ßEßWßGÉßIËßJËßK¨btn-state¨´x´Ì´y´ÎßM|÷ßNÊßO¨#FBA613¨}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßh¨source_zh¨¨开关状态¨¨state¨|ßjßl÷¨state_zh¨|¨打开¨¨关闭¨÷}÷}
3、Arduino 编程和烧录
(1) 安装开发板 CH340 驱动 (下载地址)
(2) 下载 Arduino(https://www.arduino.cn/thread-5838-1-1.html),进行安装。
(3) 打开 Arduino,进入首选项(Preferences),找到附加开发板管理器地址(Additional Board Manager URLs),添加信息:http://arduino.esp8266.com/stable/package_esp8266com_index.json
(4) 点击 Tools-Sketch-Broad-Broads Manager,进入开发板管理器界面
(5) 找到 esp8266 并安装,建议科学上网
(6) 安装完成后,重启 Arduino IDE 软件。在 Tools- Sketch-Broad 中会看到 ESP8266 开发板的选项,选择 Generic ESP8266 Module
(7) USB 连接 ESP8266 开发板,Tools- Sketch 中选择对应端口,我的是 Port3
(8) 下载 blinker Arduino 库(https://github.com/blinker-iot/blinker-library/archive/master.zip)
(9) 将下载好的 blinker 库解压到 我的电脑 > 文档 >Arduino>libraries 文件夹中
(10) 打开 Arduino IDE,打开我写好的 INO 文件 (下载地址)
(11) 在程序中修改 Blinker Key、wifi 名称、wifi 密码
(12) 点击烧录按钮,等待烧录完成
4、上机测试
按照针脚对应关系连线,顺利完成测试。若 Blinker 连接不稳定,一考虑 wifi 信号,二考虑 esp8266 供电稳定性问题。供电问题可在 VIN 和 GND 中并联电容解决。
功能演示:
Bilibili 视频 https://www.bilibili.com/video/BV1Dz4y1S7bL/(视频已丢)
可执行度很高的远程PC开关机控制方案!!!
通过这个工具可以让遥远的PC在停电等突发情况后,仍然有能力被我们重新控制,而无需人为按下开机键。比起单独的VNC方案提升了可靠性,而且比起商用的远程开机方案成本更低。 :rolleyes: :rolleyes: :rolleyes: