小爱同学开电脑 esp8266 12f
本帖最后由 suen.sun 于 2020-4-17 21:31 编辑1.mini D1 wifi ESP-12F N ESP8266开发板
2.1路 5V继电器模块 高电平触发
3.AMS1117-3.3V原装 SOT-223 稳压芯片4. 10uf电容两只
无电路图,参考抖音 暴改车间主任 视频
esp12f和继电器从电脑主机ATX电源紫色线取常电5V, 检测开机状态是通过ATX电源中任意红色电线的电平(稳压管、滤波)
继电器输出并连电脑主板开机线,模拟点按电源键。
小米手机可以在米家APP绑定其它平台设备(点灯科技);
小爱同学APP里新增个人训练-控制设备,比如“打开电脑”指令为打开绑定的插座设备。即可打开电脑。
*:关闭电脑需要设置windows电源按键为关机(或者休眠)。
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG //开启智能配网
#define BLINKER_MIOT_OUTLET //模拟为小爱同学控制的插座
#define BLINKER_ALIGENIE_OUTLET //模拟为天猫精灵控制的插座
#define OUT_PORT 4//接继电器信号
#define CHK_PORT 12//检测是否有高电平(高电平即电脑已开机)
#include <Blinker.h>
#include <Ticker.h>
Ticker myTicker;
int count = 0;
uint32_t lstPw = 0; //默认是关机态
char auth[] = "******";//设备code
#define btn_key "btn_swt"
BlinkerButton BtnRemote(btn_key);
void switchChange(int32_t stateCodeSetting) {
uint32_t nowPw = digitalRead(CHK_PORT);
if ((nowPw == HIGH && stateCodeSetting == 1) || (nowPw == LOW && stateCodeSetting == 0)) {
return;
}
digitalWrite(OUT_PORT, HIGH);
delay(200);
digitalWrite(OUT_PORT, LOW);
}
void btn_callback(const String & state)
{
BLINKER_LOG("Button pressed!");
switchChange(lstPw ? 0 : 1);
}
void aligeniePowerState(const String & state)
{
if (state == BLINKER_CMD_ON) {
switchChange(1);
BlinkerAliGenie.powerState(lstPw ? "on" : "off");
BlinkerAliGenie.print();
}
else if (state == BLINKER_CMD_OFF) {
switchChange(0);
BlinkerAliGenie.powerState(lstPw ? "on" : "off");
BlinkerAliGenie.print();
}
}
void aligenieQuery(int32_t queryCode)
{
lstPw = digitalRead(CHK_PORT);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(lstPw ? "on" : "off");
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(lstPw ? "on" : "off");
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.powerState(lstPw ? "on" : "off");
BlinkerAliGenie.print();
break;
}
}
void miotPowerState(const String & state)
{
if (state == BLINKER_CMD_ON) {
switchChange(1);
BlinkerMIOT.powerState(lstPw ? "on" : "off");
BlinkerMIOT.print();
} else if (state == BLINKER_CMD_OFF) {
switchChange(0);
BlinkerMIOT.powerState(lstPw ? "on" : "off");
BlinkerMIOT.print();
}
}
void miotQuery(int32_t queryCode)
{
lstPw = digitalRead(CHK_PORT);
switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("MIOT Query All");
BlinkerMIOT.powerState(lstPw ? "on" : "off");
BlinkerMIOT.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("MIOT Query Power State");
BlinkerMIOT.powerState(lstPw ? "on" : "off");
BlinkerMIOT.print();
break;
default :
BlinkerMIOT.powerState(lstPw ? "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 tickHandle() {
count++;
}
void heartbeat() {
uint32_t nowPw = digitalRead(CHK_PORT);
BtnRemote.text(nowPw ? "开机" : "关机");
BtnRemote.print(nowPw ? "on" : "off");
BLINKER_LOG("反馈电平:", nowPw);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(CHK_PORT, INPUT);
pinMode(OUT_PORT, OUTPUT);
digitalWrite(OUT_PORT, LOW);
lstPw = digitalRead(CHK_PORT);
Blinker.begin(auth);
Blinker.attachData(dataRead);
BlinkerMIOT.attachPowerState(miotPowerState);
BlinkerMIOT.attachQuery(miotQuery);
BlinkerAliGenie.attachPowerState(aligeniePowerState);
BlinkerAliGenie.attachQuery(aligenieQuery);
BtnRemote.attach(btn_callback);
myTicker.attach(4, tickHandle);//4s ticked
Blinker.attachHeartbeat(heartbeat);
}
void reconnect() {
BLINKER_LOG("Reconnecting MQTT...");
if (!Blinker.connected()) {
Blinker.connect();
count = 0;
}
}
void loop()
{
Blinker.run();
if (count >= 5) {
if (!Blinker.connected()) {
reconnect();
} else {
count = 0;
}
}
uint32_t nowPw = digitalRead(CHK_PORT);
if (nowPw != lstPw) {
BtnRemote.text(nowPw ? "开机" : "关机");
BtnRemote.print(nowPw ? "on" : "off");
BLINKER_LOG("变化电平:", nowPw);
}
lstPw = nowPw;
}
你这个板接通电源瞬间,ESP8266会自检,用于控制电脑,会自动开机的;P需要改电路。 keliyuan 发表于 2020-4-17 22:23
你这个板接通电源瞬间,ESP8266会自检,用于控制电脑,会自动开机的需要改电路。 ...
我最开始测试其它设备比如小灯什么的,确实会上电动作,但我不是这方面专业人士,不会解决。
但主机电源刚通电那一瞬间,继电器虽然会动作一下,但主板供电条件不完全具备,开不了机的,亲测。 其实不需要继电器 电源选项设置一下是不是可以关机?
再接一个引脚给重置键,是不是就可以重启?
再接一个引脚给显示器电源,是不是就可以把屏幕一起给控制了? 本帖最后由 suen.sun 于 2020-4-20 20:31 编辑
shark526 发表于 2020-4-20 15:31
电源选项设置一下是不是可以关机?
再接一个引脚给重置键,是不是就可以重启?
再接一个引脚给显示器电源, ...
理论上都是可以的,我这么做主要是想在公司开家里的电脑,远程传点资料,下个片什么的。
电源选项我设置的是休眠。关机很久都没有关过了。
shark526 发表于 2020-4-20 15:31
电源选项设置一下是不是可以关机?
再接一个引脚给重置键,是不是就可以重启?
再接一个引脚给显示器电源, ...
显示器电源不需要控制的呀 你好,请问一下ESP-01S是否可以拿GPIO2当输入检测角?我自己写的程序会出现:当给2输入3.3v电压时,及时断电了。但此时2角还是高电平。只有再次给3.3v才会变成低电平! 本帖最后由 lh5263872 于 2020-7-14 12:13 编辑
xiamo 发表于 2020-7-12 21:13
你好,请问一下ESP-01S是否可以拿GPIO2当输入检测角?我自己写的程序会出现:当给2输入3.3v电压时,及时断 ...
01s就两个gpio,我的方法是一个gpio直接输出1秒高电平到电脑开机按钮那根线
检测状态是另外一个gpio直接程序里PULLUP拉高,接到电脑电源指示灯那根线检测 lh5263872 发表于 2020-7-14 12:12
01s就两个gpio,我的方法是一个gpio直接输出1秒高电平到电脑开机按钮那根线
检测状态是另外一个gpio直接程 ...
曲线救国
页:
[1]
2