更智能的电脑远程开关机-基于继电器-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11242|回复: 22

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

[复制链接]
发表于 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

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

emmm,pullup不是上拉电阻吗,这样怎么拉低开机键的3.3v+ 还是我 搞错了,是要拉高主板开机键的接地
发表于 2020-8-10 16:23 | 显示全部楼层
我现在还在新新新手阶段,连烧代码都不会,就想弄个小度语音控制继电器点亮家里灯的,不会修改示例
发表于 2020-8-10 16:25 | 显示全部楼层
楼主你有现成的源码吗
 楼主| 发表于 2020-8-10 17:46 | 显示全部楼层
suifengfeiyang 发表于 2020-8-10 16:25
楼主你有现成的源码吗

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

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

你这个源码不是电脑开机用的吗?电脑开机不是按一下的吗?
发表于 2020-8-10 23:01 | 显示全部楼层
1812z 发表于 2020-8-10 17:46
这个的话你只要改我给的源码里wifi密码 名称和点灯key即可

复制了你给的界面代码到界面配置那里,点击更新配置了,也显示数据导入成功了,怎么返回以后界面还是那样啊?
 楼主| 发表于 2020-8-11 00:01 | 显示全部楼层
suifengfeiyang 发表于 2020-8-10 21:20
你这个源码不是电脑开机用的吗?电脑开机不是按一下的吗?

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:52 , Processed in 0.097016 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表