NodeMCU实现远程电脑开关机
- 1.确认PC主板支持WOL(Wake on Lan)
- 2.阿里云物联网平台设置
- 3.NodeMCU(开机棒)部分程序编写
- 4.编译手机App(仅支持Android)
- 5.PC上运行关机检测脚本,并设置为开机运行
在公司经常需要远程连接家里的台式电脑,如果家里的台式机已经开机并安装了teamview,自然能很开心的连回去,可是家里的电脑并不会24小时开机备用,试过一段时间用时开机的方法,但是暂时不需要的时候也不能关机呀,关机了可没人给我再开机了。如果能随时开关家里的电脑,想想都美滋滋了!
本着节能(money)环保的期望,自己研究了一下远程开关机的方法,目前能想到这个方法应该是操作最简单 (只需写软件),最安全(不用改电脑任何硬件),最省钱(只要买一个NodeMCU 15rmb左右),只要写一个手机app连接到阿里云服务器 ,改一下NodeMCU程序也连接到阿里云服务器,撸个Python在电脑后台还是连接到阿里云服务器,通过阿里云服务器来将app的消息分发给NodeMCU触发电脑开机,将关机指令分发给电脑执行关机,而且这个阿里云服务器还是几乎免费的,这样不管身在何处,只要手机有网络,NodeMCU和电脑连接同一个的路由器在局域网内,就能通过手机APP控制家里的电脑开关机了,而且NodeMCU可以放在家里的任意地方,只要能保持连接路由器即可,我放在了路由器旁边,用路由器后面的USB接口供电 。下面就分享方法给有同样需求的小伙伴了
下面的方法默认你已经会:
- 搭建ESP8266 RTOS开发环境
- 搭建 Android studio 开发环境
- 搭建 Python 开发环境和安装第三方库(MQTT client)
1.确认PC主板支持WOL(Wake on Lan)
首先需要在BIOS里面设置打开WOL功能,这个可以根据主板型号找一下步骤,由于每个厂商主板的设置方法都不一样,这里就不详述了。在主板上打开WOL功能后,WIN10还需要修改网卡属性里面的电源管理,选择允许设备唤醒计算机
设置完成后需要确认局域网内能通过WOL唤醒电脑,测试方法:
- 手机安装Wake On Lan 这个app,进入后添加设备,输入台式电脑的Ethernet 网卡MAC 地址(可以在cmd下用ipconfig /all获取),也可以用app的扫描功能找到设备
- 将电脑关机,然后检查有线网卡的黄灯应该保持常亮状态,如果没有亮说明WOL功能未开启成功,需要重新确认主板和系统设置
- 在app上后点击唤醒设备,如果能正常开机说明前面设置成功
2.阿里云物联网平台设置
由于家里的宽带没有独立的外网IP地址的,手机无法直接将WOL唤醒封包发送到处于局域网的NodeMCU,需要经过服务器转发信息,这里使用阿里物联网平台,只要注册一个账号,每个月有100万条免费的消息,用来做开关机电脑绰绰有余了。
- 先注册阿里云账号(这里也略过) https://www.aliyun.com/
- 在产品页面中找到物联网平台进入并申请开通
- 待审核开通成功后,进入物联网平台的控制台,找到产品->创建产品->基础服务 后点下一步
- 进入新增产品页面,填写产品名称后完成
- 产品创建完成后,进入设备界面,创建三个设备分别分给NodeMCU/手机app/PC登录使用,创建设备后会生成设备连接需要的三元组(如下图三组信息),分别复制保存三个设备的三元组,后面需要负责到每个设备运行的程序里面
- 创建完三个设备后,界面如图
- 创建完三个设备后,需要设置三个设备间消息转发的规则,点击 规则引擎 ->创建规则 设置消息转发规则
8.先创建手机发消息给NodeMCU的转发规则
8.点击 编写SQL 编写app_2_mcu转发规则 - 处理数据部分字段写power_on,表示把app发送的带有power_on的字段转发给NodeMCU进行处理
- 进入对该数据的转发规则
- 设置对该数据的操作,转发给remote_pc产品的NodeMCU/update
- 重复7-11 操作,创建app消息里的power_off字段转发给computer的规则,设置完成后如图
- 启动前面设置的两个规则,阿里云部分设置完成
3.NodeMCU(开机棒)部分程序编写
- 搭建ESP8266开发环境,参照 https://github.com/espressif/ESP8266_RTOS_SDK
- 使用官方提供的link Kit SDK,成功连接上阿里云,参照https://github.com/espressif/esp-aliyun
- 将官方提供的LintKit里的https://github.com/espressif/esp-aliyun/blob/master/examples/mqtt/mqtt_example/main/mqtt_example.c替换为https://github.com/rxly/RemotePCPower/blob/master/NodeMCU/mqtt_example.c
- 修改NodeMCU设备对应的三元组信息和需要唤醒PC的mac 地址
4.编译手机App(仅支持Android)
- Android App source code放在这个地址:https://github.com/rxly/RemotePCPower/tree/master/android_app
- clone下来后需要修改mobile_app设备对应的三元组信息
- 修改完成后编译app即可以在手机上运行,远程电脑如果允许下面讲到的python脚本,会显示会远程电脑处于开机状态,能控制电脑开机,如果远程电脑没有运行该脚本,则显示打开远程电脑,按开机键会打开远程电脑
5.PC上运行关机检测脚本,并设置为开机运行
- 安装Python解释器,建议安装免费的Pycharm IDE,并安装paho mqtt client三方库
- 将https://github.com/rxly/RemotePCPower/tree/master/PC下的两个文件保存到本地,修改power_off.py里面PC设备对应的三元组
- 设置此电脑 -> 管理 ->任务计划程序->创建任务,按下图依次设置
关机检测部分全部设置完成
到这里应该就能用手机app控制电脑开关机了,如果中间有什么不清楚的地方,请留言说明,我看到后会补齐