计算机强制关机原理,电脑远程开机 ( 与开关按键作用一样可强制开关机 , 非网络唤醒(WOL) ) (ESP32 8266)...
远程开关及功能, 而且是直接控制主机开关机键, 而不是使用 `Wake On LAN(WOL)` 的功能, 这样的好处是有绝对的控制权,就算电脑死机,也可以触发长按强制关机的命令,而且也不会出现`WOL`的有时候无法唤醒的问题; 缺点就是需要改硬件(其实就是改一下主板上的针脚插接线路而已,很简单)
版权声明:本文为 neucrack 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接(持续更新):https://neucrack.com/p/190
原理
控制开关及
机箱的开关及按钮连接到主板的两个引脚: Power+ 和 Power-, 也可以说是Power Out和Power In, 平时两个引脚的连接是断开的,当机箱按钮按下短路, Power-是主板的 开关机检测引脚, 主板检测当这个引脚高电平的时间超过一定时间(t1)就开关机, 若发现是长按(时间t2),则强制关机
所以我们只需要用单片机去控制向Power In输入高电平即可(注意共地)
读取主机开机状态
主板会有一对(PLED+和PLED-)甚至更多对引脚来指示开关机状态,一般会被连接到机箱的开关机指示灯, 通过PLED+的电平就可以知道主机是开机(高电平)还是关机(低电平)了
所以我们只需要用单片机去读取PLED+的电平即可(注意共地),是高电平就表示是开机状态
系统组成
硬件
ESP32 + 杜邦线 + 插针: ESP32非常便宜性能又高,最关键的是集成的 2.4G WiFi 硬件和协议栈, 而且支持 Micropython编程,可以在非常短的时间内完成本设计
电路
通过USB共地, 也可以接PLED-到ESP32的GND
系统通信网络(序列图)
Created with Raphaël 2.1.2硬件硬件MQTT服务器MQTT服务器网页服务器网页服务器用户浏览器用户浏览器订阅订阅登录、请求控制或者获取状态信息推送请求(消息)转发消息收到消息,判断消息并处理、响应推送状态信息转发消息收到状态,响应给用户响应控制结果以及状态信息
制作步骤按照精简电路图搭建硬件电路
下载 Micropython 固件并按照说明更新到开发板
编写Micropython程序,使用MQTT与云端建立长连接,定时向某个主题(topic1)上传状态,订阅某个主题(topic2),制定自己的协议,最好对数据进行加密,根据接收到的数据来决定采取什么动作
编写服务器程序,订阅发布硬件状态的MQTT主题topic1,这样就可以获得开关机状态了,并且用一个接口来接受我们(用户)发送的开关机命令或者查询命令
编写前端应用,比如Android应用,然后对接服务器的API,达到可以控制开关机的目的。当然,最好服务器采用带用户界面的WEB应用,这样就直接访问网页操作就好了,最好做权限控制,以及加密通信
到这里基本就完成了
其它
配合 teamviewer 设置开机自启使用就可以随时随地使用自己的电脑啦~~
代码
木有现成的工程噢嘿嘿嘿
贴个简单的框架代码吧(无法直接使用)
ESP32:
MQTT库使用这里的或这个
两个线程, 一个定时上传状态数据,另一个接受MQTT消息并处理
这里的示例消息内容没有加密,在接收到指令后做动作即可
出现错误捕获重启就好了~
client=MQTTClient(CLIENT_ID,SERVER)
g_power_status=machine.Pin(21,machine.Pin.IN,0)
g_power_control=machine.Pin(22,machine.Pin.OUT,0)
defpower_status():
globalg_power_status
returng_power_status.value()
defpower_on():
globalg_power_control
g_power_control.value(1)
time.sleep(1.5)
g_power_control.value(0)
defpower_off():
globalg_power_control
g_power_control.value(1)
time.sleep(1.5)
g_power_control.value(0)
defpower_off_force():
globalg_power_control
g_power_control.value(1)
time.sleep(6)
g_power_control.value(0)
defsub_cb(topic,msg):
print((topic,msg))
iftopic==TOPIC_DOWN:
ifmsg==b"on":
print("receive power on")
power_on()
elifmsg==b"off":
print("receive power off")
power_off()
elifmsg==b"off force":
print("receive power off force")
power_off_force()
elifmsg==b"status":
print("receive status")
upload=b'{"power":%d}'%(power_status())
print("upload:",upload)
client.publish(TOPIC_UP,upload)
defmain():
globalclient
client.set_callback(sub_cb)
client.connect()
client.subscribe(TOPIC_UP)
client.subscribe(TOPIC_DOWN)
print("Connected to %s, subscribed to %s and %s topic"%(SERVER,TOPIC_UP,TOPIC_DOWN))
try:
while1:
client.wait_msg()
finally:
client.disconnect()
if__name__=="__main__":
t=Thread(target=upload_thread)
t.start()
try:
main()
exceptExceptionase:
machine.reset()
服务器:
以 Flask 为例,同样没有加密过程,大概上是这样的:
app=Flask(__name__)
@app.route('/set')
defset():
cmd=request.args.get("cmd")
ifcmd==None:
cmd="param error cmd"
else:
mqtt_client.publish(TOPIC_DOWN,cmd)
returncmd
@app.route('/get')
defget_status():
globaldevice_status
mqtt_client.publish(TOPIC_DOWN,"status")
returndevice_status
defon_connect(client,userdata,flags,rc):
print("Connected with result code "+str(rc))
client.subscribe(TOPIC_UP)
print("subscribe topic succss")
globalisConnected
isConnected=True
print("connected")
# The callback for when a PUBLISH message is received from the server.
defon_message(client,userdata,msg):
print(len(msg.payload))
timeNow=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print(timeNow+":"+msg.topic+" "+str(msg.payload))
ifmsg.topic==TOPIC_UP:
globaldevice_status
device_status=timeNow+": "+msg.payload.decode('utf-8')
defweb_task():
app.run(host="0.0.0.0",port=12345)
defmqtt_task():
client=mqtt.Client(
client_id="RPCC_server2",
clean_session=True,
userdata=None,
# protocol=MQTTv311
)
globalmqtt_client
mqtt_client=client
client.on_connect=on_connect
client.on_message=on_message
print("connect mqtt")
client.connect("mqtt.com",1883,60)
print("connect mqtt end")
client.loop_forever()
if__name__=="__main__":
t=threading.Thread(target=web_task)
t.setDaemon(True)
t.start()
mqtt_task()
然后打开浏览器输入.../get就可以得到状态了,.../set?cmd=on就可以开机了
计算机强制关机原理,电脑远程开机 ( 与开关按键作用一样可强制开关机 , 非网络唤醒(WOL) ) (ESP32 8266)...相关推荐
- 使用米家智能插座实现电脑远程开机
本篇文章原文为<使用米家智能插座实现电脑远程开机> 0.背景 这篇博客探讨一个远程控制时相对痛点的问题--开关机.我们都知道,远程软件数不胜数,Teamviewer.VNC等等.但这些软件 ...
- 如何实现电脑远程开机
如何实现电脑远程开机 ------------------------------------------- 远程唤醒技术,英文简称WOL,即Wake-on-LAN,是指可以通过局域网实现远程开机,无 ...
- 怎么使用计算机开机关机,设置电脑自动开机关机的方法介绍
有特殊需求的朋友会用到设置电脑自动开机,可以通过电脑自带的功能,也可以借助软件来实现电脑自动开机.下面小编就为大家介绍一下具体的方法吧,欢迎大家参考和学习. : 自动定时开机的实现:首先在启动计算机时 ...
- 无需外设实现电脑远程开机
所谓的远程开机本质上就是触发电脑电源的断电.通电功能(台式机.笔记本都是同样的道理),向日葵等远程软件的什么智能插拔.某某棒等本质上就是这个原理,并没有特殊功能,就是借助BIOS自身的功能,实现通断电 ...
- java实现电脑远程开机(网络唤醒)
网络唤醒的原理:通过有线网卡执行开机操作,需要主板和网卡全都支持网络唤醒功能, 注意,只有插网线的网卡才支持网络唤醒,wifi是无法远程开机的, 被唤醒的计算机需要在同一局域网中,通过UDP广播的方式 ...
- c# 远程网络唤醒电脑(电脑远程开机+内网MAC和IP扫描)(附带源码+主板和Windows开启详细说明+外网远程唤醒方案)
一.需求 1.人在公司坐,昨晚写的文档放在家中电脑忘记Copy了,想要访问家中电脑拿到文档. 2.家中或公司中局域网内有某台电脑(或服务器)要开机,或者批量一键打开局域网内某些电脑 二.必备条件 1. ...
- 手机控制电脑远程开机,笔记本与老电脑都能实现
一提到远程开机,大家首先想到的就是有多高多深的技术含量,但今天我要告诉你,其实远程开机特别简单.办公一族,本来可以回家再做的事情却要经常加班,不是因为什么,就是因为家里没有电脑或者没有不具备办公室里的 ...
- ESP8266 Nodemcu 开发板 + Blinker 电脑远程开机支持小爱同学和手机APP
文章目录 前言 一.物联网是什么? 二.效果展示 1.使用的硬件 2.接线展示 三.TMP模块供电,状态检测 四 代码解析 1. 指定PIN,定义一些按钮 2.这是小爱同学的代码,BLinker还支持 ...
- 计算机开机入门学,初学者必学如何开关机
电脑如何开机,电脑如何关机,电脑如何启动和关闭呢?这里我们就来看看电脑是如何开关的,电脑的启动与关闭可跟我们开关电视不一样哟.这里必须要强调的是,电脑如果不是到了非常必要的时候,是绝对不能直接通过关闭 ...
最新文章
- document.body.scrollTop的值为零问题
- SAP CRM和Hybris里的Product Variant
- smartfoxserver扩展里面过滤聊天的不合法字符
- mysql 内存溢出_mysql - MySQL在非常大的表上计算性能 - 堆栈内存溢出
- python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
- ddns客户端_DDNS哪家最方便?试试看Mikrotik的ROS!
- 一文聊“图”,从图数据库到知识图谱
- 量数据导出Excel 之 多重影分身之术
- struts2基础----自定义拦截器
- sql 缓冲池_运行中SQL Server缓冲池
- 2018.02.26 9周4次课
- call_user_func_array 调用回调函数
- 省中心IEPGM同步到地市的IEPGM有问题,中心为“已商用”状态,地市为“已上架”状态
- struts2 拦截器返回值问题
- GANDCRAB V5.2勒索病毒,不可破解,尽快防御!
- Windows的计划任务
- windows xp 下载老版本的chrome浏览器
- 某汽车零部件制造厂商
- 给定一个年月日,计算那天是星期几(数学)
- 小马模拟器 (支持Android系统)
热门文章
- Thunderbird 60.0版本发布
- 保健品微商如何通过头条号引流?头条号引流有哪些需要注意?
- FreeCAD 视频教程,持续更新中
- 隆重给大家拜早年了,并顺道推荐几部影片~~
- 猪猪猫.CN-WINXPSP2电脑城装机12[家庭版]
- python 根号化简_Python学习之如何简化代码?六大技巧!
- Nginx的安装与基本应用
- vs2010c语言通讯录读取,用C语言实现通讯录(二、动态版+文件保存信息)
- android移植 开发板,iTOP-4412开发板-Android5.1- 移植教程
- 【Unity植物大战僵尸】音效管理器开发(二十四)