DIY寶典:用智能硬件BB-Black搭建狂拽炫酷的遠(yuǎn)程醫(yī)療監(jiān)測系統(tǒng)
2.遠(yuǎn)程監(jiān)控功能實現(xiàn)
本文引用地址:http://cafeforensic.com/article/278337.htm系統(tǒng)以BB-black為平臺,提供用戶遠(yuǎn)程登錄訪問嵌入式Web服務(wù)器Boa,查看該服務(wù)器上的被監(jiān)護(hù)人近期生理數(shù)據(jù)功能;為了實現(xiàn)數(shù)據(jù)存放功能,作者針對嵌入式設(shè)備,采用開銷小、可移植性強(qiáng)、便使用且高效的嵌入式SQLite數(shù)據(jù)庫。而CGI(Common Gateway Interface)通用網(wǎng)關(guān)接口,則是Web服務(wù)器和SQLite數(shù)據(jù)庫之間的橋梁,作為客戶端與Web服務(wù)器交互的標(biāo)準(zhǔn)接口,可按照該標(biāo)準(zhǔn)編寫應(yīng)用程序?qū)崿F(xiàn)靜態(tài)HTML網(wǎng)頁無法實現(xiàn)的數(shù)據(jù)庫訪問和搜索功能,實現(xiàn)客戶端與服務(wù)器的交互操作。其工作原理如下圖5所示。
圖5遠(yuǎn)程監(jiān)控模塊軟件構(gòu)成與工作原理
首先,由客戶端通過瀏覽器向服務(wù)器發(fā)起請求,嵌入式Web服務(wù)器端收到請求后觸發(fā)指定的腳本程序?qū)φ埱筮M(jìn)行解析,并執(zhí)行相應(yīng)的CGI應(yīng)用程序。
其次,CGI應(yīng)用程序根據(jù)請求信息調(diào)用相應(yīng)的SQLite數(shù)據(jù)庫操作程序,并把數(shù)據(jù)庫操作程序的執(zhí)行結(jié)果以HTML文檔形式傳遞給Web服務(wù)器;嵌入式Web服務(wù)器分析、處理HTML文檔信息,并將最終數(shù)據(jù)內(nèi)容傳送給客戶端瀏覽器。
最后,由客戶端瀏覽器對數(shù)據(jù)內(nèi)容進(jìn)行解析,并以網(wǎng)頁形式顯示給客戶。
2.1嵌入式Web服務(wù)器Boa
2.1.1嵌入式服務(wù)器Boa的選用
ARM Linux開發(fā)環(huán)境下支持httpd、thttpd和Boa三種嵌入式Web服務(wù)器。作者選用的是可執(zhí)行文件小、運(yùn)行過程中需要的資源小的嵌入式Web服務(wù)器Boa.
Boa作為一種單任務(wù)的HTTP服務(wù)器,通過建立HTTP請求列表來處理多路HTTP連接請求,同時在處理請求過程只為CGI程序創(chuàng)建新進(jìn)程,在最大程度上節(jié)省了系統(tǒng)資源,對嵌入式系統(tǒng)來說至關(guān)重要。同時它還具有自動解壓文件、生成目錄等功能。
2.1.2 Boa功能實現(xiàn)
設(shè)計中Boa服務(wù)器需實現(xiàn)接收客戶端請求、分析請求、響應(yīng)請求和向客戶端返回請求結(jié)果等任務(wù)。其工作流程如下圖5所示。
圖6 Boa服務(wù)器工作流程
Boa服務(wù)器初始化工作代碼實現(xiàn):
上述代碼首先創(chuàng)建一個無阻塞的流式套接字描述符socktfd,提供面向連接的可靠傳輸。然后利用bind()函數(shù)將指定端口與套接字描述符關(guān)聯(lián),最后利用listen()函數(shù)在指定端口監(jiān)聽,等待Request請求。
當(dāng)監(jiān)聽到連接請求,服務(wù)器調(diào)用get_request()函數(shù)獲取請求信息,利用accept()函數(shù)建立連接,接收請求、分析信息,進(jìn)行HTTP認(rèn)證確認(rèn),處理請求信息,并將結(jié)果發(fā)送、顯示到Web瀏覽器;當(dāng)有CGI請求時,創(chuàng)建CGI處理進(jìn)程,并將處理結(jié)果發(fā)送、顯示到Web瀏覽器。
2.1.3 Boa在ARM上的移植
首先,針對BB-Black和實際應(yīng)用場景對Boa服務(wù)器源代碼作以下修改:(1)根據(jù)監(jiān)護(hù)人數(shù)量指定HTTP請求列表限制參數(shù);將服務(wù)器的輸入輸出緩存空間設(shè)為最大值,以加快生理數(shù)據(jù)傳輸速度;(2)通過編寫實現(xiàn)一些簡單函數(shù),來精簡Linux操作系統(tǒng)庫函數(shù),節(jié)約資源。
其次,利用arm-linux-gcc交叉編譯環(huán)境,配置生成大小為175.8KB的boa可執(zhí)行程序。通過bin.arm-linux-strip boa指令剝?nèi)ジ綆У木幾g信息,得到僅59.4KB的ARM平臺可執(zhí)行文件。
最后,通過修改Web服務(wù)器的配置文件boa.conf:監(jiān)聽端口為80,注釋掉綁定IP地址設(shè)置欄,KeepAliveMax值為50,KeepAliveTimeout值為10,服務(wù)器名字為www. RemoteMedicalMonitoringSystem.com;以及CGI路徑,訪問日志和錯誤日志的存放路徑等運(yùn)行參數(shù);將該配置文件和可執(zhí)行文件boa放到BB-Block平臺的/home/www目錄下;執(zhí)行g(shù)enromfs-f romfs.img-d romdisk命令生成一個含有Boa服務(wù)器的根文件系統(tǒng),通過bootloader燒寫到存儲器。完成Boa到ARM平臺的移植。
2.2 CGI與SQLite數(shù)據(jù)庫移植
BB-Black開發(fā)板在運(yùn)行CGI和SQLite程序前,需要將相應(yīng)的庫移植到開發(fā)板。設(shè)計通過交叉編譯之后將CGI的libcgic.a和capture拷貝到BB-black開發(fā)板的/home/www/cgi-bin目錄下,完成移植工作(可通過網(wǎng)頁訪問該目錄,若在網(wǎng)頁上顯示cgic test的字樣,則表明cgi庫移植成功);將SQLite的sqlite3和libsqlite3.so.0.8.6分別下載到BB-black開發(fā)板的/usr/bin和/usr/lib目錄中并通過ln–s /usr/lib/libsqlite3.so.0.8.6 /usr/lib/libsqlite3.so.0命令,建立軟連接(因為可執(zhí)行程序sqlite3在運(yùn)行的時候搜尋libsqlite3.so.0動態(tài)庫),完成移植工作。
2.3遠(yuǎn)程監(jiān)控功能實現(xiàn)
2.3.1 HTML設(shè)計
遠(yuǎn)程醫(yī)療監(jiān)控界面主要有監(jiān)護(hù)人登錄界面和被監(jiān)護(hù)人生理數(shù)據(jù)監(jiān)測界面。其中脈搏和心跳監(jiān)測HTML頁面首行代碼用action="pluse_heart_monitor.cgi"將表單指向pluse_heart_monitor.cgi處理程序,method="get"指定獲取環(huán)境變量的方式為get;程序的最后幾行用type="submit"或type="reset"指定點擊這兩個按鈕時提交表單;其他生理數(shù)據(jù)監(jiān)測頁面與此相似。
2.3.2 CGI和SQLite數(shù)據(jù)庫互動設(shè)計
CGI與SQLite數(shù)據(jù)的互動主要包括CGI程序在SQLite數(shù)據(jù)庫上建立生理數(shù)據(jù)表,插入生理數(shù)據(jù);CGI按照表單提交內(nèi)容對數(shù)據(jù)表進(jìn)行增刪改查詢操作;其主要的控制函數(shù)代碼如下:
評論