你们得体谅一下题主的难处:不好直接拒绝人家。所以最好的办法就是电脑在他不在的时候会出现奇怪的问题,而题主在的时候,即使题主不做任何操作机器也完全正常。
所以我花了点时间做了个小东西,原理非常简单:
nodemcu非常小巧,可以轻松的安装到电脑机箱里。按照下图把线接好,就可以实现平时电源键完全失效,按了也不开机。反之,只要回到家里,手机没开飞行模式的话就会被它检测到,然后电源键就可以正常工作了从而开机了。这样以来,室友必然百思不得其解。
代码都是现成的,我稍微改了一下。
用到的库
#include "./esppl_functions.h" #define LIST_SIZE 2 #define RELAY_PIN D0 unsigned long key_detected_time; //这里填手机的MAC地址 uint8_t keymac[LIST_SIZE][ESPPL_MAC_LEN] = { {0x11, 0x11, 0x11, 0x11, 0x11, 0x11} ,{0x22, 0x22, 0x33, 0x44, 0x55, 0x66} }; String devicename[LIST_SIZE] = { "device 1" ,"device 2" }; bool maccmp(uint8_t *mac1, uint8_t *mac2) { for (int i=0; i < ESPPL_MAC_LEN; i++) { if (mac1[i] != mac2[i]) { return false; } } return true; } void cb(esppl_frame_info *info) { for (int i=0; i<LIST_SIZE; i++) { if (maccmp(info->sourceaddr, keymac[i]) || maccmp(info->receiveraddr, keymac[i])) { Serial.printf("
%s is here!", devicename[i].c_str()); key_detected_time = millis(); } } } void setup() { delay(500); Serial.begin(115200); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); esppl_init(cb); key_detected_time = millis() - 6000000; } void loop() { esppl_sniffing_start(); while (true) { for (int i = ESPPL_CHANNEL_MIN; i <= ESPPL_CHANNEL_MAX; i++ ) { esppl_set_channel(i); while (esppl_process_frames()) { // } // 如果10分钟之内有检测到指定设备 if (millis() - key_detected_time < 600000) { digitalWrite(RELAY_PIN, HIGH); } else { digitalWrite(RELAY_PIN, LOW); } } } }
然后把固件编译好刷入nodemcu就可以用了
效果演示
https://www.zhihu.com/video/1294301450726965248其中继电器的指示灯亮了,就是接通了。
一些可能会出现的问题和讨论
当然喽,这篇回答还是娱乐为主,日后题主跟室友发生了任何矛盾都不要来找我哈。
最后还是希望大家把这个用到正地方哈。比如DIY酷炫的开机方案,或者检测到主人回家自动启动照明和空调什么。
WIN10自带这个功能,叫做“动态锁”
Windows可以通过与你的电脑配对的设备获悉你何时离开,并在这些设备超出范围时锁定电脑。
如上图是我的动态锁,我设置成了我的iPhone手机。当Windows检测到这个手机的蓝牙信号消失时,电脑就会被强制锁屏。
大方点,用用有啥。
但是注意里面不要放他没有权限看的保密文件。如果你有这一类的文件的话。