物联那点事儿之小爱同学网络控制电脑开机

前言

  上一个帖子写的是自制网络温湿度计,里面对需要用到的app和编译软件写的都很清楚,这个帖子呢就写一下小爱同学网络控制电脑开机的小项目。

硬件材料:

(1)esp8266烧录器一个,用来给wifi模块烧写程序。
(2)esp8266烧录器配套的wifi模块一个(esp01或者esp01s都可)。
注:esp01是两个led灯,esp01s是一个led信号灯,都是wifi模块,但是一定要和烧录器配套。建议两个各买一个,备用和实验。
(3)五路物联网wifi继电器一个。
注:仔细看下图的配件,wifi继电器接线是需要用一字小螺丝刀拧的,手里没有的在网上记得买昂。
(4)杜邦线4根。


配件图片:

           esp8266烧录器    esp01s      物联网继电器
                        图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继电器长闭端和公共端,这样就解决了。

发布了17 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JIANGYINGH/article/details/105093391