【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.pswp.cn/web/39698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39698.shtml
英文地址,請注明出處:http://en.pswp.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的隊伍…