【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fluwx插件实现微信支付

Flutter开发使用fluwx插件实现微信支付,代码量不多,复杂的是安卓和iOS的各种配置。 在 pubspec.yaml 文件中添加fluwx依赖 fluwx: ^4.5.5 使用方法 通过fluwx注册微信Api await Fluwx().registerApi(appId: wxea7a1c53d9e5849d, universalLink: htt…

基于SpringBoot的大学生租房系统

该系统主要实现了用户和房主通过系统注册用户,登录系统后能够编辑自己的个人信息、查看首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等,还可以对后台进行操作&#…

2024年显著性检测部分论文及代码汇总(3)

ICML Size-invariance Matters: Rethinking Metrics and Losses for Imbalanced Multi-object Salient Object Detection code Abstacrt:本文探讨了显著性检测中评价指标的尺寸不变性,尤其是当图像中存在多个大小不同的目标时。作者观察到,…

Pip换源,以及python解耦方法实现

一、 Pip换源 可以查看文章路径 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy二、 解耦 1.解耦思想 具体查看文章python解耦重构,提高程序维护性 https://editor.csdn.net/md/?articleId140161169 mysql 连接解耦 主要实现方式为mysql配置项…

vue中总线机制(EventBus) EventBus作为所有组件共享的事件中心

一、EventBus的简介 EventBus 又称时间总线 ,理解上来讲 EventBus 机制是通知的概念,EventBus作为所有组件共享的事件中心,既可以发送事件也可以接受事件,所有组件都可以平行的接到到相对应的数据。 新建一个js文件 // EventBus…

双指针算法:快速排序模拟实现

目录 1.思路解析 2:代码展示 1.思路解析 使用双指针pre和cur 指针cur用于检测符合条件的数据 cur和pre数据发生交换用于将符合条件的数据(比key小)向左扔 一轮循环结束时,以pre为分界点,除去key,pre左边的…

物联网IOT,讲的什么?

想象一下,当你早晨醒来,智能咖啡机已经根据你的习惯准备好了香浓的咖啡;家中的温度自动调节至最舒适的状态;出门前,智能冰箱提醒你哪些食材需要补充……这些场景不再是科幻电影里的虚构,而是物联网技术为我们带来的现实便利。 物联网的概念与起源 物联网,顾名思义,是指…

SpringBoot项目,配置文件pom.xml的结构解析

pom.xml 是 Maven 项目对象模型&#xff08;Project Object Model&#xff09;的配置文件&#xff0c;它定义了 Maven 项目的基本设置和构建过程。以下是 pom.xml 文件的基本结构和一些常见元素的解析&#xff1a; 项目声明 (<project>): <modelVersion>: 通常设置…

1.HI3559AV100 官方开发板sample运行

1.内核、文件系统部分 有关uboot&#xff0c;kernel&#xff0c;rootfs部分就不赘述&#xff0c;直接在SDK提供的镜像文件进行烧录即可。2.编译MPP下的sample运行 实验前准备&#xff1a;通过NFS方式挂载到开发板与主机通信传输文件 驱动和库的部署&#xff1a;把MPP目录下的…

单例模式详解:概念与实用技巧

目录 单例模式单例模式结构单例模式适用场景单例模式优缺点练手题目题目描述输入描述输出描述输入示例输出示例提示信息题解 单例模式 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 只有一个实例的…

阿里巴巴店铺电话采集软件操作步骤解析

以下是一个简单的程序&#xff0c;用于访问1688店铺并获取店铺信息&#xff1a; import requestsdef get_store_info(store_id):# 构建请求URLurl fhttps://detail.1688.com/offer/{store_id}.html# 发送GET请求response requests.get(url)# 如果请求成功if response.status…

震惊!运气竟能如此放大!运气的惊人作用,你了解吗?

芒格&#xff1a;得到你想要的东西&#xff0c;最保险的办法&#xff0c;就是让自己配得上你想要的那个东西。今天仔细想了想这句话&#xff0c;他其实说的是无数成功人士的心声 —— “我配得上&#xff01;” 美剧《绝命毒师》有个导演叫文斯吉里根&#xff08;Vince Gilliga…

注解【开发实践】

文章目录 一、注解概述1.1 什么是注解1.2 注解的作用1.3 一些特殊的注解 二、元注解2.1 Retention2.2 target2.3 Documented2.4 Inherited2.5 Repeatable 三、注解的使用3.1 定义注解3.2 编写注解处理器3.3 注册注解处理器 一、注解概述 1.1 什么是注解 注解&#xff08;Anno…

大疆2025校招内推

需要内推码的请留言哦 期待你的加入

windows@资源管理器中的地址栏@访问共享文件夹的各种方法@管理共享文件夹

文章目录 资源管理器中的地址栏可以访问什么访问共享文件夹&#x1f47a;UNC路径资源管理器打开共享文件夹纯命令行方式访问共享文件夹 共享文件夹相关操作查看所有已经共享的文件夹&#x1f47a;停止某个文件的共享 共享文件夹的访问控制补充匿名访问问题&#x1f60a;强制启用…

集群限流sentinel实践

参考&#xff1a; 集群模式 实践 集群流控规则 其中 用一个专门的 ClusterFlowConfig 代表集群限流相关配置项&#xff0c;以与现有规则配置项分开&#xff1a; // 全局唯一的规则 ID&#xff0c;由集群限流管控端分配. private Long flowId;// 阈值模式&#xff0c;默认&…

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.5-2.6

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第二周&#xff1a;机器学习策略&#xff08;2&#xff09;(ML Strategy (2))2.5 数据分布不匹配时的偏差与方差的分析&#xff08;Bias and Variance with mismatched data di…

师从IEEE fellow|博士后加拿大阿尔伯塔大学成行

V老师指定申请加拿大&#xff0c;优先对方出资的博士后&#xff0c;如果外方无资助&#xff0c;也可以自筹经费&#xff0c;但要求必须是博士后头衔。最终我们为其落实了加拿大阿尔伯塔大学的postdoctoral fellow&#xff08;博士后研究员&#xff09;&#xff0c;尽管是无薪职…

adb的使用

xcode&#xff1a;https://juejin.cn/post/7005854415420653604 安装 https://zhuanlan.zhihu.com/p/662190715 使用 1.安卓手机打开开发者模式&#xff0c;并连接电脑 2.在mac终端输入命令adb logcat | grep {tag_name}即可查看日志 常用命令&#xff1a; https://zhuan…

2024亚太杯中文赛数学建模选题建议及各题思路来啦!

大家好呀&#xff0c;2024年第十四届APMCM亚太地区大学生数学建模竞赛&#xff08;中文赛项&#xff09;开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c; 本次亚太杯推荐大家选择B题目。C题目难度较高&#xff0c;只建议用过kaiwu的队伍…