曾妍
(四川信息職業(yè)技術(shù)學(xué)院 四川 廣元 628017)
基于物聯(lián)網(wǎng)的照明控制系統(tǒng)是以ZigBee、單片機(jī)、傳感器、C#和PHP程序設(shè)計(jì)為主要技術(shù)手段,包括照明控制單元、ZigBee無線傳輸層(含網(wǎng)關(guān))、PC展示及控制層3個(gè)層次的現(xiàn)場控制單元、CC2430無線傳輸網(wǎng)絡(luò)、ARM網(wǎng)關(guān)硬件單元、ARM網(wǎng)關(guān)客戶端軟件、基于C#的服務(wù)端軟件、基于PHP[1]的展示軟件等6個(gè)子系統(tǒng),用于實(shí)現(xiàn)一套模擬城市照明控制系統(tǒng)。
基于PHP的展示軟件所需實(shí)現(xiàn)的功能是用網(wǎng)頁的方式對(duì)基于物聯(lián)網(wǎng)的照明控制系統(tǒng)進(jìn)行展示,包括對(duì)網(wǎng)關(guān)主持、終端節(jié)點(diǎn)注冊,遠(yuǎn)程開關(guān)燈控制,以及網(wǎng)關(guān)和終端節(jié)點(diǎn)的報(bào)表、實(shí)時(shí)數(shù)據(jù)展示,讓用戶更加清楚的了解該系統(tǒng)。
PHP即Hypertext Preprocessor(超文本預(yù)處理器)的縮寫,是基于服務(wù)器端運(yùn)行的腳本程序語言,用于實(shí)現(xiàn)數(shù)據(jù)庫和網(wǎng)頁之間的數(shù)據(jù)交互。圖1展示一個(gè)完整的PHP系統(tǒng)的構(gòu)成,以及客戶通過瀏覽器訪問PHP網(wǎng)站系統(tǒng)的過程。
控制系統(tǒng)的環(huán)境溫度、濕度、亮度、電壓、電流dev_endpoint表用于存儲(chǔ)終端節(jié)點(diǎn)的注冊信息,其中有節(jié)點(diǎn)名稱、物理地址、網(wǎng)絡(luò)地址、所屬網(wǎng)關(guān)、部署時(shí)間、部署位置等。dev_gateway表用于存儲(chǔ)網(wǎng)關(guān)設(shè)備的注冊信息,其中有網(wǎng)關(guān)名稱、網(wǎng)關(guān)地址、接入端口、部署時(shí)間、部署位置等。kongzhi表用于存儲(chǔ)遠(yuǎn)程控制時(shí)下發(fā)的開燈,關(guān)燈指令。當(dāng)服務(wù)器采集到表中的信息后向網(wǎng)關(guān)逐級(jí)下發(fā)指令,最后達(dá)到開關(guān)燈效果。zhuce表中的信息記錄的是用戶注冊新賬號(hào)時(shí)所填寫的個(gè)人基本信息,如:賬戶、密碼、email、性別,從而用戶可以通過注冊過的賬戶和密碼在登陸界面進(jìn)行登陸,再進(jìn)入操作窗體界面。
本項(xiàng)目中,數(shù)據(jù)庫[2]共設(shè)計(jì)有 5張表,分別是data、dev_endpoint、dev_gateway、kongzhi、zhuce。 data 表用于存儲(chǔ) 照 明
本系統(tǒng)包括登陸模塊、設(shè)備注冊模塊、遠(yuǎn)程控制模塊、數(shù)據(jù)報(bào)表模塊、實(shí)時(shí)數(shù)據(jù)模塊、基本信息模塊[3]。其中,登陸模塊[4]用于實(shí)現(xiàn)用戶管理,注冊管理功能;設(shè)備注冊模塊用于注冊系統(tǒng)的網(wǎng)關(guān)和終端節(jié)點(diǎn);遠(yuǎn)程控制模塊用于對(duì)路燈的遠(yuǎn)程開關(guān)燈進(jìn)行控制;數(shù)據(jù)報(bào)表模塊用于表示系統(tǒng)的數(shù)據(jù);實(shí)時(shí)數(shù)據(jù)模塊用于展示節(jié)點(diǎn)上傳的實(shí)時(shí)數(shù)據(jù);基本信息模塊簡單介紹了整個(gè)系統(tǒng)。
在設(shè)計(jì)模塊軟件代碼前首先要連接服務(wù)器,連接服務(wù)器的主要代碼為:
$db_host='127.0.0.1'; //服務(wù)器地址
$db_user='root'; //數(shù)據(jù)庫用戶名
$db_pw=''; //數(shù)據(jù)庫密碼
$db_name='denglu'; //數(shù)據(jù)庫名稱
//$dbcharset='GBK'; //MySQL編碼格式
$conn =mysql_connect ($db_host, $db_user,$db_pw) or die("系統(tǒng)維護(hù)中");
mysql_query("set character set GBK");
mysql_query("set names GBK");
@mysql_select_db($db_name,$conn) or die("數(shù)據(jù)庫訪問錯(cuò)誤".mysql_error());
?>
3.2.1 用戶注冊
注冊新用戶,需向數(shù)據(jù)庫寫入賬戶、密碼、確認(rèn)密碼、email、性別等信息。在運(yùn)行時(shí),首先連接服務(wù)器,然后向數(shù)據(jù)庫zhuce表中寫入注冊的新信息,在用戶注冊后將跳轉(zhuǎn)到登陸界面。新用戶注冊的代碼設(shè)計(jì)分靜態(tài)代碼的設(shè)計(jì)和動(dòng)態(tài)代碼的設(shè)計(jì)。新用戶注冊的代碼設(shè)計(jì)分靜態(tài)代碼的設(shè)計(jì)和動(dòng)態(tài)代碼的設(shè)計(jì)。主要靜態(tài)代碼如下:
function Check()//驗(yàn)證表單數(shù)據(jù)有效性的函數(shù)
{
if(document.send.username.value=="") {
window.alert('請(qǐng)輸入用戶名!');
return false;
}
if(document.send.username.value.length<4) {
window.alert('用戶名長度必須大于 4!');
return false;
}
if(document.send.password.value=="") {
alert('請(qǐng)輸入密碼!');
return false;
}
if(document.send.password.value.length<6) {
alert('密碼長度必須大于 6!');
return false;
}
if(document.send.email.value==""){
alert('請(qǐng)輸入 Email!');
return false;
}
if(document.send.email.value.indexOf("@")==-1){
alert('請(qǐng)輸入有效的 email地址!');
return false;
}
return true;
}
主要?jiǎng)討B(tài)代碼如下:
include"conn.php";
//print_r($_POST);
?>
$username=@$_POST[username];
$password=@$_POST[password];
$cpassword=@$_POST[cpassword];
$email=@$_POST[email];
$sex=@$_POST[sex];
$sql="insert into zhuce set username='$username',password='$password',
cpassword='$cpassword',email='$email',sex='$sex'";mysql_query($sql);
echo"<---->";
//echo$sql
//echo mysql_error();
?>
3.2.2 用戶登陸
登陸窗體的功能是設(shè)置限權(quán)管理,登陸成功后,對(duì)各個(gè)模塊進(jìn)行操作。
新用戶在注冊以后,在登陸界面輸入已經(jīng)注冊過的賬戶和密碼,如果輸入的賬戶和密碼有誤,則系統(tǒng)會(huì)提醒“賬戶或密碼有誤,請(qǐng)重新登陸”,如果輸入成功則跳轉(zhuǎn)到窗體操作界面。登陸時(shí)的代碼設(shè)計(jì)首先連接服務(wù)器,然后查詢數(shù)據(jù)庫中的zhuce表是否與登陸的賬戶和密碼一致,如果登陸的賬戶和密碼已經(jīng)注冊并輸入正確,則跳轉(zhuǎn)到系統(tǒng)操作窗體,否則跳轉(zhuǎn)到重新登陸的界面。
3.3.1 網(wǎng)關(guān)設(shè)備注冊
網(wǎng)關(guān)設(shè)備注冊[5]時(shí)需要添加網(wǎng)關(guān)的網(wǎng)關(guān)名稱、網(wǎng)關(guān)地址、接入端口、部署時(shí)間、部署位置。將添加的新網(wǎng)關(guān)設(shè)備數(shù)據(jù)下發(fā)到MySQL數(shù)據(jù)庫中,進(jìn)而對(duì)照明控制系統(tǒng)逐級(jí)添加。
3.3.2 終端節(jié)點(diǎn)注冊
終端節(jié)點(diǎn)注冊時(shí)需要添加節(jié)點(diǎn)的節(jié)點(diǎn)名稱、物理地址、網(wǎng)絡(luò)地址、所屬網(wǎng)關(guān)、部署時(shí)間、部署位置。將添加的新節(jié)點(diǎn)數(shù)據(jù)下發(fā)到MySQL數(shù)據(jù)庫中,進(jìn)而對(duì)照明控制系統(tǒng)逐級(jí)添加。
遠(yuǎn)程控制模塊的設(shè)計(jì)是寫入物理地址和網(wǎng)絡(luò)地址后,對(duì)其下發(fā)開燈和關(guān)燈的指令。
3.5.1 網(wǎng)關(guān)設(shè)備報(bào)表
網(wǎng)關(guān)設(shè)備報(bào)表展示的是照明控制系統(tǒng)的網(wǎng)關(guān)設(shè)備,把MySQL數(shù)據(jù)庫中的網(wǎng)關(guān)設(shè)備進(jìn)行展示,本設(shè)計(jì)可以展示最近的5次網(wǎng)關(guān)設(shè)備。
3.5.2 終端節(jié)點(diǎn)報(bào)表
終端節(jié)點(diǎn)報(bào)表展示的是照明控制系統(tǒng)的終端節(jié)點(diǎn),把MySQL數(shù)據(jù)庫中的終端節(jié)點(diǎn)進(jìn)行展示,此設(shè)計(jì)可以展示最近的5次終端節(jié)點(diǎn)。
實(shí)時(shí)數(shù)據(jù)顯示的是當(dāng)前照明控制系統(tǒng)所處的狀態(tài),分別展示了燈的狀態(tài),系統(tǒng)所處環(huán)境的溫度、濕度、亮度、電壓、電流。
用戶在進(jìn)入系統(tǒng)網(wǎng)頁操作窗體前,首先要進(jìn)行用戶的注冊和登陸,當(dāng)用戶登陸成功后進(jìn)入界面如圖2所示。
圖2 網(wǎng)頁設(shè)備注冊操作界面Fig.2 Webpage equipment registration interface
在此界面可以進(jìn)行網(wǎng)關(guān)設(shè)備注冊,填寫完網(wǎng)關(guān)設(shè)備注冊的基本信息后點(diǎn)擊“添加網(wǎng)關(guān)”按鈕,數(shù)據(jù)庫就可以獲得添加的網(wǎng)關(guān)信息,再進(jìn)行發(fā)送到服務(wù)器。
在網(wǎng)頁中添加網(wǎng)關(guān)之后將把新增網(wǎng)關(guān)信息存儲(chǔ)到數(shù)據(jù)庫dev_gateway表中,服務(wù)器將直接讀取數(shù)據(jù)庫。圖3展示了添加新的網(wǎng)關(guān)后的數(shù)據(jù)庫dev_gateway表界面。
圖3 數(shù)據(jù)庫的dev_gateway表Fig.3 Database dev_gateway table
點(diǎn)擊“終端節(jié)點(diǎn)注冊”后將彈出相應(yīng)界面。在此界面可以進(jìn)行終端節(jié)點(diǎn)注冊,填寫完終端節(jié)點(diǎn)注冊的基本信息后點(diǎn)擊“添加節(jié)點(diǎn)”按鈕,數(shù)據(jù)庫就可以獲得添加的終端節(jié)點(diǎn)的信息,在發(fā)送到服務(wù)器。在網(wǎng)頁中添加終端節(jié)點(diǎn)之后將把新增終端節(jié)點(diǎn)信息存儲(chǔ)到數(shù)據(jù)庫dev_endpoint表中,服務(wù)器將直接讀取數(shù)據(jù)庫。圖4展示了添加新的網(wǎng)關(guān)后的數(shù)據(jù)庫dev_endpoint表界面。
圖4 數(shù)據(jù)庫的dev_endpoint表Fig.4 Database dev_endpoint table
在網(wǎng)頁中點(diǎn)擊“遠(yuǎn)程控制”按鈕,就打開了相應(yīng)的界面。此界面可以獲取照明系統(tǒng)的物理地址和網(wǎng)絡(luò)地址,并對(duì)其系統(tǒng)進(jìn)行開燈關(guān)燈操作。在網(wǎng)頁中遠(yuǎn)程控制輸入物理地址和網(wǎng)絡(luò)地址,并點(diǎn)擊“開燈”或“關(guān)燈”按鈕后,將把操作了的信息記錄到數(shù)據(jù)庫kongzhi表中,服務(wù)器讀取到表中的信息,將逐級(jí)下發(fā)指令,最后到終端節(jié)點(diǎn)。圖5展示了遠(yuǎn)程控制界面的記錄。
圖5 數(shù)據(jù)庫的kongzhi表Fig.5 Database kongzhi table
點(diǎn)擊“數(shù)據(jù)報(bào)表”按鈕,也就默認(rèn)打開了網(wǎng)關(guān)設(shè)備報(bào)表的界面,將彈出相應(yīng)的界面。
在以上界面中點(diǎn)擊“終端節(jié)點(diǎn)報(bào)表”將彈出對(duì)應(yīng)的界面。
在網(wǎng)頁中點(diǎn)擊“實(shí)時(shí)數(shù)據(jù)”的按鈕后,會(huì)彈出照明控制系統(tǒng)的燈的開關(guān)狀態(tài),以及環(huán)境的溫度、濕度、亮度、電壓、電流的界面。在MySQL數(shù)據(jù)庫中data表中的信息是采集服務(wù)器的信息,在網(wǎng)頁中實(shí)時(shí)數(shù)據(jù)的界面也展示了data表中的信息,在數(shù)據(jù)庫中的data表是提供網(wǎng)頁的讀取。
在進(jìn)行新用戶注冊后,把個(gè)人信息將存儲(chǔ)到MySQL數(shù)據(jù)庫zhuce表中,然后校驗(yàn)登陸的賬戶和密碼是否和zhuce表中的數(shù)據(jù)一致,若一致,則登陸成功,否則需重新登陸。
圖6清晰地展示了數(shù)據(jù)庫有注冊新用戶的界面。
圖6 數(shù)據(jù)庫的zhuce表Fig.6 Database zhuce table
設(shè)計(jì)中,主要是以PHP展示軟件為核心對(duì)基于物聯(lián)網(wǎng)的照明控制系統(tǒng)進(jìn)行了簡單的設(shè)計(jì)與闡述。確定設(shè)計(jì)方案前必須做好需求分析。設(shè)計(jì)時(shí),使用動(dòng)態(tài)代碼和靜態(tài)代碼要合理,如果使用不當(dāng)就不能實(shí)現(xiàn)設(shè)計(jì)所要的目的。
[1]潘凱華,鄒天思.PHP開發(fā)實(shí)戰(zhàn)寶典[M].北京:清華大學(xué)出版社,2010.
[2]薩師煊,王珊.?dāng)?shù)據(jù)庫系統(tǒng)設(shè)計(jì)[M].3版.北京:高等教育出版社,2004.
[3]龐春輝.基于Web企業(yè)管理系統(tǒng)的設(shè)計(jì)[M].大連:大連理工大學(xué)出版社,2008.
[4]陳湘揚(yáng),陳國益.PHP5+MySQL網(wǎng)頁系統(tǒng)開發(fā)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2007.
[5]曾順.精通CSS+DIV網(wǎng)頁樣式與布局[M].北京:人民郵電出版社,2009.
[6]W.Jason Gilmore.PHP與MySQL5程序設(shè)計(jì)[M].北京:人民郵電出版社,2007.