ESP8266 Nodemcu 开发板 + Blinker 电脑远程开机支持小爱同学和手机APP
文章目录
- 前言
- 一、物联网是什么?
- 二、效果展示
- 1.使用的硬件
- 2.接线展示
- 三.TMP模块供电,状态检测
- 四 代码解析
- 1、 指定PIN,定义一些按钮
- 2、这是小爱同学的代码,BLinker还支持天猫精灵,我没有!
- 3、这一块有点乱了,不过还是能接受的
- 4、主体结构
- 五 最终的效果
- 总结
前言
电脑远程启动的方法有很多,前几年我都是使用NAS运行Docker的形式,使用WOL的方式唤醒,但是还得在关机的问题上下功夫。最近研究了一下物联网,于是乎这个问题就显得如此的简单了。温馨提示:请操作机箱前先保存好电脑里的东西,不要问我为什么!
一、物联网是什么?
我的理解万物皆可联,只要用电就能改成智能化。
二、效果展示
1.使用的硬件
1、Nodemcu开发板
2、公对母 杜邦线 4根
3、母对母 杜邦线 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相关推荐
- ESP8266 NodeMCU开发板连接手机热点问题
ESP8266 NodeMCU开发板连接手机热点问题 前言: 众所周知,esp是构建一个IOT工程里得力助手之一,通俗点来说就是:"WIFI模块" 不过下面要讲的是esp8266中 ...
- ESP8266 NodeMCU开发板
ESP8266使用笔记之常用固件 开发板使用的是NodeMCU开发板: 目录 1.学习使用ESP8266官方的SDK 1.1使用SDK提供的AT固件 1.2使用SDK ...
- NodeMCU开发板详解(ESP8266开发篇)
1.ESP8266芯片 2.开发板介绍 此板子的size - 引脚信息 当引脚以数字输出模式工作时,低电平是0V (灌电流),高电平是3.3V (拉电流). digitalWrite(4,HIGH)操 ...
- esp01s+blinker WOL远程开机
esp01s+blinker WOL远程开机,支持发送mac指定电脑开机 #define BLINKER_WIFI //#define BLINKER_ESP_SMARTCONFIG #define ...
- Esp8266物联网开发板详细使用教程
文章目录 前言 需要的资料 搭建SDK开发环境 SDK的编译和烧写 前言 之前在做智能家居的时候需要用到esp8266,我这边因为esp8266物联网开发板的技小新教程相对齐全就不用串口模块,直接使用 ...
- 如何实现电脑远程开机
如何实现电脑远程开机 ------------------------------------------- 远程唤醒技术,英文简称WOL,即Wake-on-LAN,是指可以通过局域网实现远程开机,无 ...
- NodeMCU开发板详解
NodeMCU开发板详解 数字输入输出引脚(GPIO) 如下图所示,ESP8266芯片四周分布很多引脚.这些引脚大部分可用作输入输出使用.这些用作输入输出的引脚统称为GPIO. ESP8266芯片的G ...
- 【嵌入式物联网】NodeMCU开发板引脚介绍和主要技术参数
ESP8266芯片的GPIO引脚可用作数字输入来读取引脚电平,也可用作数字输出向外围电路发出控制信号.在这一点上,GPIO引脚与Arduino开发板的引脚功能十分类似. 请留意:在很多介绍ESP826 ...
- ESP8266 D1-UNO-R3开发板的初步测试
简 介: 测试购买到的基于ESP8266的开发板,但是始终没有能够成功下载程序.问题尚待后期进行测试. 关键词: ESP8266,Arduino #mermaid-svg-6x74Q9rymsvfSg ...
最新文章
- ISLR_Power
- Adobe Reader阅读器打开时显示上次看到的页面
- 通过JDBC连接取得数据库相关的元数据
- 牛客 - Gaming with Mia(dp)
- 计算机房的英语用谐音怎么读,“人机对话”学英语 发音不准就过不了电脑关...
- python找最长的字符串_为Python找到最长重复字符串的有效方法(从Pearls编程)
- Web前端开发工程师必读de设计博客
- 架构模式: 服务器端页面碎片化元素构建
- 计算机网络实验指导书 pdf,计算机网络实验指导书-20210608153043.pdf-原创力文档
- java解析document_java 值Document解析xml详细介绍
- Boost.Test 测试范型库
- mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?
- qt结合arcgis for qt加载tpk文件(离线地图)
- 前端js实现中文转五笔和拼音首字母
- Python安全攻防-从入门到入狱
- “汇乐缘”:甜蜜的阴谋?【zt】
- 什么是DC-DC转换器?DC-DC转换器是如何命名的?
- (原创)[短小精悍系列]为什么蓝色光比红色光看起来更刺眼?而日常生活中反而说绿色和蓝色更柔和?
- OpenGL ES OpenGL WebGL EGL WGL 区别
- docker docker安装app