張玉杰,劉玉梅
(陜西科技大學電氣與信息工程學院,陜西 西安 710021)
LED以其獨有的壽命長、節能環保、安全可靠等優點,在智能路燈、景觀照明、商業展示等廣泛應用,但是在傳統的照明應用中,LED燈光通常只是以“單向傳播”的方式向觀眾展示提前設定好的內容和花樣,缺乏參與感和新意[1-3]。基于此本文提出LED燈光互動的概念,使得LED燈光不但能作為顯示屏顯示,還能讓用戶隨時參與互動,燈光隨著用戶的操控實現不同的花樣展示,使用戶享受掌控燈光的樂趣。
系統以ThinkPHP框架為基礎,借助微信這款社交軟件,開發實現微信客戶端對LED的遠程控制和實時傳輸數據。ThinkPHP框架的使用讓MVC設計模式得意輕松實現,既能縮短設計開發周期又能降低系統后期維護。而微信和物聯網技術的融合使手機不再單純的具備普通的通話、短信和上網等功能,而是一個基于物聯網的以微信為終端的智能系統,能實現智能控制、微信支付等功能。
ThinkPHP框架是開源PHP框架,作為系統整體開發框架,自身包含了底層架構、兼容處理、基類庫、數據庫訪問層、模板引擎、表單處理等常用的組件,并且能夠解決系統應用開發中的大多數需要,對于跨版本、跨平臺和跨數據庫移植都比較方便[4]??蚣苤忻總€組件都是經過開發人員精心設計和完善的,應用開發過程中僅僅需要關注應用的業務邏輯即可。
MVC(模型Model、視圖View、控制Controller)是一種把系統的顯示界面、業務邏輯和數據三者相互分離的設計模式,這種設計模式的中心目的就是讓Web的分工明確,從而提高開發效率,增強代碼的重用性。在 ThinkPHP 中應用 MVC 模式,使得開發更加簡單快速。
模型,系統所有的核心數據都在這里,還要完成系統功能所需的計算和邏輯關系控制,模型返回的數據具有獨立性,輸出的數據可供不同的視圖使用。模型的主要任務有:代表應用程序的狀態、響應狀態查詢、處理業務流程、通知視圖狀態更新。
控制,也可以稱為控制器,它主要被用來接收視圖傳進來的數據,首先把數據給到視圖對應的模型,然后把經模型處理返回的數據返回給視圖,最終完成系統和用戶的交互。可以簡單的說控制器自身并不會產生任何東西,只是負責數據的傳遞。
視圖,顧名思義就是系統用來和用戶交流的顯示界面,它的作用就是接受控制器發來的數據處理結果并展示給用戶,還負責將用戶輸入傳給控制器。三者之間各部分的交互過程分別如圖1所示。

圖1 MVC各部分交互過程Fig.1 MVC part of the interaction process
系統的主要功能是用戶通過手機控制LED燈幕實現花樣顯示。從系統使用者角度分析,系統使用的對象為參與互動的用戶和系統的管理人員,所以從兩個方面去分析功能需求:
微信客戶端:本系統中以微信H5網頁的形式作為系統客戶端,為互動用戶提供控制的操作界面,通過頁面操作實現用戶與LED燈光系統的花樣互動。具體功能包括:
1)掃碼功能:互動現場提供二維碼,用戶掃描二維碼后即可進入系統界面,參與互動;
2)花樣列表:系統首頁顯示各類花樣產品;
3)微信支付:選擇收費花樣或者自定義花樣后可通過微信支付付款,操作方便;
4)個人信息:顯示用戶頭像、昵稱等;
5)歷史記錄:可查看歷史購買記錄;顯示已選擇花樣的狀態(已完成/已取消/待付款/已付款,正在排隊);對于已付款但尚未處理的花樣可選擇取消。
管理員控制臺:系統提供可視化的管理控制臺,管理員利用該平臺維護LED互動系統的日常工作,對系統中區域、花樣、用戶等各項數據進行統一管理,包括:
1)區域管理:管理活動區域的信息,一個活動場地只能對應一個區域二維碼;
2)花樣管理:管理各活動區域花樣產品的增加和刪除;設置產品參數,包括演示持續時長、費用等;
3)訂單管理:查看和管理所有用戶的訂單信息;
4)用戶管理:查看、管理用戶信息;
5)統計功能:查看當前參與人數及所需時長、歷史參與總人數/人次的統計數據;
根據系統的功能需求將系統主要分為四個部分,分別是:云服務器、用戶端、管理員控制臺和LED控制器,并設計系統框圖如圖2所示。云服務器作為整個系統的數據交互中心,需要提供多用戶與多控制器管理、可靠的遠程通信、穩定準確的數據及狀態查詢以及文件的傳輸與存儲等服務。用戶端使用微信作為系統客戶端,為用戶提供參與互動的入口和控制LED燈光的操作界面。管理員控制臺為方便管理員在可視化界面更方便集中的管理各項數據,維護系統日常工作。LED控制器主要負責與云服務器通信,獲取控制指令,并控制LED燈具實現花樣的展示。

圖2 系統框圖Fig.2 System block diagram
THinkPHP 3.2架構采用模塊化的設計方式,每個模塊可以方便的卸載和部署,并且支持公共模塊[5,6]。根據系統功能需求分析設計LED燈光互動系統共有四個模塊組成,分別是:公共模塊(Common)、用戶操作模塊(Home)、管理員控制臺模塊(Admin)、服務器與控制器通信接口模塊(API)。
1)公共模塊。Common模塊是一個特殊的模塊,是應用的公共模塊,訪問所有的模塊之前都會首先加載公共模塊下面的配置文件(Conf/config.php)和公共函數文件(Common/function.php)。在本系統中Common模塊主要負責的是:(a)系統中各模塊都會用到的功能,避免各模塊都重復定義,造成浪費;(b)系統配置,比如:域名配置,系統數據庫配置。ThinkPHP內置了抽象數據庫訪問層,把不同的數據庫操作封裝起來,只需要使用公共的Db類進行操作,而無需針對不同的數據庫寫不同的代碼和底層實現,Db類會自動調用相應的數據庫驅動來處理,所以在Common的配置文件中配置系統使用的數據庫,如圖3所示。

圖3 配置數據庫Fig.3 Configuration database
2)用戶操作模塊。系統利用微信作為用戶進入控制LED燈幕的入口,通過“掃一掃”進入LED控制界面參與互動,首先得使第三方服務器對接微信公眾平臺,才能利用微信公眾平臺提供的開放接口實現微信支付、獲取用戶信息等功能[7]。對接微信公眾平臺:①申請云服務器;②注冊微信公眾賬號,完成信息登記,成為微信公眾平臺開發者;③微信公眾平臺接口測試賬號申請;④在微信公眾平臺配置URL,接入第三方服務器、進行微信認證后開通微信支付功能。
用戶操作模塊包含了兩個子模塊:花樣選擇和個人主頁。用戶通過“掃一掃”進入操作模塊后首先進入花樣選擇界面,花樣選擇界面顯示各類花樣產品,包括“免費花樣”、“收費花樣”和“自定義花樣”。“自定義花樣”是用戶可根據個人喜好上傳手機中的圖片或者編輯文字參與互動。個人主頁包括:個人信息和互動訂單管理。
用戶操作模塊中需要支付的時候就會用到微信公眾平臺提供的開放接口,當有需要調起支付的時候調用下面的支付函數。需要注意的是再調起微信支付之前得先將微信支付sdk導入到框架的/ThinkPHP/Library/Vendor/Weixinpay目錄下,并且進行參數配置。
public function unifyorder(MYMboby, MYMtotal_fee, MYMout_trade_no, MYMopenid)
{
vendor(′WeixinPay.Weixinpay′);// 導入微信支付sdk
MYMconfig = C(′WEIXINPAY_CONFIG′);
MYMWeixinpay = new Weixinpay(MYMconfig);
MYMWeixinpay->body = MYMboby;// 商品描述
MYMWeixinpay->total_fee = MYMtotal_fee;// 訂單金額
MYMWeixinpay->out_trade_no = MYMout_trade_no;// 訂單號
MYMWeixinpay->openid = MYMopenid;// 獲取到的openid
MYMjsApiParameters = MYMWeixinpay->getParameters();
return MYMjsApiParameters;
}
3)管理員控制臺模塊。管理控制臺主要是給系統中管理員提供的可視化管理模塊,在該系統中管理員控制臺對維護日?;庸ぷ鞯姆€定運行非常重要。
管理員控制模塊包含五個子模塊,分別有:區域管理、產品管理、用戶管理、訂單管理、數據統計。一個互動場所即是一個區域,在實際應用中必然會有多個互動區域。每個互動區域對應一個唯一標識的二維碼,方便用戶掃描二維碼后進入當前區域的互動操作界面,同時每個區域的花樣也不盡相同,所以區域管理主要的功能有:添加新的互動區域并生成唯一標識的二維碼、查看/修改/刪除所有已添加的區域。產品管理主要包含:添加新的花樣產品、查看/修改/刪除所有已添加的產品。單獨設置產品管理模塊而不是和區域信息放在一起管理可以讓區域和產品分塊查詢、互不影響,提高檢索速率,使管理更加高效和直觀。
用戶管理可以對系統所有的用戶進行統一管理,例如查看、刪除。因為用戶互動的時候可以自行上傳手機中的圖片,為了防止有用戶上傳一些不良圖片,在用戶管理這里設置了用戶凍結/解凍的功能。
訂單管理模塊和數據統計模塊都屬于信息查看模塊,方便管理員了解燈光互動的日常流水工作。訂單管理用來查看和管理所有互動訂單。數據統計可查看當前參與人數及所需時長、歷史參與總人數/人次的統計數據。
4)服務器與控制器通信接口模塊。用戶在微信端完成互動下單后,訂單信息便保存在云服務器中的數據庫。系統為云服務器與控制器的通信提供接口,控制器通過訪問API接口獲取存在數據庫中的控制指令,在指令完成后向服務器返回完成指令?;诖诵枨螅O計獲取訂單信息接口、訂單完成確認接口。同時設置心跳機制接口,控制器端每隔2秒訪問一次服務器,服務器端更新控制器的訪問時間updattime,用戶端只需查看數據庫中的updattime,即可知道控制器端是否掉線,若出現異常情況,及時提醒用戶不要繼續參與互動,提升用戶體驗性。
本文就該LED燈光互動系統從系統框架、系統設計到系統的具體實現進行了詳細描述。我們提出燈光互動的系統以ThinkPHP框架為基礎,采用B/S架構,并將云服務技術接入LED控制領域,實現用戶通過手機就可參與LED燈光互動活動,增強用戶參與感,使LED燈光展示性更靈活。