原理概述
- 原理:利用WOL(Wake On LAN)技术,可实现关机/睡眠状态下的台式机电脑被处理同一局域网下的设备通过魔术包(一种具有特定载荷的UDP协议包)唤醒。在此基础上,利用ESP8266WIFI模块接入公共物联网平台,使得ESP8266WIFI模块可被物联网平台配套应用远程操控。完整的流程为:移动端通过公共物联网平台发送指令->ESP8266WIFI模块收到指令后向局域网内的台式机发送魔术包->台式机收到魔术包被唤醒
- 硬件设施:台式机设备(主板:微星H610M爆破弹 网卡:Intel Ethernet connection (17) 1219-V、ESP8266_NodeMcu开发板
- 开发环境:ArduinoIDE
1 WOL实现
1.1 WOL配置
- WOL是一种让网卡在主机关机的状态下仍保持工作,等待接收到魔术包即唤醒主机的技术。主流的主板一般均具备WOL功能,一般需要在BIOS以及网卡属性中进行相关设置,网卡的设置步骤基本相同,但是不同的主板BIOS设置步骤不同。请根据自身具体情况调整。此外,大部分无线网卡不支持关机后工作,所以WOL唤醒方案只适合有限网卡的主机。
- 微星H610M爆破弹BIOS设置
待补充 - Intel Ethernet connection (17) 1219-V网卡设置
待补充
1.2 WOL测试
-
完成BIOS和网卡的相关设置后将电脑关机,观察机箱网线接口处的灯是否保持闪烁,如果闪烁证明网卡在关机后仍在正常数据收发,这是接收唤醒包的必备条件。
-
使用测试工具测试唤醒包是否能正常收到。这里需要两类工具,一是主机端的捕获网络数据的工具,二是唤醒包发送工具。
-
主机端捕获工具
1)协议类型选择UDP
2)本地端口号选择7或者9(建议分别尝试)
-
唤醒包发送工具
-
1)将手机连接到与主机同一局域网。在微信小程序中搜索下图小程序
-
2)MAC地址填写本机地址
-
3)点击唤醒
-
4)观察主机端捕获工具数据接收,出现以下内容表示收到了唤醒包
-
唤醒包的载荷格式为【FF FF FF FF FF FF】+【主机MAC】*16
至此主机端WOL唤醒完毕。
2 代码开发测试
2.1 阿里云平台部署
主页搜索生活物联网平台(飞燕)–>管理控制台–>项目–>创建产品–>【功能定义】–>【人机交互】选云智能并完成【产品展示】【配网引导】【绑定方式】【设备面板】灯一系列基础配置
–>【设备调试】中新增测试设备记录PRODUCT_KEY、DEVICE_NAME、DEVICE_SECRET
–>在【产品说明书】中点击下载配网二维码填写DEVICE_NAME。
2.2 Arduino环境下的代码编译
-
依赖的Arduino库:ArduinoJson、AliyunIoTSDK、Crypto、WIFIManager、PubSubClient
#include <ESP8266WiFi.h>
//#include <Wire.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h>
-
PubSubClient.h 的修改(适配与阿里云的MQTT通讯)
MQTT_MAX_PACKET_SIZE 改为1024
MQTT_KEEPALIVE 改为65
// MQTT_MAX_PACKET_SIZE : Maximum packet size. Override with setBufferSize().
#ifndef MQTT_MAX_PACKET_SIZE
#define MQTT_MAX_PACKET_SIZE 1024
#endif
// MQTT_KEEPALIVE : keepAlive interval in Seconds. Override with setKeepAlive()
#ifndef MQTT_KEEPALIVE
#define MQTT_KEEPALIVE 65
#endif
-
代码中的以下三项按物联网平台中生成的填写
#define PRODUCT_KEY "XXXXXXX"
#define DEVICE_NAME "XXXXXX"
#define DEVICE_SECRET "XXXXXXXXX"
-
编译通过后将程序烧写到开发板中。正常情况下设备首先会连接WIFI成功,再连接MQTT服务器成功。此后物联网平台可看到设备在线。
2.3 在线调试
- 进入到【设备调试】,选择具体设备,会进入在线调试界面,读写对应的属性右侧日志窗口会有日志,esp8266的调试串口输出端会有打印信息
2.4 云智能APP测试
- 使用云智能APP扫描配网二维码会进入APP界面,操作控件会在esp8266的调试串口输出端看到打印信息,与在线调试效果相同
3 应用场景分析及调整
- 适用于家中台式机与ESP8266接入的WIFI共处一个局域网的场景,部分路由器本身具备WOL唤醒包发送功能,可用该路由器代替ESP8266。