利用对电脑主板开机跳线电平的控制来控制电脑的开关机和重启等操作。
接入Blinke平台,可以通过Blinker APP和小爱同学远程控制。


Arduino控制代码如下
#define BLINKER_WIFI
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Blinker.h>
#define DS18b20Pin 14 //温度传感器引脚
#define SmartconfigPin 5 //一键配网引脚
#define PC_StatusPin 16 //开机状态检测引脚
#define User_LED 4 //用户显示LED
#define PC_OnPin 13 //电脑开机引脚
#define PC_RstPin 12 //电脑重启引脚
OneWire onewire(DS18b20Pin);
DallasTemperature sensors(&onewire);
char auth[] = "d494fcd6eda7";//灯
char ssid[] = "";
char pswd[] = "";
// 新建组件对象
BlinkerButton SWITCH("Switch");
BlinkerButton RESET("Reset");
BlinkerButton QUERY("Query");
BlinkerNumber TEMP("Temp");
BlinkerText STATE("State");
//一键配网函数
void smartConfig()
{
if(digitalRead(SmartconfigPin) == LOW) {
digitalWrite(LED_BUILTIN, LOW);
WiFi.mode(WIFI_STA);//使用wifi的STA模式
Serial.println("\r\nWait for Smartconfig...");//串口打印
WiFi.beginSmartConfig();//等待手机端发出的名称与密码
//死循环,等待获取到wifi名称和密码
while (1)
{
//等待过程中一秒打印一个.
Serial.print(".");
delay(1000);
if (WiFi.smartConfigDone()){//获取到之后退出等待
Serial.println("SmartConfig Success");
//打印获取到的wifi名称和密码
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
break;
}
}
Blinker.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());//运行blinker
digitalWrite(LED_BUILTIN, HIGH);
}
}
//电脑开机状态检测
void PC_Power_Status(void)
{
if(digitalRead(PC_StatusPin)){
STATE.print("电脑已开机");
}else{
STATE.print("电脑已关机");
}
}
// 开机键回调函数
void Switch_callback(const String & state)
{
BLINKER_LOG("Switch button state: ", state);
digitalWrite(PC_OnPin, LOW);
delay(500);
digitalWrite(PC_OnPin, HIGH);
}
//重启回调函数
void Reset_callback(const String & state)
{
BLINKER_LOG("Reset button state: ", state);
digitalWrite(PC_RstPin, LOW);
delay(500);
digitalWrite(PC_RstPin, HIGH);
STATE.print("重启成功,请稍等...");
}
//查询状态回调函数
void Query_callback(const String & state)
{
BLINKER_LOG("Reset button state: ", state);
PC_Power_Status();
}
//心跳包发送温度和电脑状态
void heartbeat()
{
TEMP.print(sensors.getTempCByIndex(0) - 3.0); //发送温度
PC_Power_Status();
}
void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
//初始化有板载LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
pinMode(PC_OnPin, OUTPUT);
pinMode(PC_RstPin, OUTPUT);
digitalWrite(PC_OnPin, HIGH);
digitalWrite(PC_RstPin, HIGH);
pinMode(PC_StatusPin, INPUT);
pinMode(SmartconfigPin, INPUT_PULLUP); //智能配网引脚初始化
pinMode(User_LED, OUTPUT); //用户LED引脚初始化
digitalWrite(User_LED, HIGH); //用户LED初始关闭
//判断是否进入配网模式
smartConfig();
//初始化blinker
Blinker.begin(auth, ssid, pswd);
//心跳函数
Blinker.attachHeartbeat(heartbeat);
//按键控制回调函数
SWITCH.attach(Switch_callback);
RESET.attach(Reset_callback);
QUERY.attach(Query_callback);
}
void loop() {
// put your main code here, to run repeatedly:
sensors.requestTemperatures();
digitalWrite(User_LED, !digitalRead(PC_StatusPin));//用户LED显示开机状态,亮:开机 灭:关机
Blinker.run();
delay(2000);
}





评论 (0)