孫文學(xué)+鄭自強(qiáng)+段言成+李卓
摘要:在科技日新月異的今天,隨著生活水平的提高,人們對于自身的身體健康問題,特別是日常生活方式的關(guān)注更是日益增加。而日常生活中產(chǎn)生的各種身體健康數(shù)據(jù),能夠顯示出人們當(dāng)前的身體健康狀況,若長期收集起來,就可以更好的幫助人們監(jiān)測自身身體健康水平變化。該系統(tǒng)是一款基于藍(lán)牙4.0技術(shù)和Android系統(tǒng)的移動健康管理平臺,能夠做到收集用戶運(yùn)動與睡眠等數(shù)據(jù)并存儲至云端,同時以美觀的可視化界面友好地展示給用戶,實(shí)現(xiàn)對用戶身體健康的監(jiān)測,幫助用戶養(yǎng)成良好的生活方式。
關(guān)鍵詞:藍(lán)牙4.0;Android;REST;移動健康
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)34-0024-03
1 背景
隨著社會的發(fā)展,大家的生活也變得越來越便利,與此同時,我們卻慢慢的忽視了自身的身體健康,導(dǎo)致身體不斷地向我們發(fā)出“警告”。但是我們卻很少能及時意識到這些“警告”,當(dāng)我們的身體再也承受不住的時候,往往就為時已晚了。因為現(xiàn)在移動電子越來越便捷,人們也越來越依賴一些移動式的設(shè)備,移動手環(huán)就是其中的一類,它用電少,便于攜帶,主要使用藍(lán)牙技術(shù)作為通信協(xié)議,不需要連接互聯(lián)網(wǎng)就可以使用,所以我們希望開發(fā)一款可以通過藍(lán)牙通信協(xié)議與手環(huán)進(jìn)行交互的app。通過藍(lán)牙手環(huán)對我們身體狀況進(jìn)行監(jiān)控并將相關(guān)的數(shù)據(jù)傳給app,讓我們僅僅通過使用手機(jī)app就能夠時刻對自己的健康狀況進(jìn)行了解。
我們的先解決了手環(huán)與app之間的通信問題,然后再進(jìn)行服務(wù)器的搭建,并進(jìn)行存儲數(shù)據(jù)測試,最后處理app與服務(wù)器之間數(shù)據(jù)傳輸問題。
系統(tǒng)全部搭建完成后,可以成功的通過手環(huán)隨時查看自己已經(jīng)走過的步數(shù)和自己在睡眠時的睡眠質(zhì)量,了解自己是有達(dá)到每天自己要達(dá)到的運(yùn)動量。
下文將具體介紹本項目的系統(tǒng)架構(gòu)、開發(fā)流程、測試結(jié)果以及硬件的詳細(xì)參數(shù)。
2 設(shè)計思路
2.1 主體設(shè)計
該管理平臺主要分為兩個部分:服務(wù)端和客戶端。其中服務(wù)端主要使用Tomcat 8.0、MongoDB等技術(shù)存儲用戶的基本信息和步行與睡眠記錄。客戶端則是一個基于Android系統(tǒng)和藍(lán)牙4.0技術(shù)的手機(jī)應(yīng)用程序。
2.2 服務(wù)端設(shè)計
服務(wù)端參考了REST設(shè)計原則,采用RESTful架構(gòu)構(gòu)建API,即是RESTful API。由于用戶的身體運(yùn)動數(shù)據(jù)主要是根據(jù)時間段、步數(shù)、睡眠時間等結(jié)合而成的十分復(fù)雜的數(shù)據(jù)類型,所以我們選擇采用MongoDB這個模式自由的數(shù)據(jù)庫。
2.3 客戶端設(shè)計
客戶端通過藍(lán)牙4.0讓手機(jī)和智能手環(huán)連接起來,并且兩者之間能夠進(jìn)行數(shù)據(jù)交互,從而手機(jī)能夠獲取到智能手環(huán)收集到的身體數(shù)據(jù),智能手環(huán)也能及時收到手機(jī)的提示信息,實(shí)現(xiàn)一個以手機(jī)為主要節(jié)點(diǎn)的體域網(wǎng)??蛻舳撕头?wù)端的連接主要是通過互聯(lián)網(wǎng)連接,即是客戶端可以通過WiFi或4g網(wǎng)絡(luò)來向服務(wù)端發(fā)送和接收數(shù)據(jù)。
3 服務(wù)器實(shí)現(xiàn)
在本平臺中,服務(wù)端主要用于存儲用戶的基本信息,并且通過網(wǎng)絡(luò)與客戶端進(jìn)行數(shù)據(jù)傳輸,從而使得客戶端能夠?qū)崿F(xiàn)獲取用戶的基本信息,上傳用戶的運(yùn)動數(shù)據(jù),更新用戶的身體信息與健康目標(biāo)等功能。
3.1 RESTful架構(gòu)
REST這一詞是Roy Thomas Fielding在他2000年的博士論文中提出的,如果一個架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。REST是Representational State Transfer的縮寫,翻譯過來是“表現(xiàn)層狀態(tài)轉(zhuǎn)化”,意思是網(wǎng)絡(luò)中的資源在網(wǎng)絡(luò)中以某種方式進(jìn)行狀態(tài)轉(zhuǎn)換。其中資源指的是網(wǎng)絡(luò)中的一個實(shí)體或是信息,如一張圖片,一段文字等。我們可以用一個URI指向它,并且每個資源有自己單獨(dú)的URI。如果們要使用某個資源,我只需要調(diào)用其URI即可。表現(xiàn)則是實(shí)體資源的表現(xiàn)方式,例如一段文字我們能夠用txt格式表現(xiàn)出來,也可以使用xml或則html等格式表現(xiàn)。而網(wǎng)絡(luò)中我們可以通過改變HTTP請求頭中的相關(guān)字段來改變資源的表現(xiàn)形式以及資源本身的狀態(tài),即是狀態(tài)轉(zhuǎn)化。
總結(jié)來說RESTful架構(gòu)就是:
1) 每一個URI代表一種資源;
2) 客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層;
3) 客戶端通過四個HTTP動詞,對服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)“表現(xiàn)層狀態(tài)轉(zhuǎn)化”。
3.2 服務(wù)端功能實(shí)現(xiàn)
作為RESTful Web API,通過HTTP動詞對資源進(jìn)行操作。比如注冊用戶,對用戶信息施加 HTTP POST 即可完成注冊。在用戶登錄客戶端后,不需要將密碼保存在客戶端本地,只需保存一個Token作為標(biāo)識來完成后續(xù)請求。
本平臺的用戶登錄是基于Token的認(rèn)證機(jī)制。用戶登錄時,服務(wù)端接收到發(fā)送的登錄請求,然后驗證用戶名和密碼是否匹配正確。若正確,則生成一個唯一Token字符串返回給客戶端,之后的請求中,客戶端不必再發(fā)送用戶名密碼的信息,只需攜帶Token字符串。而服務(wù)器則需驗證Token是否過期,驗證成功則用戶驗證成功。
由于用戶的運(yùn)動數(shù)據(jù)包括有時間段,步數(shù)等復(fù)雜的數(shù)據(jù)結(jié)構(gòu),所以我們選擇使用對數(shù)據(jù)類型模式自由的MongoDB數(shù)據(jù)庫。當(dāng)客戶端發(fā)起同步數(shù)據(jù)請求時,使用 HTTP PUT 方法向地址 /users/{username} 提交要更新的用戶信息。服務(wù)器首先驗證請求頭中的Token是否合法,如果合法,則更新服務(wù)器中MongoDB數(shù)據(jù)庫里對應(yīng)用戶的信息,并返回請求成功狀態(tài)碼200。否則返回請求失敗碼。
如果在驗證Token過程中,發(fā)現(xiàn)Token距離過期時間小于一天,則返回刷新過期時間的Token。對于過期的Token,在服務(wù)器數(shù)據(jù)庫中存在一個黑名單,存儲過期Token的唯一身份標(biāo)識。在每次請求中服務(wù)器會先在黑名單中查找是否存在,如果存在則返回認(rèn)證失敗,提示客戶端重新登錄獲取新的token,如果不存在則進(jìn)行正常請求。
4 客戶端實(shí)現(xiàn)
4.1 主體部分
4.1.1 Android系統(tǒng)介紹
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。同時由于Google公司將Android項目源代碼以Apache Software License開源了出來,使得該系統(tǒng)迅速發(fā)展完善,成為現(xiàn)今兩大智能手機(jī)系統(tǒng)之一,并且已經(jīng)保持著十足的發(fā)展勁頭。這也是如今智能手機(jī)如此普及的原因之一。
4.1.2 模塊功能
本平臺的移動端主要包含了3個應(yīng)用模塊——用戶信息管理模塊,計步監(jiān)測模塊,睡眠監(jiān)測模塊。
用戶信息管理模塊:該模塊包含了用戶的注冊登錄操作,管理用戶身體數(shù)據(jù),制定運(yùn)動目標(biāo)的功能。當(dāng)用戶注冊登錄時,需要添加用戶的身體數(shù)據(jù),如身高,體重等。注冊成功后會將這些數(shù)據(jù)存儲到服務(wù)器端,當(dāng)用戶登錄后能夠獲取到,并且在設(shè)置界面能夠隨時修改基本的身體數(shù)據(jù)。
計步檢測模塊:該模塊包含了記錄用戶運(yùn)動的功能。我們通過藍(lán)牙4.0協(xié)議使得移動端和我們的智能手環(huán)進(jìn)行數(shù)據(jù)交互。當(dāng)我們在運(yùn)動時,手環(huán)會通過算法即時記錄我們運(yùn)動的步數(shù)等運(yùn)動信息,然后在通過藍(lán)牙將這些運(yùn)動數(shù)據(jù)傳輸?shù)揭苿佣?,最后再由移動端通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸儲存在服務(wù)端上完成用戶運(yùn)動數(shù)據(jù)的記錄儲存。儲存完成后,用戶也可以利用移動端來獲取到自己以前的歷史記錄,了解相關(guān)運(yùn)動健康狀況。
睡眠監(jiān)測模塊:該模塊包含了記錄用戶睡眠數(shù)據(jù)的功能。在我們睡覺之前,點(diǎn)擊移動端上的睡眠監(jiān)測按鈕,開始記錄用戶睡眠狀況。結(jié)束后,和計步檢測功能一樣,我們也可以查看睡眠記錄。
4.2 藍(lán)牙部分
這是本平臺中與移動端相連接的智能手環(huán)FSBand:
手環(huán)參數(shù)表如表1所示:
1) 藍(lán)牙4.0協(xié)議介紹
藍(lán)牙是一種無線傳輸標(biāo)準(zhǔn),能夠?qū)崿F(xiàn)固定設(shè)備,移動設(shè)備等相互之間短距離的數(shù)據(jù)交換。其最開始是由愛立信公司于1994年創(chuàng)制的,而如今由藍(lán)牙技術(shù)聯(lián)盟(Bluetooth Special Interest Group,簡稱SIG)管理。
隨著藍(lán)牙技術(shù)的逐漸發(fā)展,藍(lán)牙4.0標(biāo)準(zhǔn)出現(xiàn)在了大眾面前。由于藍(lán)牙4.0的出現(xiàn),使得計步器,醫(yī)療器械,智能儀表等能夠?qū)崿F(xiàn)無線傳輸。因為藍(lán)牙4.0最重要的特性是省電,極低的運(yùn)行和待機(jī)功耗可以使一粒紐扣電池連續(xù)工作數(shù)年之久。此外,低成本和跨廠商互操作性,3毫秒低延遲、AES-128加密等諸多特色也使得藍(lán)牙4.0協(xié)議越來越受到無線技術(shù)開發(fā)者的追捧。
2) 數(shù)據(jù)傳輸實(shí)現(xiàn)
藍(lán)牙4.0通過GATT協(xié)議進(jìn)行通信,它是一個在藍(lán)牙連接之上的發(fā)送和接收很短的數(shù)據(jù)段的通用規(guī)范,這些很短的數(shù)據(jù)段被稱為屬性(Attribute)。GATT的全稱是Generic Attribute Profile,它定義兩個 BLE 設(shè)備通過叫做Service和Characteristic的東西進(jìn)行通信。GATT 就是使用了 ATT(Attribute Protocol)協(xié)議,ATT 協(xié)議把 Service, Characteristic遺跡對應(yīng)的數(shù)據(jù)保存在一個查找表中,次查找表使用 16 bit ID 作為每一項的索引。一旦兩個設(shè)備建立起了連接,GATT 就開始起作用了,所以必須完成GAP 協(xié)議。GAP協(xié)議(Generic Access Profile)用來控制設(shè)備連接和廣播,它使藍(lán)牙設(shè)備對其他設(shè)備可見,并決定了藍(lán)牙設(shè)備是否可以或者怎樣與合同設(shè)備進(jìn)行交互。GATT 事務(wù)是建立在嵌套的Profiles, Services 和 Characteristics之上的,如圖4所示:
Service 把數(shù)據(jù)分成一個個的獨(dú)立邏輯項,它包含一個或者多個 Characteristic。每個 Service 有一個 UUID 唯一標(biāo)識。 UUID 有 16 bit 的,或者 128 bit 的。在 GATT 事務(wù)中的最低界別的是 Characteristic,Characteristic 是最小的邏輯數(shù)據(jù)單元,同樣用一個UUID作為唯一標(biāo)識,它也可能包含一個組關(guān)聯(lián)的數(shù)據(jù),例如加速度計的 X/Y/Z 三軸值。和 BLE 外設(shè)通信,主要是通過 Characteristic。可以從 Characteristic 讀取數(shù)據(jù),也可以往 Characteristic 寫數(shù)據(jù)。這樣就實(shí)現(xiàn)了雙向的通信。
5 平臺測試
本節(jié)測試主要是模擬用戶正常使用情況,以此來測試服務(wù)端、客戶端以及智能手環(huán)之間數(shù)據(jù)傳輸?shù)木唧w情況。
5.1 注冊登錄
用戶第一次使用客戶端時需要注冊一個新的賬號,同時添加其身體數(shù)據(jù)、運(yùn)動目標(biāo)的信息。然后使用賬號登錄我們的客戶端,之后產(chǎn)生的運(yùn)動數(shù)據(jù)信息是基于賬號來存儲在后端服務(wù)器中的。
5.2 日常記錄
正常登錄客戶端后,我們的智能手環(huán)就可以通過藍(lán)牙4.0與手機(jī)相連接,保持?jǐn)?shù)據(jù)的交換。在用戶運(yùn)動的過程中,智能手環(huán)利用自身的傳感器獲取到的數(shù)據(jù),根據(jù)相關(guān)的算法數(shù)據(jù)化出用戶運(yùn)動情況。之后再通過藍(lán)牙將運(yùn)動數(shù)據(jù)傳輸?shù)绞謾C(jī)客戶端。手機(jī)接收到數(shù)據(jù)后,就會將數(shù)據(jù)通過互聯(lián)網(wǎng)傳輸?shù)皆贫说姆?wù)器中存儲。
5.3 修改數(shù)據(jù)
我們的身體數(shù)據(jù),以及運(yùn)動目標(biāo)總是會變化的,所以這些數(shù)據(jù)時支持修改的。在設(shè)置界面,可以選擇點(diǎn)擊個人信息(修改運(yùn)動目標(biāo)時點(diǎn)擊目標(biāo)欄下的相關(guān)選項),進(jìn)入相關(guān)界面后根據(jù)情況修改數(shù)據(jù),最后點(diǎn)擊保存并更新。
6 結(jié)束語
本平臺利用藍(lán)牙4.0技術(shù)實(shí)現(xiàn)無線體域網(wǎng)收集身體健康數(shù)據(jù),并將智能手機(jī)作為其中的核心節(jié)點(diǎn),通過WiFi或4G等網(wǎng)絡(luò)將數(shù)據(jù)數(shù)據(jù)傳輸至云端服務(wù)器中并存儲。而且隨著智能手環(huán)技術(shù)水平的提高,我們能夠檢測到的健康數(shù)據(jù)類型也會越來越多,這時我們只需要修改客戶端中數(shù)據(jù)上傳部分的代碼即可,無需修改服務(wù)端中數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),拓展性良好。用戶使用該平臺能夠隨時查看其過去身體健康數(shù)據(jù),以到達(dá)檢測自身身體狀況的效果。
參考文獻(xiàn):
[1] Android (operating system) [EB/OL]. [2017-09-20].https://en.wikipedia.org/wiki/Android_(operating_system)#Market_share
[2] 阮一峰, 理解RESTful架構(gòu) [EB/OL]. [2017-09-23].http://www.ruanyifeng.com/blog/2011/09/restful.html.
[3] Race604, GATT Profile 簡介 [EB/OL]. [2017-09-26].https://race604.com/gatt-profile-intro/.
[4] 郭霖. 第一行代碼[M]. 北京: 人民郵電出版社, 2014.