文章目录

  • 前言
  • 一、物联网是什么?
  • 二、效果展示
    • 1.使用的硬件
    • 2.接线展示
  • 三.TMP模块供电,状态检测
  • 四 代码解析
    • 1、 指定PIN,定义一些按钮
    • 2、这是小爱同学的代码,BLinker还支持天猫精灵,我没有!
    • 3、这一块有点乱了,不过还是能接受的
    • 4、主体结构
  • 五 最终的效果
  • 总结

前言

电脑远程启动的方法有很多,前几年我都是使用NAS运行Docker的形式,使用WOL的方式唤醒,但是还得在关机的问题上下功夫。最近研究了一下物联网,于是乎这个问题就显得如此的简单了。温馨提示:请操作机箱前先保存好电脑里的东西,不要问我为什么!


一、物联网是什么?

我的理解万物皆可联,只要用电就能改成智能化。

二、效果展示

1.使用的硬件

1Nodemcu开发板
2、公对母 杜邦线 43、母对母 杜邦线 2根
最重要的还有你要有一台台式机。

2.接线展示

接线原理:
将机箱内开关按键杜邦线拔出,中间接上Nodemcu。TMP3.3VSB是TMP模块长供电的,状态检测线也是用这个模块实现的。

三.TMP模块供电,状态检测

因为这一块不是都一样的,所以我拿出来说一下。我的主板是华硕 ROG STRIX Z390-H GAMING,本来我都想好用usb供电了,在浏览论坛的时候看到有人说这个模块,但不是每个主板都有的,我就从官网找到主板的使用说明,其中有介绍话不多说上图。

不难看出,供电迎刃而解,不过+3V的口都是在开机状态下才会有电的,那通过这种特性,可以把+3V作为状态检测来用,有电就是开机,没电就是关机。供电也不是只能选择+3VSB,听论坛的人说可以从硬盘电源线中接电,由于我找到了解决方式所以没试。这样供电和状态检测就解决了,其他的接线就是插的问题了。

四 代码解析

1、 指定PIN,定义一些按钮

/* 导入自建库文件 */
#include "ISTMAIN.h" //自建库,不用搜
#include "ISTWEB.h" //自建库,不用搜
#include "OneButton.h"
#include <Ticker.h>Ticker flipper; //定义定时器#define PW_W 13//定义外部开关连接 D7接开关按钮
#define PW_N 14//定义内部开关连接,D5接主板的,POWER3.3V
#define PW_STA 4//定义状态检测PIN
bool PW_STA_INIT = false;       //初始化开关机状态OneButton button(PW_W, true); //使用onebutton实现物理按键长按短按的功能
// 新建组件对象
BlinkerButton Button1("btn-abc");// 按下按键即会执行该函数
void button1_callback(const String & state)
{Serial.println("已按下!");digitalWrite(PW_N, 0);Blinker.delay(500);digitalWrite(PW_N, 1);Button1.text("正在操作");flipper.attach(10, flip);
}

2、这是小爱同学的代码,BLinker还支持天猫精灵,我没有!

void miotPowerState(const String & state)
{BLINKER_LOG("need set power state: ", state);if (state == BLINKER_CMD_ON && digitalRead(PW_STA) == 0) {button1_callback("on"); //模拟按键开关机BlinkerMIOT.powerState("on");//小爱反馈状态BlinkerMIOT.print();PW_STA_INIT = true; //电脑状态赋值}else if (state == BLINKER_CMD_OFF && digitalRead(PW_STA) == 1) {button1_callback("off");BlinkerMIOT.powerState("off"); BlinkerMIOT.print();PW_STA_INIT = false; }
}
//查询电脑状态
void miotQuery(int32_t queryCode) {BLINKER_LOG("XiaoAi Query codes: ", queryCode);switch (queryCode) {//小爱查询全部内容case BLINKER_CMD_QUERY_ALL_NUMBER :BLINKER_LOG("MIOT Query All");BLINKER_LOG(digitalRead(PW_STA));BlinkerMIOT.powerState(digitalRead(PW_STA) ? "on" : "off");BlinkerMIOT.print();break;case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :BLINKER_LOG("MIOT Query Power State");BlinkerMIOT.powerState(digitalRead(PW_STA) ? "on" : "off");BlinkerMIOT.print();break;default :BlinkerMIOT.powerState(PW_STA_INIT ? "on" : "off");BlinkerMIOT.print();break;}
}

3、这一块有点乱了,不过还是能接受的

// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{BLINKER_LOG("Blinker readString: ", data);Blinker.vibrate();uint32_t BlinkerTime = millis();Blinker.print("millis", BlinkerTime);
}//修改BlinkerAPP的状态
void RelayState(int num) {if (digitalRead(PW_STA) == HIGH){Button1.icon("fas fa-desktop");Button1.color("#FFA500");   //设置app按键是纯黄色,16进制颜色码Button1.text("已打开");          //设置app按键注释“开”Button1.print("on");PW_STA_INIT = true;BLINKER_LOG("电脑已打开!");} else if (digitalRead(PW_STA) == LOW){Button1.icon("fas fa-desktop");//设置app按键是灰色,16进制颜色码Button1.color("#E6E6FA");   //设置app按键是纯黄色,16进制颜色码Button1.text("已关闭");          //设置app按键注释“关”Button1.print("off");PW_STA_INIT = false;BLINKER_LOG("电脑已关闭!");}
}//物理按键长按功能,状态同步没做,不过不影响小爱,但blinkerAPP上会有延时
void attachLongPressStart() {Serial.println("longPressStart-长按开始");digitalWrite(PW_N, 0);//按下按钮
}void attachLongPressStop() {Serial.println("longPressStart-长按结束");digitalWrite(PW_N, 1);//松开按钮
}//APP端点击开关后在指定的秒数后获取状态,因为关机状态不是实时的
void flip() {RelayState(1);flipper.detach();
}//心跳包刷新状态
void heartbeat()
{RelayState(1);
}

4、主体结构

void setup()
{// 初始化串口Serial.begin(9600);SPIFFS.begin();//这个地方要开启BLINKER_DEBUG.stream(Serial);//  BLINKER_DEBUG.debugAll();pinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, 1);pinMode(PW_W, INPUT_PULLUP);digitalWrite(PW_W, 0);pinMode(PW_N, OUTPUT);digitalWrite(PW_N, 1);pinMode(PW_STA, OUTPUT);PW_STA_INIT = digitalRead(PW_STA);//初始化开关机状态bool conn_status = CONNECT_WIRELESS(); //自动配网,自己封装的,blinker有自带功能。if (!conn_status) {//启动AP服务器LOCALSERVER_RUN();//启动无线连接//    WIFI_RUN();//启动web服务器run_webserver();} else {button.reset();button.setPressTicks(200); //设置长按时长为1000毫秒,默认值为:800毫秒//  button.attachClick(myClickFunction);button.attachLongPressStart(attachLongPressStart);button.attachLongPressStop(attachLongPressStop);//初始化长按结束回调函数//blinker数据接收Blinker.attachData(dataRead);//小爱同学反馈信息,调用设备查询函数,查询设备开关机状态BlinkerMIOT.attachQuery(miotQuery);//小爱同学反馈信息,调用设备查询函数,查询设备开关机状态BlinkerMIOT.attachPowerState(miotPowerState);    //添加这一行,作用是注册下面的回调函数//按键回调Button1.attach(button1_callback);Blinker.attachHeartbeat(heartbeat);//心跳包//启动web服务器//    run_webserver();}
}void loop() {button.tick(); //按键循环检测Blinker.run();
}

五 最终的效果

Nodemcu远程开电脑演示!

下图的电脑1就是我的电脑了


总结

这样我就可以通过小爱同学,移动终端,随时随地的开关我的电脑了,虽然我还能通过SIRI快捷指令开关机,但是有时候会失灵,这种方式也不一定不失灵。但是技术在于折腾,我岌岌可危的发际线!

ESP8266 Nodemcu 开发板 + Blinker 电脑远程开机支持小爱同学和手机APP相关推荐

  1. ESP8266 NodeMCU开发板连接手机热点问题

    ESP8266 NodeMCU开发板连接手机热点问题 前言: 众所周知,esp是构建一个IOT工程里得力助手之一,通俗点来说就是:"WIFI模块" 不过下面要讲的是esp8266中 ...

  2. ESP8266 NodeMCU开发板

    ESP8266使用笔记之常用固件 开发板使用的是NodeMCU开发板: 目录 1.学习使用ESP8266官方的SDK         1.1使用SDK提供的AT固件         1.2使用SDK ...

  3. NodeMCU开发板详解(ESP8266开发篇)

    1.ESP8266芯片 2.开发板介绍 此板子的size - 引脚信息 当引脚以数字输出模式工作时,低电平是0V (灌电流),高电平是3.3V (拉电流). digitalWrite(4,HIGH)操 ...

  4. esp01s+blinker WOL远程开机

    esp01s+blinker WOL远程开机,支持发送mac指定电脑开机 #define BLINKER_WIFI //#define BLINKER_ESP_SMARTCONFIG #define ...

  5. Esp8266物联网开发板详细使用教程

    文章目录 前言 需要的资料 搭建SDK开发环境 SDK的编译和烧写 前言 之前在做智能家居的时候需要用到esp8266,我这边因为esp8266物联网开发板的技小新教程相对齐全就不用串口模块,直接使用 ...

  6. 如何实现电脑远程开机

    如何实现电脑远程开机 ------------------------------------------- 远程唤醒技术,英文简称WOL,即Wake-on-LAN,是指可以通过局域网实现远程开机,无 ...

  7. NodeMCU开发板详解

    NodeMCU开发板详解 数字输入输出引脚(GPIO) 如下图所示,ESP8266芯片四周分布很多引脚.这些引脚大部分可用作输入输出使用.这些用作输入输出的引脚统称为GPIO. ESP8266芯片的G ...

  8. 【嵌入式物联网】NodeMCU开发板引脚介绍和主要技术参数

    ESP8266芯片的GPIO引脚可用作数字输入来读取引脚电平,也可用作数字输出向外围电路发出控制信号.在这一点上,GPIO引脚与Arduino开发板的引脚功能十分类似. 请留意:在很多介绍ESP826 ...

  9. ESP8266 D1-UNO-R3开发板的初步测试

    简 介: 测试购买到的基于ESP8266的开发板,但是始终没有能够成功下载程序.问题尚待后期进行测试. 关键词: ESP8266,Arduino #mermaid-svg-6x74Q9rymsvfSg ...

最新文章

  1. ISLR_Power
  2. Adobe Reader阅读器打开时显示上次看到的页面
  3. 通过JDBC连接取得数据库相关的元数据
  4. 牛客 - Gaming with Mia(dp)
  5. 计算机房的英语用谐音怎么读,“人机对话”学英语 发音不准就过不了电脑关...
  6. python找最长的字符串_为Python找到最长重复字符串的有效方法(从Pearls编程)
  7. Web前端开发工程师必读de设计博客
  8. 架构模式: 服务器端页面碎片化元素构建
  9. 计算机网络实验指导书 pdf,计算机网络实验指导书-20210608153043.pdf-原创力文档
  10. java解析document_java 值Document解析xml详细介绍
  11. Boost.Test 测试范型库
  12. mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?
  13. qt结合arcgis for qt加载tpk文件(离线地图)
  14. 前端js实现中文转五笔和拼音首字母
  15. Python安全攻防-从入门到入狱
  16. “汇乐缘”:甜蜜的阴谋?【zt】
  17. 什么是DC-DC转换器?DC-DC转换器是如何命名的?
  18. (原创)[短小精悍系列]为什么蓝色光比红色光看起来更刺眼?而日常生活中反而说绿色和蓝色更柔和?
  19. OpenGL ES OpenGL WebGL EGL WGL 区别
  20. docker docker安装app

热门文章

  1. 毕业设计 stm32单片机的家庭成员监控监护系统 - 物联网 嵌入式
  2. 研发组织该如何设计绩效体系?
  3. 莫言教学常启迪学生多动脑 主张把自己当罪人写-莫言-诺贝尔文学奖-兰传斌
  4. LeetCode 912. 排序数组【模板题】
  5. 嵌入式名工程师,为什么有些人月薪8K,而有些人年薪40K值得深思
  6. java 批量图片下载
  7. flask前后端连接时常见问题
  8. 6.824系统-分布式计算MapReduce模式
  9. 虚拟机硬盘容量扩展以及分区挂载详细步骤
  10. 开启新的篇章-CSDN