当前位置: 首页 > news >正文

【test】小爱同学通过esp32控制电脑开关

文章目录

  • 一、环境准备
  • 二、开关机原理
    • 数据传输框架
  • 三、环境搭建
    • 1.巴法云平台设置
    • 2.米家设置
    • 3.windows网络唤醒设置
    • 4.搭建esp32开发环境并部署
    • (1)新建项目
    • (2)导入esp32库
    • (3) 添加库
    • (4)导入库AsyncTCP和WakeOnLan
    • 5.关机python脚本配置
      • main.py

一、环境准备

win11、小爱音箱、esp32(通过wol唤醒电脑)、巴法云平台注册

这里使用的是esp32-cam

在这里插入图片描述

二、开关机原理

开机利用WOL技术,Wake-On-LAN简称WOL,是一种电源管理功能;如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒。许多主板厂商支持IBM提出的网络唤醒标准。该标准允许网络管理员远程打开PC机电源,以便进行文件升级、资源跟踪和设备清点等工作。WOL在还未广泛的采用,但在网络时代却具有广阔的发展前景。Wake-On-LAN的实现,主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊数据包,俗称魔术包(Magic Packet)。MagicPacket格式虽然只是AMD公司开发推广的技术,并非世界公认的标准,但是仍然受到很多网卡制造商的支持,因此许多具有网络唤醒功能的网卡都能与之兼容。wol基本实现原理实现是向需要被唤醒的终端网卡发送FFFFFFFFFFFFFF+目标主机MAC地址(重复16次)所组成的一个数据包,网卡收到数据后终端。(需要主板支持WOL,在BIOS中设置打开)

wol参考:https://blog.csdn.net/a18359388932/article/details/126949062

关机则通过获取巴法云获取关机指令,再通过python执行关机命令实现。

数据传输框架

小爱其实是不直接操作内网被控的电脑,而是通过小爱给一个第三方物联网平台巴法云发送一个消息,而你内网要部署一个用来接收巴法云下发的消息的程序,一旦接收到状态有发生变化,就执行一些执行,比如发送魔术包开机,再比如通过脚本ssh登录你的主机Windows主机执行关机命令.

在这里插入图片描述

三、环境搭建

1.巴法云平台设置

打开巴法科技&巴法云-巴法设备云-巴法物联网云平台 (bemfa.com),点击注册

TCP创客云-》新建主题 pc006 -》设置昵称为电脑

注意:

新建主题的名称pc可以任意修改,但末尾必须是006,表示开关设备

修改设备昵称,这个昵称电脑就是后面在米家中控制的名称

记住私钥、主题(pc006)后续会用到

在这里插入图片描述

2.米家设置

打开手机app米家-我的-添加其他平台-添加-选择巴法-登录巴法账号-同步设备;

同步成功后会显示出电脑图标,后面就可以通过小爱同学语音控制"打开电脑"

3.windows网络唤醒设置

进入BIOS设置wol(自行百度设置)

1.打开设备管理器,点击网络适配器,右键属性,将电源管理的两个勾勾打上;

在高级设置里面将关机网络唤醒和魔术封包唤醒开启

在这里插入图片描述

4.搭建esp32开发环境并部署

参考:

https://blog.csdn.net/weixin_43935402/article/details/125590294

环境搭建完毕后:

本项目使用 Arduino 框架。

  • WakeOnLan : https://github.com/a7md0/WakeOnLan
  • AsyncTCP : https://github.com/me-no-dev/AsyncTCP

参考:

https://github.com/yeyt97/ESP32-Bemfa-WOL-Tool/tree/main

(1)新建项目

在这里插入图片描述

(2)导入esp32库

在这里插入图片描述

(3) 添加库

在这里插入图片描述

添加库WakeOnLan

在这里插入图片描述

添加库AsyncTCP

在这里插入图片描述

(4)导入库AsyncTCP和WakeOnLan

在这里插入图片描述

添加文件bemfa_client.hpp、wifi_helper.hpp:

在这里插入图片描述

将main.cpp拷贝到.ino文件中
见src目录
https://github.com/yeyt97/ESP32-Bemfa-WOL-Tool/tree/main
在这里插入图片描述

#include "bemfa_client.hpp"
#include "WakeOnLan.h"
#include "wifi_helper.hpp"BemfaClient* bemfaClient;
WifiHelper* wifiHelper;WiFiUDP UDP;
WakeOnLan WOL(UDP);const int LED_Pin = 2;const char *SSID = "xxx";  // wifi名称
const char *PSW = "xxx";  // wifi密码const char *UID = "xxx";  // 巴法云的UID
const char *TOPIC = "pc006";  // 巴法云中创建的TOPIC(不是昵称)const char *TARGET_MAC_ADDR = "xxx";  // 要启动的电脑的MAC地址void blinkTwice() {digitalWrite(LED_Pin, HIGH);delay(200);digitalWrite(LED_Pin, LOW);delay(200);digitalWrite(LED_Pin, HIGH);delay(200);digitalWrite(LED_Pin, LOW);
}void setup() {Serial.begin(115200);Serial.println("Beginning...");wifiHelper = new WifiHelper(SSID, PSW, LED_Pin);bemfaClient = new BemfaClient(UID, TOPIC);bemfaClient->addCommand("on", []{Serial.println("Send magic packet");WOL.setRepeat(3, 100);WOL.calculateBroadcastAddress(WiFi.localIP(), WiFi.subnetMask());WOL.sendMagicPacket(TARGET_MAC_ADDR);blinkTwice();});
}void loop() {wifiHelper->tick();bemfaClient->tick();
}

编译烧录即可,然后通过小爱同学“打开电脑”即可控制电脑开机

5.关机python脚本配置

安装python

参考:https://docs.python.org/zh-cn/3/using/index.html

#安装相关依赖
pip install requests
pip install schedule
pip install pyinstaller

python打包
https://www.cnblogs.com/weilaiqinkong/p/17240065.html

如:pyinstaller -F -w main.py

巴法云平台tcp连接参考:https://bbs.bemfa.com/81

main.py


# -*- coding: utf-8
import socket
import threading
import time
import os
import shutil
import sys
import getpassdef connTCP():global tcp_client_socket# 创建sockettcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# IP 和端口server_ip = 'bemfa.com'server_port = 8344try:# 连接服务器tcp_client_socket.connect((server_ip, server_port))#发送订阅指令substr = 'cmd=1&uid=巴法云私钥&topic=pc006\r\n'tcp_client_socket.send(substr.encode("utf-8"))except:time.sleep(2)connTCP()#心跳
def Ping():# 发送心跳try:keeplive = 'ping\r\n'tcp_client_socket.send(keeplive.encode("utf-8"))except:time.sleep(2)connTCP()#开启定时,30秒发送一次心跳t = threading.Timer(30,Ping)t.start()connTCP()
Ping()while True:# 接收服务器发送过来的数据recvData = tcp_client_socket.recv(1024)if len(recvData) != 0:data = recvData.decode('utf-8')print('recv:', data)if "on" in data:print("do nothing!")elif "off" in data:print("starting poweroff after 3s ...")# 3s后 系统自动关机print(os.system('shutdown -s -t 3'))else:print("conn err")connTCP()

设置main.exe开机启动

https://www.cnblogs.com/muxiaomu/p/16649990.html

相关文章:

  • JBoss JMXInvokerServlet 反序列化漏洞
  • 算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型
  • Maven 构建过程
  • stm32——定时器级联
  • 新火种AI|AI搜索挑战百度谷歌,重塑信息检索的市场?
  • React@16.x(44)路由v5.x(9)源码(1)- path-to-regexp
  • mysql查询父级树
  • 【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战
  • linux下mysql的定时备份
  • 自动化设备上位机设计 一
  • 音视频入门基础:H.264专题(8)——H.264官方文档的描述符
  • 安装 Mamba、Conv1d 时报错 “bare_metal_version“
  • MySQL数据恢复(适用于误删后马上发现)
  • 软件测试面试题:Redis的五种数据结构,以及使用的场景是什么?
  • 【操作系统期末速成】 EP01 | 学习笔记(基于五道口一只鸭)
  • 网络传输文件的问题
  • 【Linux系统编程】快速查找errno错误码信息
  • 【刷算法】求1+2+3+...+n
  • Angular 2 DI - IoC DI - 1
  • C# 免费离线人脸识别 2.0 Demo
  • eclipse的离线汉化
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • SQL 难点解决:记录的引用
  • 从伪并行的 Python 多线程说起
  • 京东美团研发面经
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 算法之不定期更新(一)(2018-04-12)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 通过npm或yarn自动生成vue组件
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 小程序button引导用户授权
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)逆序输出字符串
  • (solr系列:一)使用tomcat部署solr服务
  • (二)WCF的Binding模型
  • (翻译)terry crowley: 写给程序员
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (接口自动化)Python3操作MySQL数据库
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)kafka实战——kafka源码编译启动
  • (转)mysql使用Navicat 导出和导入数据库
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net - 类的介绍
  • .NET 4.0中的泛型协变和反变
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 使窗口永不获得焦点
  • .Net实现SCrypt Hash加密
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BT]BUUCTF刷题第8天(3.26)
  • [C#]科学计数法(scientific notation)显示为正常数字