远程开关及功能, 而且是直接控制主机开关机键, 而不是使用 `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)...相关推荐

  1. 使用米家智能插座实现电脑远程开机

    本篇文章原文为<使用米家智能插座实现电脑远程开机> 0.背景 这篇博客探讨一个远程控制时相对痛点的问题--开关机.我们都知道,远程软件数不胜数,Teamviewer.VNC等等.但这些软件 ...

  2. 如何实现电脑远程开机

    如何实现电脑远程开机 ------------------------------------------- 远程唤醒技术,英文简称WOL,即Wake-on-LAN,是指可以通过局域网实现远程开机,无 ...

  3. 怎么使用计算机开机关机,设置电脑自动开机关机的方法介绍

    有特殊需求的朋友会用到设置电脑自动开机,可以通过电脑自带的功能,也可以借助软件来实现电脑自动开机.下面小编就为大家介绍一下具体的方法吧,欢迎大家参考和学习. : 自动定时开机的实现:首先在启动计算机时 ...

  4. 无需外设实现电脑远程开机

    所谓的远程开机本质上就是触发电脑电源的断电.通电功能(台式机.笔记本都是同样的道理),向日葵等远程软件的什么智能插拔.某某棒等本质上就是这个原理,并没有特殊功能,就是借助BIOS自身的功能,实现通断电 ...

  5. java实现电脑远程开机(网络唤醒)

    网络唤醒的原理:通过有线网卡执行开机操作,需要主板和网卡全都支持网络唤醒功能, 注意,只有插网线的网卡才支持网络唤醒,wifi是无法远程开机的, 被唤醒的计算机需要在同一局域网中,通过UDP广播的方式 ...

  6. c# 远程网络唤醒电脑(电脑远程开机+内网MAC和IP扫描)(附带源码+主板和Windows开启详细说明+外网远程唤醒方案)

    一.需求 1.人在公司坐,昨晚写的文档放在家中电脑忘记Copy了,想要访问家中电脑拿到文档. 2.家中或公司中局域网内有某台电脑(或服务器)要开机,或者批量一键打开局域网内某些电脑 二.必备条件 1. ...

  7. 手机控制电脑远程开机,笔记本与老电脑都能实现

    一提到远程开机,大家首先想到的就是有多高多深的技术含量,但今天我要告诉你,其实远程开机特别简单.办公一族,本来可以回家再做的事情却要经常加班,不是因为什么,就是因为家里没有电脑或者没有不具备办公室里的 ...

  8. ESP8266 Nodemcu 开发板 + Blinker 电脑远程开机支持小爱同学和手机APP

    文章目录 前言 一.物联网是什么? 二.效果展示 1.使用的硬件 2.接线展示 三.TMP模块供电,状态检测 四 代码解析 1. 指定PIN,定义一些按钮 2.这是小爱同学的代码,BLinker还支持 ...

  9. 计算机开机入门学,初学者必学如何开关机

    电脑如何开机,电脑如何关机,电脑如何启动和关闭呢?这里我们就来看看电脑是如何开关的,电脑的启动与关闭可跟我们开关电视不一样哟.这里必须要强调的是,电脑如果不是到了非常必要的时候,是绝对不能直接通过关闭 ...

最新文章

  1. document.body.scrollTop的值为零问题
  2. SAP CRM和Hybris里的Product Variant
  3. smartfoxserver扩展里面过滤聊天的不合法字符
  4. mysql 内存溢出_mysql - MySQL在非常大的表上计算性能 - 堆栈内存溢出
  5. python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
  6. ddns客户端_DDNS哪家最方便?试试看Mikrotik的ROS!
  7. 一文聊“图”,从图数据库到知识图谱
  8. 量数据导出Excel 之 多重影分身之术
  9. struts2基础----自定义拦截器
  10. sql 缓冲池_运行中SQL Server缓冲池
  11. 2018.02.26 9周4次课
  12. call_user_func_array 调用回调函数
  13. 省中心IEPGM同步到地市的IEPGM有问题,中心为“已商用”状态,地市为“已上架”状态
  14. struts2 拦截器返回值问题
  15. GANDCRAB V5.2勒索病毒,不可破解,尽快防御!
  16. Windows的计划任务
  17. windows xp 下载老版本的chrome浏览器
  18. 某汽车零部件制造厂商
  19. 给定一个年月日,计算那天是星期几(数学)
  20. 小马模拟器 (支持Android系统)

热门文章

  1. Thunderbird 60.0版本发布
  2. 保健品微商如何通过头条号引流?头条号引流有哪些需要注意?
  3. FreeCAD 视频教程,持续更新中
  4. 隆重给大家拜早年了,并顺道推荐几部影片~~
  5. 猪猪猫.CN-WINXPSP2电脑城装机12[家庭版]
  6. python 根号化简_Python学习之如何简化代码?六大技巧!
  7. Nginx的安装与基本应用
  8. vs2010c语言通讯录读取,用C语言实现通讯录(二、动态版+文件保存信息)
  9. android移植 开发板,iTOP-4412开发板-Android5.1- 移植教程
  10. 【Unity植物大战僵尸】音效管理器开发(二十四)