【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 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8入门 | 重要性能衡量指标、训练结果评价及分析及影响mAP的因素【发论文关注的指标】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

从CVPR 2024看 NeRF 最新改进&应用

三维重建领域必不可少的NeRF技术最近又有新突破了! 首先是SAX-NeRF框架,专为稀疏视角下X光三维重建设计,无需CT数据进行训练,只使用 X 光片即可,等于给NeRF开透视眼! 还有清华提出的GenN2N,一…

Canvas合集更更更之实现由画布中心向外随机不断发散的粒子效果

实现效果 1.支持颜色设置 2.支持粒子数量设置 3.支持粒子大小设置 写在最后🍒 源码,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云

VSCode 自动调整格式失效了 ESLint

ESLint【最新注意2.4.4版本有问题,需退回2.4.2版本就恢复正常了】 参考:vscode自动格式化失效_vscode保存自动格式化失效-CSDN博客

【启明智显分享】手持遥控器HMI解决方案:2.8寸触摸串口屏助力实现智能化

现代生活不少家居不断智能化,但是遥控器却并没有随之升级。在遥控交互上,传统遥控器明显功能不足:特别是大屏智能电视,其功能主要由各种APP程序实现。在电脑上鼠标轻轻点击、在手机上触摸屏丝滑滑动,但是在电视上这些A…

新的超好用的baas服务他来了!

新的超好用的BaaS服务它来了! 你是否厌倦了搭建服务的繁琐过程?你是否因为接口API的开发而头疼不已?你是否梦想着能够用最少的精力打造出最棒的应用?如果你的答案是“是”,那么恭喜你,你的救星来了&#x…

kubernetes dashboard安装

1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 对应版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改对应的yaml,…

秋招突击——设计模式补充——单例模式、依赖倒转原则、工厂方法模式

文章目录 引言正文依赖倒转原则工厂方法模式工厂模式的实现简单工厂和工厂方法的对比 抽线工厂模式最基本的数据访问程序使用工厂模式实现数据库的访问使用抽象工厂模式的数据访问程序抽象工厂模式的优点和缺点使用反射抽象工厂的数据访问程序使用反射配置文件实现数据访问程序…

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

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

决策树算法的原理与案例实现

一、绪论 1.1 决策树算法的背景介绍 1.2 研究决策树算法的意义 二、决策树算法原理 2.1 决策树的基本概念 2.2 决策树构建的基本思路 2.2 决策树的构建过程 2.3 决策树的剪枝策略 三、决策树算法的优缺点 3.1 决策树算法的优势 3.2 决策树算法的局限性 3.3 决策树算…

微服务粒度难题:找到合适的微服务大小

序言 在微服务架构风格中,微服务通常设计遵循SRP(单一职责原则),作为一个独立部署的软件单元,专注于做一件事,并且做到极致。作为开发人员,我们常常倾向于在没有考虑为什么的情况下尽可能地将服…

全面教程:在Ubuntu上快速部署ZeroTier,实现Windows与VSCode的局域网无缝访问

文章目录 1 背景介绍2 Windows上的操作3 Ubuntu上的操作4 连接 1 背景介绍 在现代工作环境中,远程访问公司内网的Ubuntu主机对于开发者来说是一项基本需求。然而,由于内网的限制,传统的远程控制软件如向日葵和todesk往往无法满足这一需求。作…

二叉树之遍历

二叉树之遍历 二叉树遍历遍历分类前序遍历流程描述代码实现 中序遍历流程描述代码实现 后序遍历流程描述代码实现 层次遍历流程描述代码实现 总结 二叉树遍历 遍历分类 遍历二叉树的思路有 4 种,分别是: 前序遍历二叉树,有递归和非递归两种…

用dify实现简单的Agent应用(AI信息检索)

这篇文章里,我们来聊聊如何使用字节最新的豆包大模型,在 Dify 上来快速完成一个具备理解需求、自主规划、自主选择工具使用的简单智能体(Agent)。 准备工作 完整准备过程分为:准备 Docker 环境、启动 Dify 程序、启动…

线性代数基础概念:矩阵

目录 线性代数基础概念:矩阵 1. 矩阵的定义 2. 矩阵的运算 3. 矩阵的特殊类型 4. 矩阵的秩 5. 矩阵的初等变换 6. 矩阵的特征值与特征向量 7. 矩阵的应用 8. 矩阵总结 总结 线性代数基础概念:矩阵 矩阵是线性代数中的另一个重要概念&#xff0…

vue目录说明

vue目录说明 主要目录说明 .vscode - - -vscode工具的配置文件夹 node_modules - - - vue项目的运行依赖文件夹 public - - -资源文件夹(浏览器图标) src- - -源码文件夹 .gitignore - - -git忽略文件 index.html - - -入口html文件 package.json - - -…

windows搭建mqtt服务器,并配置DTU收集传感器数据

1.下载并安装emqx服务器 参考:Windows系统下本地MQTT服务器搭建(保姆级教程)_mqtt windows-CSDN博客 这里我下载的是emqx-5.3.0-windows-amd64.zip版本 下载好之后,放到服务器的路径,我这里放的地方是:C…

图像信号处理器(ISP)基础算法及处理流程

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

FreeRTOS之队列上锁和解锁(详解)

这篇文章将记录我学习实时操作系统FreeRTOS的队列上锁和解锁的知识,在此分享给大家,希望我的分享能给你带来不一样的收获! 目录 一、简介 二、队列上锁函数prvLockQueue() 1、函数初探 2、应用示例 三、队列解锁函…

转让北京文化传媒公司带营业性演出经纪许可证

影视文化传播倡导将健康的影视文化有效传播给观众,从而构建观众与电影制作者的良 性沟通与互动,是沟通电影制作者与电影受众的重要桥梁。影视文化泛指以电影,电视方式所进行的全部文化创造,即体现为电影,电视全部的存在…