前言
上一个帖子写的是自制网络温湿度计,里面对需要用到的app和编译软件写的都很清楚,这个帖子呢就写一下小爱同学网络控制电脑开机的小项目。
硬件材料:
(1)esp8266烧录器一个,用来给wifi模块烧写程序。
(2)esp8266烧录器配套的wifi模块一个(esp01或者esp01s都可)。
注:esp01是两个led灯,esp01s是一个led信号灯,都是wifi模块,但是一定要和烧录器配套。建议两个各买一个,备用和实验。
(3)五路物联网wifi继电器一个。
注:仔细看下图的配件,wifi继电器接线是需要用一字小螺丝刀拧的,手里没有的在网上记得买昂。
(4)杜邦线4根。
配件图片:
图3-1 esp8266烧录器 图3-2wifii模块 esp01s 图3-3 wifi继电器
软件准备
如果有安装可省略此步,也可参考自制网络温湿度计或者点灯科技官网。
1.电脑端安装Arduino IDE,esp8266扩展,安装blinker库。
2.手机安装点灯科技app、米家、小爱同学。
工作原理
首先看一下wifi继电器的构造:
电脑开机原理:机箱开关键连接主板PW引脚,从而起到开机关机的作用。
注:这里的继电器是连接的pw引脚,模拟电脑开关键的动作,而不是直接断电源。
继电器控制电脑开关机原理:wifi继电器的长闭端和公共端连接pw引脚,从而起到远程控制开关机的作用。
供电原理:电脑在关机插电源的时候会有5v供电的,具体哪根线供电看下面具体流程。
具体流程:
(1)线路连接。
电脑关机状态下的5v供电线:
将电源线在主板下拔下来,将有卡子的一面儿面对着自己,从右往左数第九根紫色线就是5v供电线,可以连接wifi继电器的vcc,然后随便找一根黑色线连接GND。
具体接法:将VCC线头去掉塑料头压扁后插入到5V供电线的卡子中,GND线同。wifi模块继电器的长闭端和公共端相连(没有一一对应要求)。
wifi继电器 | 接口 |
---|---|
vcc | 电源线有卡子的一面对着自己,从右往左数第九根紫色线口 |
GND | 电源线随便一黑色线口 |
长闭端NO | 电脑主板PW任意一引脚 |
公共端COM | 电脑主板PW另外一引脚 |
注:检验是否供电方法,将wifi模块插到继电器esp8266转接板上,如果esp01s的led灯亮,说明已经供电。
(2)复制手机点灯科技app中arduino设备的key,粘贴到程序中。
(3)将esp01s插到烧录器上,打开ardunio IDE,开发板选择esp8266Module,端口选择对应端口。
(4)程序代码,代码解释部分写到注释里了,具体请看注释。
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET //小爱同学配置电源类设备
#include <Blinker.h>
char auth[] = "********";//你的设备key
char ssid[] = "********";//你的wifi名字
char pswd[] = "********";//你的wifi密码
BlinkerButton Button1("btn-abc"); //定义按钮键名
bool oState = false; //全局变量,电脑状态设为false 关机状态
int counter = 0; //计数器
//自定义电源类操作的回调函数
void miotPowerState(const String & state)
{
//blinkwer打印电脑状态
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON)//小爱同学控制开机命令
{
//先给io设备一个低电平,然后再给高电平。
digitalWrite(0, LOW);
delay(200);
digitalWrite(0, HIGH);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
oState = true;
}
else if (state == BLINKER_CMD_OFF)//小爱同学控制关机命令
{
//先给设备一个低电平,然后再给高电平。
digitalWrite(0,LOW);
delay(200);
digitalWrite(0, HIGH);
BlinkerMIOT.powerState("off");//执行关机命令
BlinkerMIOT.print();
oState = false;
}
}
void miotQuery(int32_t queryCode)//自定义设备查询函数
{
BLINKER_LOG("MIOT Query codes: ", queryCode);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER ://小爱查询全部内容
BLINKER_LOG("MIOT Query All");//小爱查询
//查询电脑开关机,如果ostate为真,状态为“on”开机,如果为假,状态为“off”关机。
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;//终止循环
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");//小爱同学查询电脑状态
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(oState ? "on" : "off");
BlinkerMIOT.print();
break;
}
}
void dataRead(const String & data) // 如果未绑定的组件被触发,则会执行其中内容
{
BLINKER_LOG("Blinker readString: ", data);//读取字符串,打印
Blinker.vibrate();//起刷新作用
uint32_t BlinkerTime = millis();//获取到系统运行的时间
Blinker.print("millis", BlinkerTime);//打印出来
}
void button1_callback(const String & state)//点灯app内控制按键触发
{
BLINKER_LOG("get button state: ", state);
//app按键一旦触发,就会给设备高电平开始工作
//先给Io低电平,再给高电平,保护电路不被损坏
digitalWrite(0,LOW);
delay(200);
digitalWrite(0, HIGH);
}
void setup()//主程序
{
//初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(0, OUTPUT); //定义io口为输出
digitalWrite(0, HIGH); //定义io默认为高电平
//初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
//小爱同学反馈信息,调用设备查询函数,查询设备开关机状态
BlinkerMIOT.attachQuery(miotQuery);
//小爱同学反馈信息,小爱控制开关机操作
BlinkerMIOT.attachPowerState(miotPowerState);
}
void loop()//主循环,多次运行blinker(即以上程序)
{
Blinker.run();
}
(5)编译,无错后上传程序。
(6) 将wifi模块在烧录器上拔下来,然后插到wifi继电器上即可。
(7)在手机点灯app上添加按钮,数据键名要和代码一致。
(8)给小米同学添加训练。
可改进之处
(1)这里使用的小爱同学,同样也是可以修改代码使用天猫精灵和百度小度,可参考点灯科技官网。
(2)这里我是直接把电脑开关键的线从pw引脚上直接拔下来,使用wifi继电器的话这个开关键就没有用了。
可以采用并联的方式,直接将开关键的线破开口并入wifi继电器长闭端和公共端,这样就解决了。