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

news2024/12/24 0:10:10

文章目录

  • 一、环境准备
  • 二、开关机原理
    • 数据传输框架
  • 三、环境搭建
    • 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 getpass

def connTCP():
    global tcp_client_socket
    # 创建socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # IP 和端口
    server_ip = 'bemfa.com'
    server_port = 8344
    try:
        # 连接服务器
        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.coloradmin.cn/o/1894524.html

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

相关文章

透过 Go 语言探索 Linux 网络通信的本质

大家好,我是码农先森。 前言 各种编程语言百花齐放、百家争鸣,但是 “万变不离其中”。对于网络通信而言,每一种编程语言的实现方式都不一样;但其实,调用的底层逻辑都是一样的。linux 系统底层向上提供了统一的 Sock…

君子签区块链+AI,驱动组织实现高效合同管理、精准风险控制

在传统合同签署的过程中,企业、组织、机构都面临着合同签署与管理的诸多问题和挑战:合同种类繁多、数量庞大导致起草效率低下;管理流程繁琐、权限分散使得审批周期冗长且效率低下;合同签订版本难以精准复核,风险防控更…

大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点: 高并发、大流量:这些系统必须能够处理成千上万甚至数百万的并发用户请求,以及持续…

深入理解pytest fixture:提升测试的灵活性和可维护性!

在现代软件开发中,测试是保证代码质量的重要环节。pytest作为一个强大的测试框架,以其灵活的fixture系统脱颖而出。本文将详细介绍pytest中的fixture概念,通过具体案例展示其应用,并说明如何利用fixture提高测试的灵活性和可维护性…

CVPR 2024最佳论文:“神兵”的组合器 Generative Image Dynamics

CVPR 2024的最佳论文来自谷歌、美国加州大学圣迭戈分校。两篇都来至于视频生成领域,可见今年外界对视频生成领域关注度很高。今天的这篇是“Generative Image Dynamics”,Google Research发布的。它的研究成果令人震惊,从单张RGB图像生成连续…

VIM介绍

VIM(Vi IMproved)是一种高度可配置的文本编辑器,用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的,后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名,是许…

【pytorch14】感知机

单层感知机模型 对于单层的感知机,它的激活函数是一个sigmoid 对于符号的定义做一个规范化,输入层每一层进行一个编号 输入是第0层,上标0表示属于输入层,下标0到n表示一共有n个节点(这里严格来说应该是0~n-1,为了书写…

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?

6 月 27 日,全球知名的开源平台 Hugging Face 的联合创始人兼首席执行官 Clem 在社交平台激动宣布,阿里 Qwen2-72B 成为了开源模型排行榜的王者。 这是一件大好事,说明了我们在大模型领域从先前的追赶,逐渐走向了领导,…

【 VIPKID-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

Redis 7.x 系列【17】四种持久化策略

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一:…

初学Spring之自动装配 Bean

Bean 的作用域: 1.单例模式(Spring 默认机制) scope“singleton” 2.原型模式:每次从容器中 get 时,都会产生一个新对象 scope"prototype" 3. request、session、application,只能在 web 开…

不可变集合

目录 1.1 什么是不可变集合 1.2 不可变集合分类 1.3 不可变的list集合:list of 1.4 不可变的Set集合:set.of 1.5 不可变的Map集合 1.5.1:键值对个数小于等于10 1.5.2:键值对个数大于10 Map.ofEntries方法: copy…

JBoss JMXInvokerServlet 反序列化漏洞

漏洞原理: 这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。 影响版本: JBoss Enterprise Application Platform 6…

如视“VR+AI”实力闪耀2024世界人工智能大会

7月4日,2024世界人工智能大会暨人工智能全球治理高级别会议(以下简称为“WAIC 2024”)在上海盛大开幕,本届大会由外交部、国家发展和改革委员会、教育部等部门共同主办,围绕“以共商促共享 以善治促善智”主题&#xf…

【虚拟机】虚拟机网络无法访问问题【已解决】

【虚拟机】虚拟机无法上网问题【已解决】 问题探究解决方法法1:查看相关“网络服务”是否处于正常启动状态法2:重启网络法3:重新安装VMWare法4:使用NAT模式,每次打开win7都没连上网的解决办法 问题探究 安装了很多个虚…

昇思MindSpore学习总结八——静态图加速

AI编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。两种运行模式的详细介绍如下: 1、动态图模式 动态图的特点是计算图的构建和计算同时发生(D…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法,使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上,所有的vue模板都是语法层面的HTML,可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。 今天要介绍的这位同学,是来自深圳中学的高二某班的欧阳达晟同学&#x…

一、强化学习基本概念

一、强化学习基本概念 1.1 何为强化学习?1.2 强化学习的环境1.3 强化学习的目标1.4 强化学习的数据 1.1 何为强化学习? 强化学习(Reinforcement Learning, RL)是机器通过与环境交互来实现目标的一种计算方法。机器和环境的一轮交互是指:机器在…

Spring AI之后,阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI

阿里推出Spring Cloud Alibaba AI,接入体验篇——Java也能方便用 AI 1.Spring AI2.Spring Cloud Alibaba AI3. 接入体验 1.Spring AI Spring AI 是 Spring 官方社区项目,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通…