本帖最后由 shawnting 于 2023-11-16 00:14 编辑
1、前言
家用电脑搭建的服务器,偶尔停电和宕机,是否有个产品能远程开机或从启服务器呢?使用万能的淘宝搜索,确实有这样的产品,价格还可以接受。对嵌入式还有点兴趣,看看自己能不能肝出硬件来,然后烧录上自己写的程序。
2、功能介绍
1、 主控采用ESP-12F,带wifi模块。基于Blinker物联网平台; 2、 硬件光耦隔离,两路输入。一路开机,一路复位; 3、 手机端使用Blinker App,自定义控制界面;开机从和重启复用一个按钮,单机是开机,长按重启。
3、硬件设计
3.1 硬件原理图
3.2 硬件PCB
3.3 硬件3D视图
嘉立创下单打样,反正也不着急,正常周期3天,京东物流2天到手。
3.4 硬件实物
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();
- }
复制代码 |