问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用ESP-12F制作WiFi远程开机卡

创作时间:
作者:
@小白创作中心

使用ESP-12F制作WiFi远程开机卡

引用
1
来源
1.
https://www.sekorm.com/news/share?newId=529284006

在家用电脑服务器偶尔会遇到停电或宕机的情况,有没有一种产品可以实现远程开机或重启服务器呢?本文将介绍如何使用ESP-12F模块制作一个WiFi远程开机卡,通过手机APP实现远程控制。

功能介绍

  1. 主控采用ESP-12F,带WiFi模块。基于Blinker物联网平台;
  2. 硬件光耦隔离,两路输入。一路开机,一路复位;
  3. 手机端使用Blinker App,自定义控制界面;开机和重启复用一个按钮,单击是开机,长按重启。

硬件设计

2.1 硬件原理图

2.2 硬件PCB

2.3 硬件3D视图

2.4 硬件实物

软件设计

基于Blinker平台,手机端用的Blinker App,设计界面如下:

#define BLINKER_WIFI
#define BLINKER_ALIGENIE_OUTLET
#include <Blinker.h>

char auth[] = "xxxxxxxxx";
char ssid[] = "xxxxxx";
char pswd[] = "xxxxxxx";

/***************************手机APP接口***********************/
//按键1初始化, 创建对象
#define BUTTON1 "ButtonKey1"
BlinkerButton Button1(BUTTON1);
#define BOOTGPIO4 4
#define RESETGPIO5 5
#define LED LED_BUILTIN

//按键1数据处理回调函数
void Button1Callback(const String& state) {
    BLINKER_LOG("get button state: ", state);
    if (state == "tap") {
        //电脑开关机
        digitalWrite(BOOTGPIO4, HIGH);
        digitalWrite(LED, HIGH);
        delay(1000);
        digitalWrite(BOOTGPIO4, LOW);
        digitalWrite(LED, LOW);
        Blinker.print("Boot OK.");
        BLINKER_LOG("Boot OK.");
    }
    if (state == "press") {
        //电脑重启
        digitalWrite(RESETGPIO5, HIGH);
    }
    if (state == "pressup") {
        digitalWrite(RESETGPIO5, LOW);
        Blinker.print("Reboot OK.");
        BLINKER_LOG("Reboot OK.");
    }
}

//检测收到未解析数据时的回调函数
void dataRead(const String& data) {
    BLINKER_LOG("Blinker readString: ", data);
    Blinker.vibrate();
    uint32_t BlinkerTime = millis();
    Blinker.print("millis", BlinkerTime);
}

void setup() {
    //初始化串口服务
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);

    //设置引脚模式并初始化引脚
    pinMode(LED, OUTPUT);
    digitalWrite(LED, LOW);
    pinMode(BOOTGPIO4, OUTPUT); //开关机控制引脚
    digitalWrite(BOOTGPIO4, LOW);
    pinMode(RESETGPIO5, OUTPUT); //重启控制引脚
    digitalWrite(RESETGPIO5, LOW);

    //网络初始化
    Blinker.begin(auth, ssid, pswd);

    //注册Blinker APP命令的回调函数
    Blinker.attachData(dataRead);
    Button1.attach(Button1Callback);
}

void loop() {
    Blinker.run();
}
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号