湯明偉 吳東超
摘 要:目前各學(xué)校的機(jī)房計(jì)算機(jī)數(shù)量龐大,如何破解機(jī)房批量開關(guān)機(jī),提高實(shí)驗(yàn)室的日常管理水平和效率,是機(jī)房管理工作中的一大難題,文章提出基于ESP8266實(shí)現(xiàn)機(jī)房遠(yuǎn)程開關(guān)機(jī)方案,旨在不增加計(jì)算機(jī)軟硬件的基礎(chǔ)上,通過ESP8266自帶的WiFi網(wǎng)路功能,為機(jī)房日常運(yùn)行與維護(hù)尋找一套行之有效的方法。
關(guān)鍵詞:遠(yuǎn)程控制;ESP8266;magic packet;局域網(wǎng)
0 引言
隨著計(jì)算機(jī)技術(shù)的日異月新,各高校的機(jī)房配置的計(jì)算機(jī)功能越來越豐富,計(jì)算機(jī)的網(wǎng)卡都支持遠(yuǎn)程喚醒(Wake On LAN)功能。為了方便教學(xué)各機(jī)房安裝了類似“極域2015”控制端軟件,實(shí)現(xiàn)了遠(yuǎn)程開關(guān)機(jī)和網(wǎng)絡(luò)教學(xué)功能,極大地提升了教學(xué)質(zhì)量和教學(xué)效果。但因各種原因,機(jī)房在使用結(jié)束后,或多或少總有部分機(jī)器未關(guān)機(jī)。這些未正常關(guān)機(jī)的計(jì)算機(jī)不僅持續(xù)地浪費(fèi)電力資源,存在著安全隱患;這些未關(guān)閉的計(jì)算機(jī)也給機(jī)房管理帶來了不少麻煩,直接斷電關(guān)機(jī),會(huì)造成計(jì)算機(jī)的軟硬件損壞,影響正常的使用;如果逐一正常關(guān)機(jī),大大增加了機(jī)房管理人員的工作量。如果能利用計(jì)算機(jī)的遠(yuǎn)程喚醒功能,開發(fā)一套無需在計(jì)算機(jī)上安裝控制端的系統(tǒng),用于應(yīng)對機(jī)房的日常管理,將大大減輕機(jī)房管理員的工作量。設(shè)計(jì)思路如下:獲取要控制的計(jì)算機(jī)網(wǎng)卡MAC地址,通過ESP8266開發(fā)板的自帶的WiFi聯(lián)網(wǎng)功能接入局域網(wǎng),由ESP8266利用網(wǎng)卡的遠(yuǎn)程喚醒功能,向被控計(jì)算機(jī)發(fā)送開關(guān)機(jī)指令實(shí)現(xiàn)遠(yuǎn)程開關(guān)機(jī)指令,實(shí)現(xiàn)機(jī)房快速開關(guān)機(jī)功能,有效減輕機(jī)房管理的工作量,同時(shí)也有效延長了計(jì)算機(jī)軟硬件的使用壽命,減少了不必要的浪費(fèi)[1]。
1 Wake On LAN遠(yuǎn)程喚醒的原理
當(dāng)聯(lián)網(wǎng)的計(jì)算機(jī)關(guān)閉啟遠(yuǎn)程喚醒功能時(shí),計(jì)算機(jī)關(guān)機(jī)后網(wǎng)卡也處于關(guān)閉狀態(tài),是無法檢測、接收網(wǎng)絡(luò)上的信息的。如果將計(jì)算機(jī)的遠(yuǎn)程喚醒功能開啟,計(jì)算機(jī)網(wǎng)卡在計(jì)算機(jī)關(guān)機(jī)后處于低功耗狀態(tài),可以檢測、接收網(wǎng)絡(luò)上的信息,并對接收到的信息進(jìn)行處理,這就為遠(yuǎn)程喚醒計(jì)算機(jī)的實(shí)現(xiàn)提供了硬件基礎(chǔ)。當(dāng)計(jì)算機(jī)處于關(guān)機(jī)狀態(tài)時(shí),計(jì)算機(jī)的IP地址和計(jì)算機(jī)名稱都無法識(shí)別計(jì)算機(jī)身份,唯一能夠作為識(shí)別計(jì)算機(jī)身份只有網(wǎng)卡的物理地址(MAC)[2]。用戶獲取被喚醒計(jì)算機(jī)的物理地址(MAC)后,就可以利用廣播包的方式在網(wǎng)絡(luò)上傳輸喚醒數(shù)據(jù)包,喚醒數(shù)據(jù)包中包含被喚醒計(jì)算機(jī)的網(wǎng)卡信息、物理地址信息等數(shù)據(jù)資料。當(dāng)處于關(guān)機(jī)狀、睡眠狀態(tài)的計(jì)算機(jī)網(wǎng)卡接收到喚醒數(shù)據(jù)包后,網(wǎng)卡控制芯片通過檢測數(shù)據(jù)包中的MAC地址,如果發(fā)現(xiàn)并確認(rèn)數(shù)據(jù)是發(fā)給自己的,則通過專用的電路出發(fā)開機(jī)信號,計(jì)算機(jī)加電啟動(dòng)[3]。
Magic Packet是AMD公司開發(fā)的網(wǎng)絡(luò)喚醒技術(shù),根據(jù)Magic Packet標(biāo)準(zhǔn),Magic Packet數(shù)據(jù)包包含兩部內(nèi)容,共計(jì)102字節(jié),格式為:6*0xFF+16*MAC地址。其中6個(gè)“FF”表示這是一個(gè)特殊的喚醒數(shù)據(jù)包,后面緊跟重復(fù)16次的被喚醒計(jì)算機(jī)的MAC地址。
2 ? ESP8266WiFi模塊簡介
樂鑫科技是一家全球化的無晶圓廠半導(dǎo)體公司,多年來深耕AIoT領(lǐng)域軟硬件產(chǎn)品的研發(fā)與設(shè)計(jì)。ESP8266模塊提供了一套高度集成的WiFi SoC解決方案,專注于研發(fā)高集成、低功耗、性能卓越、安全穩(wěn)定、高性價(jià)比的WiFi和藍(lán)牙MCU。既能獨(dú)立應(yīng)用,也可以作為從機(jī)搭載其他主機(jī)MCU運(yùn)行,成為物聯(lián)網(wǎng)應(yīng)用的理想選擇。
2.1? ESP8266 系列芯片參數(shù)
32-bit MCU&2.4 GHz WiFi;單核CPU時(shí)鐘頻率高達(dá)160 MHz;+19.5 dBm天線端輸出功率,確保良好的覆蓋范圍;睡眠電流小于20 μA,適用于電池供電的可穿戴電子設(shè)備;外設(shè)包括 UART,GPIO,I2S,I2C,SDIO,PWM,ADC 和SPI。
2.2? ESP8266的特點(diǎn)
2.2.1 性能卓越
ESP8266EX芯片內(nèi)置超低功耗Tensilica L106 32位RISC處理器,CPU時(shí)鐘速度最高可達(dá)160 MHz,支持實(shí)時(shí)操作系統(tǒng)(RTOS)和WiFi協(xié)議棧,可以將高達(dá)80%的處理能力應(yīng)用于編程和開發(fā)。
2.2.2 高度集成
ESP8266芯片高度集成天線開關(guān)、射線巴倫、功率放大器、低噪音接收發(fā)達(dá)器、濾波器等射頻模塊。模組尺寸小巧,尤其適用于空間受限的產(chǎn)品設(shè)計(jì)。
2.2.3? 產(chǎn)品應(yīng)用豐富
ESP8266模組既可以通過ESP-AT指令固件,為外部主機(jī)MCU提供WiFi連接功能;也可以作為獨(dú)立WiFi MCU運(yùn)行,用戶通過RTOS的SDK開發(fā)帶WiFi連接功能的產(chǎn)品。
3 系統(tǒng)實(shí)現(xiàn)過程
3.1 開發(fā)語言環(huán)境
開發(fā)環(huán)境采用Arduino1.8.13版本作為開發(fā)環(huán)境,由于Arduino采用開源代碼,并且具有使用類似Java,C語言的Processing/Wiring開發(fā)環(huán)境。Arduino不僅僅是全球最流行的開源硬件,也是一個(gè)優(yōu)秀的硬件開發(fā)平臺(tái),更是硬件開發(fā)的趨勢。Arduino簡單的開發(fā)方式使得開發(fā)者更關(guān)注創(chuàng)意與實(shí)現(xiàn),更快的完成項(xiàng)目開發(fā),大大節(jié)約了學(xué)習(xí)的成本,縮短了開發(fā)的周期。同時(shí)下載并配置ESP8266開發(fā)庫,方便ESP8266的開發(fā)。
3.2 硬件連接
在不改變機(jī)房網(wǎng)絡(luò)連接的基礎(chǔ)上,ESP6266通過有線或者無線方式接入機(jī)房局域網(wǎng),通過兩個(gè)開關(guān)按鈕向ESP8266發(fā)送開關(guān)機(jī)指令,當(dāng)ESP8266收到按鈕信息后執(zhí)行開關(guān)機(jī)代碼,然后通過廣播方式將封裝好的喚醒數(shù)據(jù)包發(fā)送到局域網(wǎng)中,實(shí)現(xiàn)對局域網(wǎng)中計(jì)算機(jī)的開關(guān)機(jī)控制(見圖1)。
3.3 功能實(shí)現(xiàn)
該系統(tǒng)重點(diǎn)實(shí)現(xiàn)對局域網(wǎng)中計(jì)算機(jī)進(jìn)行遠(yuǎn)程開關(guān)機(jī)操作,用于減輕機(jī)房管理員逐臺(tái)手動(dòng)開關(guān)機(jī)的工作量,提高機(jī)房管理員的工作效率。當(dāng)機(jī)房管理員需要對計(jì)算機(jī)開機(jī)檢修或者批量關(guān)閉計(jì)算機(jī)時(shí),僅需要按下連接ESP8266開發(fā)板上對應(yīng)的開關(guān)機(jī)按鈕就可以實(shí)現(xiàn)對批量計(jì)算機(jī)執(zhí)行相同的操作。同時(shí)也減少了機(jī)房計(jì)算機(jī)因非正常開關(guān)機(jī)帶來的負(fù)面影響,提升了計(jì)算機(jī)的使用率,延長了計(jì)算機(jī)整體的使用壽命。該系統(tǒng)目前只需要包含4個(gè)功能。
3.3.1 WiFi自動(dòng)聯(lián)網(wǎng)功能
由于現(xiàn)在的網(wǎng)絡(luò)環(huán)境復(fù)雜,學(xué)院WiFi信號覆蓋有三四種,有的需要賬號和密碼,有的不需要密碼可以直連;再加上學(xué)生自己利用手機(jī)開設(shè)熱點(diǎn),就會(huì)導(dǎo)致ESP8266加電會(huì)掃描到很多熱點(diǎn),為了防止ESP8266“意外”連接到其他熱點(diǎn),就需要通過控制實(shí)現(xiàn)ESP8266自動(dòng)聯(lián)網(wǎng)功能,讓其在加電后直接連接上指定的熱點(diǎn),確保ESP8266始終能夠連接到指定的局域網(wǎng)中。而ESP8266初次聯(lián)網(wǎng)后,系統(tǒng)會(huì)自動(dòng)將WiFi的賬號、密碼自動(dòng)保存在flash ROM中,當(dāng)再次上電后先檢測保存的連接信息是否能夠聯(lián)網(wǎng),如果有有效的連接信息存在,則自動(dòng)進(jìn)行連接;否則自動(dòng)建立“AutoConnectAP”熱點(diǎn),通過手機(jī)連接“AutoConnectAP”熱點(diǎn),選擇指定的WiFi信號并輸入密碼,完成ESP8266接入指定的網(wǎng)絡(luò)。通過此方法,極大地提升了ESP8266的普及率,可以使用ESP8266的WiFiManager庫實(shí)現(xiàn)自動(dòng)聯(lián)網(wǎng)的功能。
由于本系統(tǒng)開發(fā)過程中暫不使用任何顯示設(shè)備,如何確定ESP8266是否聯(lián)網(wǎng)成功,也是需要考慮的問題。本系統(tǒng)使用ESP8266自帶的LED指示燈來提示用戶是否聯(lián)網(wǎng)成功,設(shè)計(jì)思路如下:
如果聯(lián)網(wǎng)成功,則ESP8266自帶的LED常亮;如果正在聯(lián)網(wǎng)則LED快速閃爍,嘗試連接WiFi熱點(diǎn)20次,還是連接不成功則停止連接,LED持續(xù)快速閃爍。通過這個(gè)方法,用戶就可以知道ESP8266的聯(lián)網(wǎng)狀況。實(shí)現(xiàn)代碼如圖2所示。
3.3.2 遠(yuǎn)程開機(jī)功能實(shí)現(xiàn)
在局域網(wǎng)中通過arp–a命令獲取局域網(wǎng)中各計(jì)算機(jī)的MAC地址,MAC地址格式為“6C-0B-84-68-7B-38”,通過代碼檢測給定的MAC地址字符串是否是指定的長度。如果是代碼中自定的長度,則認(rèn)為MAC地址正確,通過格式控制函數(shù)將獲取的MAC地址轉(zhuǎn)換成為十六進(jìn)制表示格式“0x6C-0x0B-0x84-0x68-0x7B-0x38”;否則給出錯(cuò)誤提示信息。
通過代碼將“0x6C-0x0B-0x84-0x68-0x7B-0x38”中的數(shù)據(jù)提取出來,剔除格式字符串中的“-”符號,并將數(shù)據(jù)保存到{0x6C,0x0B,0x84,0x68,0x7B,0x38}數(shù)組中,這個(gè)數(shù)組中的值就是構(gòu)造Magic Packet數(shù)據(jù)包要用到的數(shù)據(jù)。
根據(jù)Magic Packet白皮書描述,這個(gè)魔法數(shù)據(jù)包由6組 “FF”+16組十六進(jìn)制的被喚醒計(jì)算機(jī)的MAC地址構(gòu)成(FFFFFFFFFFFF6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38
6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38)。因此需要通過代碼構(gòu)造Magic Packet數(shù)據(jù)包,實(shí)現(xiàn)代碼如圖3所示。
通過以上3個(gè)步驟,可以獲得Magic Packet封裝的數(shù)據(jù)包。通過UDP協(xié)議將封裝好的數(shù)據(jù)包發(fā)送到局域網(wǎng)中,這樣局域網(wǎng)中的計(jì)算機(jī)網(wǎng)卡都會(huì)收到這個(gè)喚醒數(shù)據(jù)包,網(wǎng)卡通過解析決定是否是自己的MAC地址,決定是否執(zhí)行喚醒操作,具體代碼如下:
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 遠(yuǎn)程關(guān)機(jī)功能實(shí)現(xiàn)
計(jì)算機(jī)處于正常運(yùn)行狀態(tài),可以正常接收并執(zhí)行命令行。采用UDP協(xié)議通過廣播地址向局域網(wǎng)廣播,向整個(gè)局域網(wǎng)發(fā)送關(guān)機(jī)命令(shutdown),當(dāng)計(jì)算機(jī)收到關(guān)機(jī)命令后,本地執(zhí)行關(guān)機(jī)命令實(shí)現(xiàn)遠(yuǎn)程關(guān)機(jī)。實(shí)現(xiàn)代碼如下:
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 功能測試
以聯(lián)想啟天M428-A119臺(tái)式計(jì)算機(jī)作為目標(biāo)測試機(jī),配置如下:
(1)CPU:Intel? Core(TM)i3-8100 @ 3.60 GHz 3.60 GHz;
(2)內(nèi)存:8 G內(nèi)存;
(3)操作系統(tǒng)類型:Windows7 64位旗艦版;
(4)網(wǎng)卡:Realtak PCIe GbE Family Controller千兆網(wǎng)卡;
從機(jī)房中隨機(jī)挑選4臺(tái)計(jì)算機(jī),首先,進(jìn)入BIOS界面,確?!癢ake On LAN ”選項(xiàng)開啟。進(jìn)入BIOS界面,切換到“Power”,修改“Wake On LAN”選項(xiàng)為“Automatic”,保存退出BIOS。
其次,修改網(wǎng)卡選項(xiàng),確??梢越邮盏絾拘训臄?shù)據(jù)包。進(jìn)入Windows7系統(tǒng)桌面,鼠標(biāo)右鍵單擊“我的電腦”—“屬性”—“設(shè)備管理器”—“網(wǎng)卡適配器”—“Realtak PCIe GbE Family Controller”,鼠標(biāo)右鍵單擊此網(wǎng)卡,選擇“屬性”,彈出網(wǎng)卡屬性對話框。在“高級”選項(xiàng)卡中,修改“魔術(shù)封包”和“關(guān)機(jī)網(wǎng)絡(luò)喚醒”的值為“開啟”;在“電管理”選項(xiàng)卡中,勾選“允許此設(shè)備喚醒計(jì)算機(jī)”,點(diǎn)擊“確認(rèn)”按鈕保存修改。
最后,將燒錄代碼的ESP8266開發(fā)板中,通過WiFi接入機(jī)房的局域網(wǎng),確保WiFi的IP地址和計(jì)算機(jī)的IP地址在同一個(gè)網(wǎng)段。ESP8266通電后LED燈點(diǎn)亮,表示ESP8266聯(lián)網(wǎng)成功。按下開發(fā)板上的“開機(jī)”按鍵,可以看到4臺(tái)計(jì)算機(jī)依次加電開啟,表明設(shè)計(jì)思路正確,獲取目標(biāo)機(jī)MAC格式正確,系統(tǒng)代碼正常運(yùn)行。
5 ? 結(jié)語
本系統(tǒng)旨在不改變原有機(jī)房布局和配置的前提下,無需安裝控制端程序,通過單個(gè)ESP8266開發(fā)板實(shí)現(xiàn)局域網(wǎng)中的遠(yuǎn)程喚醒/關(guān)閉計(jì)算機(jī)功能,有效解決了機(jī)房批量開關(guān)機(jī)的難題,消除了機(jī)房的安全隱患,提升了機(jī)房管理效率。
[參考文獻(xiàn)]
[1]李佳.遠(yuǎn)程控制技術(shù)在高校機(jī)房管理中的應(yīng)用探究[J].電腦編程技巧與維護(hù),2019(10):34.
[2]儲(chǔ)懷川,王誠忠,張宇.基于GSM短信的無人機(jī)房遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)[J].有線電視技術(shù),2017(5):67.
[3]高岳.機(jī)房管理中網(wǎng)絡(luò)遠(yuǎn)程控制技術(shù)應(yīng)用研究[J].信息系統(tǒng)工程,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— ),男,江蘇江陰人,講師,碩士;研究方向:軟件技術(shù)。
通信作者:吳東超(1975— ),男,山東菏澤人,副教授,碩士;研究方向:計(jì)算機(jī)應(yīng)用。