查看: 779|回复: 14

[分享] 更智能的电脑远程开关机-基于继电器

[复制链接]
  • TA的每日心情
    开心
    2020-8-15 17:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2020-8-10 13:17 | 显示全部楼层 |阅读模式
    我只是刚刚入门的萌新,所以有不足请指出
    先展示下
        qq_pic_merged_1597035285263.jpg OD%R3KX_58(`]UG(LYXD)2W.png
    功能:开关机,开关机检测,运行时间显示
    但是不知道怎么配置电源检测,我这使用INPUT,可状态一直闪烁
    材料
    esp-01s,继电器,杜邦线继电器接线:电脑开机线接com与no(不分顺序)   5v供电接继电器vcc和gnd(分+-)如图但是这个5v供电不要用充电器,直接接电脑主板上,不然检测无法用
    2F){@3KE~L@5OBV9G6LF~ZW.png

    开发板部分全部用杜邦线延长到继电器即可 但是GPIO2的线从开发板连接到电脑主板5v+ 继电器上的该孔就空着
    Y[3]QYV422@JPQ@{W[%PO3P.png
    附上源码


    1. #define BLINKER_WIFI

    2. #include <Blinker.h>

    3. char auth[] = "key";
    4. // 编写:1812z
    5. char ssid[] = "wifi";
    6. char pswd[] = "wifi密码";


    7. #define BUTTON_1 "ButtonKey"

    8. BlinkerButton Button1("BUTTON_1");
    9. BlinkerText TEXT1("tex-s");
    10. BlinkerText TEXT2("power");
    11. BlinkerText TEXT3("powerj");

    12. void button1_callback(const String & state)
    13. {
    14.     digitalWrite(0, !digitalRead(0));
    15.     BLINKER_LOG("get button state: ", state);

    16.     if (state == BLINKER_CMD_BUTTON_TAP) {
    17.         BLINKER_LOG("Button tap!");

    18.         Button1.icon("icon_1");
    19.         Button1.color("#00FF00");
    20.         Button1.text("短按");
    21.         Button1.print();
    22.           Blinker.delay(500);
    23.             digitalWrite(0, !digitalRead(0));
    24.     }
    25.     else if (state == BLINKER_CMD_BUTTON_PRESSED) {
    26.         BLINKER_LOG("Button pressed!");

    27.         Button1.icon("icon_1");
    28.         Button1.color("#FF0000");
    29.         Button1.text("长按中");
    30.         Button1.print();
    31.     }
    32.     else if (state == BLINKER_CMD_BUTTON_RELEASED) {
    33.         BLINKER_LOG("Button released!");

    34.         Button1.icon("icon_1");
    35.         Button1.color("#FF0000");
    36.         Button1.text("成功长按");
    37.         // Button1.text("Your button name", "describe");
    38.         Button1.print();
    39.     }
    40.     else if (state == BLINKER_CMD_ON) {
    41.         BLINKER_LOG("Toggle on!");

    42.         Button1.icon("icon_1");
    43.         Button1.color("#FF0000");
    44.         Button1.text("继电器闭合");
    45.         // Button1.text("Your button name", "describe");
    46.         Button1.print("on");
    47.     }
    48.     else if (state == BLINKER_CMD_OFF) {
    49.         BLINKER_LOG("Toggle off!");

    50.         Button1.icon("icon_1");
    51.         Button1.color("#FF0000");
    52.         Button1.text("继电器断开");
    53.         // Button1.text("Your button name", "describe");
    54.         Button1.print("off");
    55.     }
    56.     else {
    57.         BLINKER_LOG("Get user setting: ", state);

    58.         Button1.icon("icon_1");
    59.         Button1.color("#FFFFFF");
    60.         Button1.text("?");
    61.         // Button1.text("Your button name", "describe");
    62.         Button1.print();
    63.     }
    64. }

    65. void dataRead(const String & data)
    66. {
    67.     BLINKER_LOG("Blinker readString: ", data);

    68.     Blinker.vibrate();

    69.     uint32_t BlinkerTime = millis();

    70.     Blinker.print("millis", BlinkerTime);
    71. }

    72. String rts()//计算运行时间
    73.     {
    74.     int rt =Blinker.runTime();
    75.     int r,e,f,s;
    76.     String fh;
    77.     Blinker.delay(100);
    78.     if(rt >= 86400)//天数
    79.     {r = rt / 86400;
    80.      e = rt / 3600 - r*24;
    81.      f = rt / 60 - r*1440 - e*60;
    82.      s = rt - r*86400 - e*3600 - f*60;}
    83.     else if(rt >= 3600)
    84.     {r = 0;
    85.      e = rt / 3600;
    86.      f = rt / 60 - e*60;
    87.      s = rt - e*3600 - f*60;}
    88.     else
    89.     {r = 0;
    90.      e = 0;
    91.      f = rt / 60;
    92.      s = rt - f*60;}

    93.     //BLINKER_LOG(r," ",e," ",f," ",s);//输出数据测试

    94.     if(f==0 & e==0 & r==0)
    95.     {fh = String("")+ s +"秒";}
    96.     else if(r == 0 & e == 0 )
    97.     {fh = String("")+ f + "分" + s +"秒";}
    98.     else if(r == 0)
    99.     {fh = String("")+ e + "时" + f + "分" + s +"秒"; }
    100.     else
    101.     {fh = String("")+ r + "天" + e + "时" + f + "分" + s +"秒";}

    102.     return(fh);
    103.     }

    104. void heartbeat()//心跳
    105. {
    106.     TEXT1.print(rts());

    107. }



    108. void setup()
    109. {
    110.     Serial.begin(115200);
    111.     BLINKER_DEBUG.stream(Serial);

    112.     pinMode(0, OUTPUT);
    113.     digitalWrite(0, HIGH);
    114.     pinMode(2, INPUT_PULLUP);

    115.     Blinker.begin(auth, ssid, pswd);
    116.     Blinker.attachData(dataRead);
    117.     Button1.attach(button1_callback);
    118.       Blinker.attachHeartbeat(heartbeat);//附加心跳
    119. }

    120. void loop()
    121. {
    122.   int sensorVal = digitalRead(2);
    123.   Serial.println(sensorVal);
    124.   if (sensorVal == LOW) {

    125.    TEXT2.print("电源接通");

    126.   } else {

    127.   TEXT2.print("电源断开");
    128.   }
    129.    int sensorVal2 = digitalRead(0);
    130.   Serial.println(sensorVal2);
    131.    Blinker.delay(1000);
    132.   if (sensorVal2 == HIGH) {

    133.    TEXT3.print("断开");

    134.   } else {

    135.   TEXT3.print("闭合");
    136.   }
    137.    Blinker.run();
    138. }
    复制代码




    附上app界面配置:
    {¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/bg/f5.jpg¨¨isFull¨»}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fad fa-arrow-alt-up¨¨mode¨É¨t0¨¨单击¨¨t1¨¨文本2¨¨bg¨É¨cols¨Ë¨rows¨Ë¨key¨¨BUTTON_1¨´x´É´y´Ë¨speech¨|{¨cmd¨¨开关电脑¨¨act¨¨tap¨}÷¨lstyle¨Ê¨clr¨¨#076EEF¨}{ßA¨tex¨ßF¨继电器控制¨ßH¨已接入电脑¨ßJÉßC¨fad fa-digital-tachograph¨ßKÍßLËßM´´´x´Ë´y´ËßO|÷ßTÌßUßV}{ßAßWßF¨文本1¨ßH¨开发板运行时间¨ßJÉßC¨fad fa-database¨ßKÍßLËßM¨tex-s¨´x´Í´y´ÍßO|÷ßTÌßUßV}{ßAßWßF¨状态中心¨ßH´´ßJÉßC¨fad fa-power-off¨ßKËßLËßM´´´x´Ï´y´ËßO|÷ßTËßUßV}{ßAßWßF¨调试---->¨ßH¨手动控制¨ßJÉßC¨fad fa-lock¨ßKËßLËßM´´´x´É´y´ÏßO|÷ßUßVßTË}{ßAßBßC¨fal fa-power-off¨ßEÊßFßhßHßIßJÉßKËßLËßMßN´x´Ë´y´ÏßO|÷¨cus¨¨off¨ßTÊ}{ßAßWßFßaßH¨继电器操作¨ßJÉßC¨fal fa-font¨ßKÍßLËßMßN´x´É´y´ÍßO|÷ßTÌßUßV}{ßAßWßFßaßH¨电脑电源状态¨ßJÉßC¨fad fa-server¨ßKËßLËßM¨power¨´x´Í´y´ÏßO|÷ßTËßUßV}{ßAßWßFßaßH¨继电器状态¨ßJÉßCßZßKËßLËßM¨powerj¨´x´Ï´y´ÏßO|÷ßTËßUßV}{ßAßWßF¨闪烁¨ßH¨为开机¨ßJÉßCßDßKËßLËßM´´´x´Í´y´ÑßO|÷ßTË}{ßAßWßF¨操作和真的开机¨ßH¨长按和短按¨ßJÉßCßnßKÍßLËßM¨tex-l0w¨´x´É´y´ÉßO|÷ßTÌ}{ßAßWßF¨键一样¨ßHßIßJÉßCßnßKËßLËßM¨tex-az0¨´x´Í´y´ÉßO|÷ßTË}÷¨actions¨|¦ßP¦¨switch¨‡¨text¨‡´on´¨打开?name¨ßl¨关闭?name¨—÷¨triggers¨|{¨source¨ß11¨source_zh¨¨开关状态¨¨state¨|´on´ßl÷¨state_zh¨|´打开´´关闭´÷}÷}





    该用户从未签到

    发表于 2020-8-10 14:50 | 显示全部楼层
    我记得我的input是input_pullup,把线接到电脑电源灯上的
    我没有用继电器,直接gpio0给电脑pwr—on高电平开关机你还可以接入语音助手,开关机更方便
    mmexport1597042189547.jpg

  • TA的每日心情
    开心
    2020-8-15 17:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-8-10 16:17 | 显示全部楼层
    lh5263872 发表于 2020-8-10 14:50
    我记得我的input是input_pullup,把线接到电脑电源灯上的
    我没有用继电器,直接gpio0给电脑pwr—on高电平开 ...

    emmm,pullup不是上拉电阻吗,这样怎么拉低开机键的3.3v+ 还是我 搞错了,是要拉高主板开机键的接地
  • TA的每日心情

    2020-9-12 16:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2020-8-10 16:23 | 显示全部楼层
    我现在还在新新新手阶段,连烧代码都不会,就想弄个小度语音控制继电器点亮家里灯的,不会修改示例
  • TA的每日心情

    2020-9-12 16:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2020-8-10 16:25 | 显示全部楼层
    楼主你有现成的源码吗
  • TA的每日心情
    开心
    2020-8-15 17:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-8-10 17:46 | 显示全部楼层
    suifengfeiyang 发表于 2020-8-10 16:25
    楼主你有现成的源码吗

    这个的话你只要改我给的源码里wifi密码 名称和点灯key即可
  • TA的每日心情
    开心
    2020-8-15 17:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-8-10 17:47 | 显示全部楼层
    suifengfeiyang 发表于 2020-8-10 16:23
    我现在还在新新新手阶段,连烧代码都不会,就想弄个小度语音控制继电器点亮家里灯的,不会修改示例 ...

    最简单的点灯列子可以看看
  • TA的每日心情

    2020-9-12 16:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2020-8-10 21:20 | 显示全部楼层
    1812z 发表于 2020-8-10 17:46
    这个的话你只要改我给的源码里wifi密码 名称和点灯key即可

    你这个源码不是电脑开机用的吗?电脑开机不是按一下的吗?
  • TA的每日心情

    2020-9-12 16:12
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2020-8-10 23:01 | 显示全部楼层
    1812z 发表于 2020-8-10 17:46
    这个的话你只要改我给的源码里wifi密码 名称和点灯key即可

    复制了你给的界面代码到界面配置那里,点击更新配置了,也显示数据导入成功了,怎么返回以后界面还是那样啊?
  • TA的每日心情
    开心
    2020-8-15 17:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

     楼主| 发表于 2020-8-11 00:01 | 显示全部楼层
    suifengfeiyang 发表于 2020-8-10 21:20
    你这个源码不是电脑开机用的吗?电脑开机不是按一下的吗?

    对,这个也是模拟按一下电源键
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    String类型做参数传递时出现问题
    String类型做参数传递时出
    有两个函数,上面这个用来获取数据,然后第70行调用下面的Price_Analyze()来分析数据
    [Arduino物联网开发实战0]开发准备
    [Arduino物联网开发实战0]
    郑重提示:物联网开发,需要你有较好的编程基础,如果你没有编程基础或Arduino开发基
    兩段式水位的程式,要如何寫呢?可以指導一下嗎?
    兩段式水位的程式,要如何
    想請教大大兩段式水位的程式,要如何寫呢?可以指導一下嗎? 兩段式水位 滿水100%時停止
    点灯里面的 定时任务,按指定时间触发 开关 没效果.怎么...
    点灯里面的 定时任务,按
    #define BLINKER_WIFI #include char auth[] = "e9b348c25011"; char ssid[] = "88
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表