当前位置:首页 > 范文大全 > 公文范文 >

公文范文

基于ESP8266的机房远程开关机实现研究

2022-03-31 10:37:52公文范文
汤明伟 吴东超摘要:目前各学校的机房计算机数量庞大,如何破解机房批量开关机,提高实验室的日常管理水平

汤明伟 吴东超

摘 要:目前各学校的机房计算机数量庞大,如何破解机房批量开关机,提高实验室的日常管理水平和效率,是机房管理工作中的一大难题,文章提出基于ESP8266实现机房远程开关机方案,旨在不增加计算机软硬件的基础上,通过ESP8266自带的WiFi网路功能,为机房日常运行与维护寻找一套行之有效的方法。

关键词:远程控制;ESP8266;magic packet;局域网

0 引言

随着计算机技术的日异月新,各高校的机房配置的计算机功能越来越丰富,计算机的网卡都支持远程唤醒(Wake On LAN)功能。为了方便教学各机房安装了类似“极域2015”控制端软件,实现了远程开关机和网络教学功能,极大地提升了教学质量和教学效果。但因各种原因,机房在使用结束后,或多或少总有部分机器未关机。这些未正常关机的计算机不仅持续地浪费电力资源,存在着安全隐患;这些未关闭的计算机也给机房管理带来了不少麻烦,直接断电关机,会造成计算机的软硬件损坏,影响正常的使用;如果逐一正常关机,大大增加了机房管理人员的工作量。如果能利用计算机的远程唤醒功能,开发一套无需在计算机上安装控制端的系统,用于应对机房的日常管理,将大大减轻机房管理员的工作量。设计思路如下:获取要控制的计算机网卡MAC地址,通过ESP8266开发板的自带的WiFi联网功能接入局域网,由ESP8266利用网卡的远程唤醒功能,向被控计算机发送开关机指令实现远程开关机指令,实现机房快速开关机功能,有效减轻机房管理的工作量,同时也有效延长了计算机软硬件的使用寿命,减少了不必要的浪費[1]。

1 Wake On LAN远程唤醒的原理

当联网的计算机关闭启远程唤醒功能时,计算机关机后网卡也处于关闭状态,是无法检测、接收网络上的信息的。如果将计算机的远程唤醒功能开启,计算机网卡在计算机关机后处于低功耗状态,可以检测、接收网络上的信息,并对接收到的信息进行处理,这就为远程唤醒计算机的实现提供了硬件基础。当计算机处于关机状态时,计算机的IP地址和计算机名称都无法识别计算机身份,唯一能够作为识别计算机身份只有网卡的物理地址(MAC)[2]。用户获取被唤醒计算机的物理地址(MAC)后,就可以利用广播包的方式在网络上传输唤醒数据包,唤醒数据包中包含被唤醒计算机的网卡信息、物理地址信息等数据资料。当处于关机状、睡眠状态的计算机网卡接收到唤醒数据包后,网卡控制芯片通过检测数据包中的MAC地址,如果发现并确认数据是发给自己的,则通过专用的电路出发开机信号,计算机加电启动[3]。

Magic Packet是AMD公司开发的网络唤醒技术,根据Magic Packet标准,Magic Packet数据包包含两部内容,共计102字节,格式为:6*0xFF+16*MAC地址。其中6个“FF”表示这是一个特殊的唤醒数据包,后面紧跟重复16次的被唤醒计算机的MAC地址。

2   ESP8266WiFi模块简介

乐鑫科技是一家全球化的无晶圆厂半导体公司,多年来深耕AIoT领域软硬件产品的研发与设计。ESP8266模块提供了一套高度集成的WiFi SoC解决方案,专注于研发高集成、低功耗、性能卓越、安全稳定、高性价比的WiFi和蓝牙MCU。既能独立应用,也可以作为从机搭载其他主机MCU运行,成为物联网应用的理想选择。

2.1  ESP8266 系列芯片参数

32-bit MCU&2.4 GHz WiFi;单核CPU时钟频率高达160 MHz;+19.5 dBm天线端输出功率,确保良好的覆盖范围;睡眠电流小于20 μA,适用于电池供电的可穿戴电子设备;外设包括 UART,GPIO,I2S,I2C,SDIO,PWM,ADC 和SPI。

2.2  ESP8266的特点

2.2.1 性能卓越

ESP8266EX芯片内置超低功耗Tensilica L106 32位RISC处理器,CPU时钟速度最高可达160 MHz,支持实时操作系统(RTOS)和WiFi协议栈,可以将高达80%的处理能力应用于编程和开发。

2.2.2 高度集成

ESP8266芯片高度集成天线开关、射线巴伦、功率放大器、低噪音接收发达器、滤波器等射频模块。模组尺寸小巧,尤其适用于空间受限的产品设计。

2.2.3  产品应用丰富

ESP8266模组既可以通过ESP-AT指令固件,为外部主机MCU提供WiFi连接功能;也可以作为独立WiFi MCU运行,用户通过RTOS的SDK开发带WiFi连接功能的产品。

3 系统实现过程

3.1 开发语言环境

开发环境采用Arduino1.8.13版本作为开发环境,由于Arduino采用开源代码,并且具有使用类似Java,C语言的Processing/Wiring开发环境。Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成项目开发,大大节约了学习的成本,缩短了开发的周期。同时下载并配置ESP8266开发库,方便ESP8266的开发。

3.2 硬件连接

在不改变机房网络连接的基础上,ESP6266通过有线或者无线方式接入机房局域网,通过两个开关按钮向ESP8266发送开关机指令,当ESP8266收到按钮信息后执行开关机代码,然后通过广播方式将封装好的唤醒数据包发送到局域网中,实现对局域网中计算机的开关机控制(见图1)。

3.3 功能实现

该系统重点实现对局域网中计算机进行远程开关机操作,用于减轻机房管理员逐台手动开关机的工作量,提高机房管理员的工作效率。当机房管理员需要对计算机开机检修或者批量关闭计算机时,仅需要按下连接ESP8266开发板上对应的开关机按钮就可以实现对批量计算机执行相同的操作。同时也减少了机房计算机因非正常开关机带来的负面影响,提升了计算机的使用率,延长了计算机整体的使用寿命。该系统目前只需要包含4个功能。

3.3.1 WiFi自动联网功能

由于现在的网络环境复杂,学院WiFi信号覆盖有三四种,有的需要账号和密码,有的不需要密码可以直连;再加上学生自己利用手机开设热点,就会导致ESP8266加电会扫描到很多热点,为了防止ESP8266“意外”连接到其他热点,就需要通过控制实现ESP8266自动联网功能,让其在加电后直接连接上指定的热点,确保ESP8266始终能够连接到指定的局域网中。而ESP8266初次联网后,系统会自动将WiFi的账号、密码自动保存在flash ROM中,当再次上电后先检测保存的连接信息是否能够联网,如果有有效的连接信息存在,则自动进行连接;否则自动建立“AutoConnectAP”热点,通过手机连接“AutoConnectAP”热点,选择指定的WiFi信号并输入密码,完成ESP8266接入指定的网络。通过此方法,极大地提升了ESP8266的普及率,可以使用ESP8266的WiFiManager库实现自动联网的功能。

由于本系统开发过程中暂不使用任何显示设备,如何确定ESP8266是否联网成功,也是需要考虑的问题。本系统使用ESP8266自带的LED指示灯来提示用户是否联网成功,设计思路如下:

如果联网成功,则ESP8266自带的LED常亮;如果正在联网则LED快速闪烁,尝试连接WiFi热点20次,还是连接不成功则停止连接,LED持续快速闪烁。通过这个方法,用户就可以知道ESP8266的联网状况。實现代码如图2所示。

3.3.2 远程开机功能实现

在局域网中通过arp–a命令获取局域网中各计算机的MAC地址,MAC地址格式为“6C-0B-84-68-7B-38”,通过代码检测给定的MAC地址字符串是否是指定的长度。如果是代码中自定的长度,则认为MAC地址正确,通过格式控制函数将获取的MAC地址转换成为十六进制表示格式“0x6C-0x0B-0x84-0x68-0x7B-0x38”;否则给出错误提示信息。

通过代码将“0x6C-0x0B-0x84-0x68-0x7B-0x38”中的数据提取出来,剔除格式字符串中的“-”符号,并将数据保存到{0x6C,0x0B,0x84,0x68,0x7B,0x38}数组中,这个数组中的值就是构造Magic Packet数据包要用到的数据。

根据Magic Packet白皮书描述,这个魔法数据包由6组 “FF”+16组十六进制的被唤醒计算机的MAC地址构成(FFFFFFFFFFFF6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38

6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38)。因此需要通过代码构造Magic Packet数据包,实现代码如图3所示。

通过以上3个步骤,可以获得Magic Packet封装的数据包。通过UDP协议将封装好的数据包发送到局域网中,这样局域网中的计算机网卡都会收到这个唤醒数据包,网卡通过解析决定是否是自己的MAC地址,决定是否执行唤醒操作,具体代码如下:

void sendMagicPacket(char* _SingleMAC,IPAddress _broadcastAddress,uint16_t _NumPort){

……

//Constructing magic packet variable

size_t magicPacketSize = 6 +(6 * 16);  // FF*6 + MAC*16

uint8_t* magicPacket = new uint8_t[magicPacketSize];

if(strlen(_SingleMAC)==17){

sprintf(FormatString,”%%2x%c%%2x%c%%2x%c%%2x%c%%2x%c%%2x”,

_SingleMAC[2],_SingleMAC[5],_SingleMAC[8],_SingleMAC[11],_SingleMAC[14]);

intcounts=sscanf(_SingleMAC,(const char*)FormatString,&tempMACAddress[0],

&tempMACAddress[1],&tempMACAddress[2],&tempMACAddress[3],

&tempMACAddress[4],&tempMACAddress[5]);

if(counts==6){

for(int i=0;i<sizeof(tempMACAddress)/sizeof(*tempMACAddress);i++){

MACAddressHEX[i]=tempMACAddress[i];

Serial.print(MACAddressHEX[i],HEX);

}}

else{      Serial.println(“Conversion Failed !”);    }

generateMagicPacket(magicPacket, magicPacketSize,

MACAddressHEX, sizeof(MACAddressHEX));

for(int i=0;i<3;i++){

wifiUDP.beginPacket(_broadcastAddress,_NumPort);

wifiUDP.write(magicPacket,magicPacketSize);

sucessNum=wifiUDP.endPacket();

delay(100);

if(sucessNum==3){

Serial.println(“Data Send Succeed!”);

sucessNum=0;

}}}

else{    Serial.println(“MAC Address Data Format Error!”);  }  }

3.3.3 远程关机功能实现

计算机处于正常运行状态,可以正常接收并执行命令行。采用UDP协议通过广播地址向局域网广播,向整个局域网发送关机命令(shutdown),当计算机收到关机命令后,本地执行关机命令实现远程关机。实现代码如下:

SendShutdown(uint16_t Numport){

Const char* ShutDown=”shutdown”;

int suceessNum=0;

for(int i=0;i<3;i++){

wifiUDP.beginPacket(_broadcastAddress,_NumPort);

wifiUDP.write(ShutDown,8);

sucessNum=wifiUDP.endPacket();

delay(100);

if(sucessNum==3){

Serial.println(“Data Send Succeed!”);

sucessNum=0;

}}}

4 功能测试

以联想启天M428-A119台式计算机作为目标测试机,配置如下:

(1)CPU:Intel® Core(TM)i3-8100 @ 3.60 GHz 3.60 GHz;

(2)内存:8 G内存;

(3)操作系统类型:Windows7 64位旗舰版;

(4)网卡:Realtak PCIe GbE Family Controller千兆网卡;

从机房中随机挑选4台计算机,首先,进入BIOS界面,确保“Wake On LAN ”选项开启。进入BIOS界面,切换到“Power”,修改“Wake On LAN”选项为“Automatic”,保存退出BIOS。

其次,修改网卡选项,确保可以接收到唤醒的数据包。进入Windows7系统桌面,鼠标右键单击“我的电脑”—“属性”—“设备管理器”—“网卡适配器”—“Realtak PCIe GbE Family Controller”,鼠标右键单击此网卡,选择“属性”,弹出网卡属性对话框。在“高级”选项卡中,修改“魔术封包”和“关机网络唤醒”的值为“开启”;在“电管理”选项卡中,勾选“允许此设备唤醒计算机”,点击“确认”按钮保存修改。

最后,将烧录代码的ESP8266开发板中,通过WiFi接入机房的局域网,确保WiFi的IP地址和计算机的IP地址在同一个网段。ESP8266通电后LED灯点亮,表示ESP8266联网成功。按下开发板上的“开机”按键,可以看到4台计算机依次加电开启,表明设计思路正确,获取目标机MAC格式正确,系统代码正常运行。

5   结语

本系统旨在不改变原有机房布局和配置的前提下,无需安装控制端程序,通过单个ESP8266开发板实现局域网中的远程唤醒/关闭计算机功能,有效解决了机房批量开关机的难题,消除了机房的安全隐患,提升了机房管理效率。

[参考文献]

[1]李佳.远程控制技术在高校机房管理中的应用探究[J].电脑编程技巧与维护,2019(10):34.

[2]储怀川,王诚忠,张宇.基于GSM短信的无人机房远程控制系统的设计[J].有线电视技术,2017(5):67.

[3]高岳.机房管理中网络远程控制技术应用研究[J].信息系统工程,2017(1):48-49.

(编辑 何 琳)

Research and implementation of remote switching machine room based on ESP8266

Tang Mingwei, Wu Dongchao*

(Jiangyin Vocational and Technical College, Jiangyin 214405, China)

Abstract:At present, there are a large number of computers in the computer room of each school. How to crack the batch switching on and off of the computer room and improve the daily management level and efficiency of the laboratory is a major problem in the computer room management. This paper proposes a scheme to realize the remote switching on and off of the computer room based on ESP8266, which aims to realize the WiFi network function of ESP8266 without adding computer software and hardware, find a set of effective methods for the daily operation and maintenance of the computer room.

Key words:remote control; ESP8266; magic packet; LAN

作者簡介:汤明伟(1980— ),男,江苏江阴人,讲师,硕士;研究方向:软件技术。

通信作者:吴东超(1975— ),男,山东菏泽人,副教授,硕士;研究方向:计算机应用。

猜你喜欢远程控制局域网基于SMS短信的远程燃气壁挂炉温度控制器设计电脑知识与技术(2017年22期)2017-10-26计算机局域网组建及管理探讨魅力中国(2017年15期)2017-09-16基于微信公众号的智能玩具系统研究无线互联科技(2017年4期)2017-05-23用无线路由器共享单位局域网电脑知识与技术·经验技巧(2017年1期)2017-03-21对变电站防入侵智能布防系统的研究叶军辉科技与创新(2016年4期)2016-03-16船舶走锚异地监视系统设计中国水运(2014年11期)2014-11-27本期导读环球时报(2013-01-10)2013-01-10局域网存在的安全隐患及其防治策略中小企业管理与科技·下旬刊(2012年1期)2012-06-08

推荐访问:机房 开关机 研究