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