李高尚, 沈巍
(1 重慶郵電大學(xué)通信學(xué)院 重慶 400065; 2 重慶郵電大學(xué)自動(dòng)化學(xué)院 重慶 400065)
隨著人們對(duì)無處不在的網(wǎng)絡(luò)迅速增長的需求,以及近年來高血壓和糖尿病等慢性疾病發(fā)病率的增長,無線體域網(wǎng)的應(yīng)用越來越引起人們的關(guān)注。體域網(wǎng)(Body Area Network)是人體上的生理參數(shù)收集傳感器或移植到人體內(nèi)的生物傳感器共同形成的一個(gè)無線網(wǎng)絡(luò),這些傳感器節(jié)點(diǎn)之間的數(shù)據(jù)傳輸一般在2M的超短距離。
一個(gè)總體的移動(dòng)化醫(yī)療護(hù)理模型如圖1所示,其中一個(gè)基本的BAN網(wǎng)絡(luò)由多個(gè)節(jié)點(diǎn)和一個(gè)協(xié)調(diào)器組成。每個(gè)傳感器節(jié)點(diǎn)負(fù)責(zé)采集身體參數(shù)如體溫、血氧飽和度以及血壓等,而協(xié)調(diào)器則是作為一個(gè)個(gè)人服務(wù)器收集所有節(jié)點(diǎn)采集的數(shù)據(jù)并轉(zhuǎn)發(fā)到網(wǎng)絡(luò)端。此外,協(xié)調(diào)器還對(duì)遠(yuǎn)程服務(wù)器的訪問者提供生物反饋。一般節(jié)點(diǎn)與協(xié)調(diào)器的距離在2 m范圍內(nèi)。BAN網(wǎng)絡(luò)還可以通過有線或無線的通信方式連接到本地局域網(wǎng)或廣域網(wǎng)。遠(yuǎn)端服務(wù)器還可以有效的處理數(shù)據(jù),并提供有趣的實(shí)時(shí)監(jiān)測和健康咨詢服務(wù),這對(duì)于慢性疾病的管理是非常有用的。根據(jù)世界衛(wèi)生組織2005年的統(tǒng)計(jì)結(jié)果,世界上約30%的人死于心腦血管疾??;而糖尿病正在威脅著1.8億人的健康,預(yù)計(jì)到2030年將達(dá)到3.6億人;到2015年將有超過2.3億人面臨超重;還有迅速增長的神經(jīng)退化性疾病如帕金森氏癥和阿爾茨海默氏癥也將會(huì)威脅數(shù)百萬甚至更多的人。如果采用BAN技術(shù),這些慢性疾病將會(huì)被發(fā)現(xiàn)在開始或早期階段,可以節(jié)省巨大的治療費(fèi)用。
圖1 移動(dòng)化醫(yī)療護(hù)理模型
本文中我們將具體研究協(xié)調(diào)器收發(fā)數(shù)據(jù)的過程,并采用近來流行的Android手機(jī)作為協(xié)調(diào)器,實(shí)現(xiàn)數(shù)據(jù)的接收并轉(zhuǎn)發(fā)。
為了研究方便,我們可以將整個(gè)系統(tǒng)分為3個(gè)主要模塊,分別是傳感器,客戶端和服務(wù)端。
首先,傳感器將采集到的體征數(shù)據(jù)通過藍(lán)牙的方式發(fā)送到Android手機(jī),手機(jī)將接收到的數(shù)據(jù)暫時(shí)存儲(chǔ)在Android系統(tǒng)自帶的SQLite數(shù)據(jù)庫里,并能將這些暫存的數(shù)據(jù)通過3G或WLAN網(wǎng)絡(luò)發(fā)送到遠(yuǎn)端服務(wù)器,最后將數(shù)據(jù)存儲(chǔ)在系統(tǒng)運(yùn)營商的數(shù)據(jù)庫里,后臺(tái)人員通過調(diào)用用戶的實(shí)時(shí)體征數(shù)據(jù)以及相關(guān)的電子健康檔案就可以對(duì)用戶的身體狀況進(jìn)行診斷,及時(shí)將分析結(jié)果反饋給用戶,并將本次的診斷信息存儲(chǔ)在用戶相應(yīng)的電子健康檔案中,以備下次調(diào)用。各模塊的具體描述如下:
(1)傳感器模塊
主要負(fù)責(zé)采集體征數(shù)據(jù),通過開關(guān)按鈕就可以控制傳感器的工作狀態(tài),并可以通過藍(lán)牙實(shí)時(shí)發(fā)送這些數(shù)據(jù)到Android終端。同時(shí),傳感器的數(shù)據(jù)傳輸還支持不同的數(shù)據(jù)格式。
(2)客戶端模塊
客戶端的作用相當(dāng)于一個(gè)網(wǎng)關(guān),一方面,客戶端程序可以在后臺(tái)定期的向傳感器發(fā)出請(qǐng)求接收的命令或者接收傳感器發(fā)來的數(shù)據(jù);另一方面,客戶端程序還可以在后臺(tái)將接收到的數(shù)據(jù)定期的發(fā)送到服務(wù)端。當(dāng)然,用戶也可以將接收到的數(shù)據(jù)實(shí)時(shí)的顯示在終端屏幕上,并通過手動(dòng)的方式來處理這些數(shù)據(jù)。在客戶端模塊中,應(yīng)用程序也可以分為幾個(gè)不同的部分:
1)藍(lán)牙服務(wù):負(fù)責(zé)與傳感器建立無線連接,并傳遞數(shù)據(jù);
2)數(shù)據(jù)庫適配器:主要是用來暫存從傳感器接收來的數(shù)據(jù),以便后續(xù)通過網(wǎng)絡(luò)發(fā)送;
3)網(wǎng)絡(luò)服務(wù):主要負(fù)責(zé)將接收到的數(shù)據(jù)通過通信網(wǎng)發(fā)送到服務(wù)端模塊;
4)網(wǎng)絡(luò)適配器:主要負(fù)責(zé)可用網(wǎng)絡(luò)的檢測,并向服務(wù)器發(fā)出HTTP連接請(qǐng)求;
5)用戶界面:主要為了實(shí)現(xiàn)與用戶的交互功能,可以隨時(shí)讓用戶看到這些信息并能夠通過動(dòng)態(tài)的方式將數(shù)據(jù)呈現(xiàn)在用戶面前,當(dāng)然用戶也可以通過相應(yīng)的操控來實(shí)現(xiàn)自己的意愿。
另外,在安全性方面,為了保護(hù)用戶隱私,客戶在接入系統(tǒng)的時(shí)候需要通過服務(wù)器的認(rèn)證,服務(wù)器通過驗(yàn)證用戶主機(jī)的ID號(hào)以及用戶名和密碼后,才允許客戶主機(jī)接入系統(tǒng)。
(3)服務(wù)端模塊
服務(wù)器端主要負(fù)責(zé)用戶數(shù)據(jù)的管理以及存儲(chǔ)等,用戶可以將自己的相關(guān)信息發(fā)送到服務(wù)器后臺(tái)數(shù)據(jù)庫存儲(chǔ),也可以從數(shù)據(jù)庫下載相關(guān)信息到客戶端。
客戶端作為數(shù)據(jù)收發(fā)的樞紐,其工作流程如圖2所示。
圖2 客戶端工作流程
由圖2可見,客戶端的任務(wù)主要包括與傳感器建立連接和接收傳感器發(fā)送的數(shù)據(jù)并轉(zhuǎn)發(fā)數(shù)據(jù)到服務(wù)器端,其核心就是數(shù)據(jù)的接收及數(shù)據(jù)的發(fā)送。這里我們將采用生理溫度傳感器,具體實(shí)現(xiàn)步驟如下:
(1)與傳感器建立連接
與傳感器建立連接其實(shí)就是建立藍(lán)牙連接,主要分為以下幾步:
①首先是獲取本地藍(lán)牙適配器:
BluetoothAdapter _bluetooth =BluetoothAdapter.getDefaultAdapter();
②其次是打開本地藍(lán)牙:
if(!mAdapter.isEnabled())
{mAdapter.enable();};
③再者就是搜索設(shè)備:mAdapter.startDiscovery();這里還需要定義并注冊(cè)一個(gè)BroadcastReceiver;
④最后是通過BluetoothDevice的createRfcommSo cketToServiceRecord方法傳入唯一的UUID創(chuàng)建了一個(gè)BluetoothSocket對(duì)象,并通過connect方法建立連接。
另外,在我們使用藍(lán)牙API,對(duì)藍(lán)牙進(jìn)行操作之前,須先在AndroidManifest.xml中聲明其權(quán)限,代碼如下:
(2)數(shù)據(jù)的接收
與傳感器建立連接后,我們就可以接收傳感器發(fā)送過來的溫度數(shù)據(jù),并暫時(shí)將數(shù)據(jù)存儲(chǔ)在Android終端的SQlite里面。這里的核心是數(shù)據(jù)流的接收及處理,具體代碼如下:
我們通過Android手機(jī)測試,接收到的傳感器端發(fā)送的體溫?cái)?shù)據(jù)顯示如圖3所示。
圖3 溫度接收顯示
(3)數(shù)據(jù)的發(fā)送
在向服務(wù)器發(fā)送數(shù)據(jù)時(shí),我們采用的是socket通信。Socket通常也稱作“套接字”,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。這里我們先在PC端建立一個(gè)ServerSocket監(jiān)聽客戶請(qǐng)求,另外在Android手機(jī)端我們監(jiān)聽了一個(gè)按鈕事件,在按鈕事件中通過“socket=new Socket(“219.151.173.161”,54321);”來請(qǐng)求連接服務(wù)器,并通過PrintWriter和BufferedReader來接收和發(fā)送消息,在接收到消息后,更新顯示到TextView中??蛻舳酥饕a如下:
通過實(shí)驗(yàn),PC端可以成功接收到客戶端發(fā)來的體溫?cái)?shù)據(jù),如圖4所示,PC作為服務(wù)端首先接受客戶端的登錄請(qǐng)求,成功后會(huì)出現(xiàn)“accept”的指令,然后開始接收客戶端發(fā)來的數(shù)據(jù)“36.8”,成功接收后即關(guān)閉(close)流。
圖4 服務(wù)器端接收到手機(jī)端發(fā)來的數(shù)據(jù)
當(dāng)前,BAN仍處于初級(jí)發(fā)展階段,多數(shù)研究都集中在建立系統(tǒng)架構(gòu)和服務(wù)平臺(tái)上,仍面臨許多挑戰(zhàn)。隨著Google Android終端的廣泛使用,其應(yīng)用程序也越來越多,而本文將BAN業(yè)務(wù)推廣到Android平臺(tái)上,對(duì)于體域網(wǎng)的發(fā)展具有重要的意義。本文的系統(tǒng)模型及客戶端設(shè)計(jì)流程對(duì)于健康醫(yī)療具有重要的參考價(jià)值,可用于遠(yuǎn)程醫(yī)療、個(gè)人家庭護(hù)理、戶外健康咨詢等等。
[1]Sacha Gilgen Basel. Mobile Healthcare on Android Devices[D]. Switzerland :University of Zurich Department of Informatics (IFI)Binzmühlestrasse 14,CH-8050 Zürich.
[2]Dimitris Tychalas , Athanasios Kakarountas .Planning and Development of an Electronic Health Record Client based on the Android Platform[A].2010 14th Panhellenic Conference on Informatics.
[3]鄭宇.一種應(yīng)用于遠(yuǎn)程醫(yī)療的綜合電信業(yè)務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué),2007.
[4]宮繼兵,王睿,崔莉.體域網(wǎng)BSN的研究進(jìn)展及面臨的挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展,2010,47(5):737-753.
[5]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2010.
[6]張仕成.基于Google Android平臺(tái)的應(yīng)用程序開發(fā)與研究[J].電腦知識(shí)與技術(shù),2009(10):7959-7962.
[7]武秋紅.基于無線傳感器網(wǎng)絡(luò)的遠(yuǎn)程醫(yī)療監(jiān)護(hù)系統(tǒng)[D].成都:電子科技大學(xué),2009.
[8]王昆.移動(dòng)增值業(yè)務(wù)研究與開發(fā)[D]. 重慶:重慶郵電大學(xué),2007.
[9]李亞軍.遠(yuǎn)程醫(yī)療在國內(nèi)的應(yīng)用和發(fā)展[J].醫(yī)學(xué)信息,2006(1):34-40.
[10]Bruce Eckel.Thinking in Java,Third Edition[M].北京:機(jī)械工業(yè)出版社,2005.
[11]劉國華,趙子春,王延濤,等.無線體域網(wǎng)中體征參數(shù)的采集與處理[J].南開大學(xué)學(xué)報(bào):自然科學(xué)版,2010,43(1).
[12]靳昊宇.基于藍(lán)牙的無線體域網(wǎng)研究[D].天津:南開大學(xué),2009.