|
前言
最近从朋友那收了台主机,笔记本就吃灰去了,可是外出的时候就有远程的需求。老平台嫌一直开机的话功耗太大,但是一番折腾发现主板居然不支持WOL(通过幻数据包唤醒),那要远程开机就只有一条路了,就只能在开机键上做文章了。先说下网络环境,内网有台猫盘作为nas,有公网ipv6(移动宽带几乎无法要到公网ipv4,好在现在ipv6一般都给了,特别是三家的4g5g都有v6了),并且通过ddns做了v6的动态域名,然后搭了wireguard(微屁嗯),所以在在外面可以直接访问家里内网,所以我只要实现内网的开机系统即可,就不接入物联网平台了。
方案选型
既然和wifi有关系,那首选当然是esp8266了,价格低,又可以在Arduino IDE中进行开发。
硬件方案
淘宝一搜,ESP8266+继电器模块才9.9包邮,果断下单,然后用上面的继电器代替开机按钮(我直接取代了开机按钮,当然也可以并联,保留手动和通过网络),这款主板支持关机usb输出5V,刚好给他供电
实现功能
1. Airkiss协议实现wifi配网
2. 基于web页面,实现开机(控制继电器接通0.5s)
3. 基于web页面,实现强制关机(控制继电器接通10s以上)
程序编写
这块wifi模块里面其实默认有安信可固件,连app都给你配套了,但这不是我想要的,特别是不想安装个app。我的想法是实现基于web的控制,不管是使用手机还是电脑,都可以通过web界面来进行操控,甚至在linux命令行下通过curl发送http请求也可以进行操作。
开发使用Arduino IDE进行开发,需要安装ESP8266的支持库,具体过程就不赘述了,网上很多教程。
首先实现Airkiss,其实这个也是封装好的了,调用
WiFi.beginSmartConfig();
即可开始Airkiss配网,具体使用的话,微信里搜一下,随便找个支持Airkiss配网的公众号,都是通用的协议
使用
WiFi.smartConfigDone()
检查是否完成配置,然后进行保存
WiFi.setAutoConnect(true);
我的策略是开机的时候检查wifi是否连接成功,不成功就进入Airkiss。当然你如果图方便,直接写死连什么wifi也可以
然后是实现web服务器,引用http server的库需要包含头文件
#include <ESP8266WebServer.h>
然后开启服务器,参数是端口号,选择80的话访问时无需写端口号
ESP8266WebServer server(80);
然后设置相应的回调函数,这个有点像cgi-bin那种,设置好监听的url,如果访问到那个url就会调用相应的回调函数,然后在回调函数实现相应的操作即可实现功能,这里是操作继电器
server.begin();
server.on("/", handleRoot);
server.on("/power_on", handlePowerOn);
server.on("/force_power_off", handleForcePowerOff);
server.onNotFound(handleNotFound);
假设esp8266联网后私网ip为192.168.1.100,则第二三四五行分别是,注册访问根目录(http://192.168.1.100),访问http://192.168.1.100/power_on,访问http://192.168.1.100/force_power_off以及其他url时调用的函数
接下来实现函数体,根目录就放两个功能页面的超链接,供用户点击跳转;power_on对应开机,访问后一方面要输出内容,我放置了提示信息以及返回首页的超链接,另一方面要执行继电器的操作,即操作GPIO0,强制关机页面(force_power_off)同理
根目录的函数
void handleRoot() {
server.send(200, "text/html; charset=utf-8", " \
<a href=\"/power_on\" target=\"opentype\">开机</a>\r\n \
<br> \
<br> \
<a href=\"/force_power_off\" target=\"opentype\">强制关机</a>\r\n \
");
}
实现效果如图
开机的函数
void handlePowerOn() {
server.send(200, "text/html; charset=utf-8", " \
<p>正在执行开机</p>\r\n \
<br> \
<br> \
<a href=\"/\" target=\"opentype\">返回</a>\r\n \
");
digitalWrite(RELAY_PIN, HIGH);
delay(500);
digitalWrite(RELAY_PIN, LOW);
}
页面效果如图
主循环需要调用
server.handleClient();
web界面理论上可以写些css美化下啥的,懒,反正自己用,有兴趣网友可以自行美化
最后,懒得装壳子了,直接热熔胶大法+铁丝把他挂在机箱外面,防止机箱内wifi信号不好,引出来5V和开机线,收工
平时使用的时候,我直接将开机的url 如http://192.168.1.100/power_on,发到微信文件传输助手,然后收藏起来,即使在电脑前,开机也用微信点击,不用弯腰去按开机键了
需要源码,请移步gitee
https://gitee.com/Sumn255/esp8266-pc_power_on
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|