数码之家

 找回密码
 立即注册
搜索
查看: 2604|回复: 22

[Arduino] ESP8266制作一个物理网络唤醒开机器,没有wol功能主板的福音

[复制链接]
发表于 2022-1-23 00:26:38 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
前言
最近从朋友那收了台主机,笔记本就吃灰去了,可是外出的时候就有远程的需求。老平台嫌一直开机的话功耗太大,但是一番折腾发现主板居然不支持WOL(通过幻数据包唤醒),那要远程开机就只有一条路了,就只能在开机键上做文章了。先说下网络环境,内网有台猫盘作为nas,有公网ipv6(移动宽带几乎无法要到公网ipv4,好在现在ipv6一般都给了,特别是三家的4g5g都有v6了),并且通过ddns做了v6的动态域名,然后搭了wireguard(微屁嗯),所以在在外面可以直接访问家里内网,所以我只要实现内网的开机系统即可,就不接入物联网平台了。

方案选型
既然和wifi有关系,那首选当然是esp8266了,价格低,又可以在Arduino IDE中进行开发。

硬件方案
淘宝一搜,ESP8266+继电器模块才9.9包邮,果断下单,然后用上面的继电器代替开机按钮(我直接取代了开机按钮,当然也可以并联,保留手动和通过网络),这款主板支持关机usb输出5V,刚好给他供电
hardware.jpg
实现功能
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 \
  ");   
}
实现效果如图
mainpage.jpg
开机的函数
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);
}
页面效果如图
Screenshot_20220119_220829_com.tencent.mm.jpg
主循环需要调用
server.handleClient();
web界面理论上可以写些css美化下啥的,懒,反正自己用,有兴趣网友可以自行美化
最后,懒得装壳子了,直接热熔胶大法+铁丝把他挂在机箱外面,防止机箱内wifi信号不好,引出来5V和开机线,收工
mmexport1642864809407.jpg
平时使用的时候,我直接将开机的url 如http://192.168.1.100/power_on,发到微信文件传输助手,然后收藏起来,即使在电脑前,开机也用微信点击,不用弯腰去按开机键了
需要源码,请移步gitee
https://gitee.com/Sumn255/esp8266-pc_power_on


esp8266-pc_power_on-master.zip

37.06 KB, 下载次数: 1, 下载积分: 家元 -55

打赏

参与人数 3家元 +150 收起 理由
jf201006 + 20 謝謝分享
家睦 + 100
453395398 + 30 謝謝分享

查看全部打赏

发表于 2022-1-23 00:46:45 | 显示全部楼层
得语音唤醒
回复 支持 反对

使用道具 举报

发表于 2022-1-23 00:58:40 | 显示全部楼层
我去
我还特别把唤醒的功能关掉了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-23 01:35:38 | 显示全部楼层

好像是有库可以让esp8266接入天猫精灵啥的,就能做个语音控制的,不过我这暂时没这需求哈
回复 支持 反对

使用道具 举报

发表于 2022-1-23 02:28:12 | 显示全部楼层
吃烧饼喝三鹿 发表于 2022-1-23 00:58
我去
我还特别把唤醒的功能关掉了。。。

我也是,不然,休眠后系统总是被网络唤醒。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-23 08:45:43 | 显示全部楼层
mmxx2015 发表于 2022-1-23 02:28
我也是,不然,休眠后系统总是被网络唤醒。

应该可以设置只允许幻数据包唤醒的,就收到特定格式(包含网卡mac地址)的数据包才唤醒的
回复 支持 反对

使用道具 举报

发表于 2022-1-23 09:21:56 | 显示全部楼层
我以前也写代码,自从用了tasmota,就再也不写了。懒
回复 支持 反对

使用道具 举报

发表于 2022-1-23 09:48:32 | 显示全部楼层
非程序员的我完全看不懂,但是好像很厉害的样子,赞一个!~~~
回复 支持 反对

使用道具 举报

发表于 2022-1-23 09:56:58 | 显示全部楼层
总想着什么时候可以不用上物联网就能查询我的数据,可是网络水平不行,总是不得法。
回复 支持 反对

使用道具 举报

发表于 2022-1-23 10:27:11 | 显示全部楼层
够简单和简洁

你5v怎么接出来的,破线?

整了个pci+pcie的板子
微信图片_20211208090542.jpg
回复 支持 反对

使用道具 举报

发表于 2022-1-23 10:34:22 | 显示全部楼层
请教一下:代码是通过串口拷入ESP8266芯片内吗?
回复 支持 反对

使用道具 举报

发表于 2022-1-23 14:52:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2022-1-23 18:24:53 | 显示全部楼层
纯读文章,试问一下,此处继电器的作用是什么?没有其它电路控制了吧?单买个8266不就够了??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 00:33:21 | 显示全部楼层
muyan 发表于 2022-1-23 10:27
够简单和简洁

你5v怎么接出来的,破线?

这主板usb关机也有电,直接杜邦线插到主板空闲的usb插槽上了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 00:34:33 | 显示全部楼层
hesg 发表于 2022-1-23 10:34
请教一下:代码是通过串口拷入ESP8266芯片内吗?

对的,如果是Arduino IDE下开发的话,工具都给你准备好了,点箭头就可以下载,不过GPIO0要手动接地,才是烧录模式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-24 00:40:36 | 显示全部楼层
thisharp 发表于 2022-1-23 18:24
纯读文章,试问一下,此处继电器的作用是什么?没有其它电路控制了吧?单买个8266不就够了?? ...

继电器受esp8266控制,替代物理开机键。理论上知道开机要给什么电平,应该可以不要继电器的,懒得研究了
回复 支持 反对

使用道具 举报

发表于 2022-1-24 11:08:06 | 显示全部楼层
本帖最后由 fryefryefrye 于 2022-1-24 11:11 编辑
dlsys 发表于 2022-1-24 00:34
对的,如果是Arduino IDE下开发的话,工具都给你准备好了,点箭头就可以下载,不过GPIO0要手动接地,才是 ...

大概8-12元左右,就可以买ESP8266 Mini D1模块,自带USB,不用手动接地,直接IDE下载。
回复 支持 反对

使用道具 举报

发表于 2022-1-28 19:31:38 | 显示全部楼层
dlsys 发表于 2022-1-24 00:34
对的,如果是Arduino IDE下开发的话,工具都给你准备好了,点箭头就可以下载,不过GPIO0要手动接地,才是 ...

多谢回复!如果用Arduino IDE 下载的话,在开发板选项选什么开发板呢?ESP8266的有很多板卡,却没有看到ESP8266-01D的选项。
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:12:11 | 显示全部楼层
dlsys 发表于 2022-1-24 00:34
对的,如果是Arduino IDE下开发的话,工具都给你准备好了,点箭头就可以下载,不过GPIO0要手动接地,才是 ...

楼主你好:我现在已下载成功,但是接在继电器模块上没有一点反应,现有一点请教:配网时手机与模块怎么连接?因为手机上没有模块的任何信号,怎么配网呢?实在是网络知识太差,敬请不吝赐教,谢谢!
回复 支持 反对

使用道具 举报

发表于 2022-1-30 15:15:09 | 显示全部楼层
hesg 发表于 2022-1-28 19:31
多谢回复!如果用Arduino IDE 下载的话,在开发板选项选什么开发板呢?ESP8266的有很多板卡,却没有看到E ...

我现在接的是花生壳,手机访问路由器页面是没有问题的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-3-28 21:10 , Processed in 0.171600 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表