??? 摘 要: 介紹了基于藍(lán)牙的智能家居視頻防盜監(jiān)控系統(tǒng)的軟件設(shè)計(jì)。在ARM9(S3C2410)" title="ARM9(S3C2410)">ARM9(S3C2410)和Linux2.6.14上實(shí)現(xiàn)了USB藍(lán)牙驅(qū)動(dòng),、USB攝像頭驅(qū)動(dòng)" title="攝像頭驅(qū)動(dòng)">攝像頭驅(qū)動(dòng),,介紹了Linux2.6下藍(lán)牙通信的實(shí)現(xiàn)過(guò)程,最后實(shí)現(xiàn)了在PC監(jiān)控機(jī)和ARM9(S3C2410)間圖像的采集和傳輸,。
??? 關(guān)鍵詞: ARM9? Linux2.6.14? 藍(lán)牙 智能家居
?
??? 隨著多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,大型的智能家居系統(tǒng)成為一種發(fā)展趨勢(shì)。理想的智能家居系統(tǒng)應(yīng)具有以下功能:
??? (1) 住宅視頻監(jiān)控防盜,、報(bào)警;
??? (2) 火警,、煙警,、有毒氣體泄露報(bào)警;
??? (3) 各類(lèi)家用電器控制,;
??? (4) GSM短信息遠(yuǎn)程報(bào)警,。
??? 在這些功能中,家庭內(nèi)的安全防盜顯得尤為重要,。如果智能家居內(nèi)采用有線方式布線,,會(huì)大大影響房間的美觀,并且使用也不夠便利,。
??? 藍(lán)牙技術(shù)傳輸可靠并能穿越障礙物,功耗低,、成本低廉,、組網(wǎng)方便靈活,是一種有效的無(wú)線通信手段,。本文采用藍(lán)牙技術(shù)設(shè)計(jì)并實(shí)現(xiàn)了一種智能家居中的視頻防盜監(jiān)控系統(tǒng),,取得了滿意的效果。
1 系統(tǒng)總體設(shè)計(jì)和工作流程
??? 系統(tǒng)主要包括ARM9處理器(S3C2410),、家庭內(nèi)PC機(jī),、遠(yuǎn)程PC監(jiān)控機(jī)、藍(lán)牙模塊" title="藍(lán)牙模塊">藍(lán)牙模塊,、USB攝像頭幾部分,,其結(jié)構(gòu)框圖如圖1所示。ARM9處理器負(fù)責(zé)對(duì)整個(gè)家居設(shè)備的管理,,由于智能家居內(nèi)許多家電都是通過(guò)藍(lán)牙無(wú)線傳感網(wǎng)絡(luò)來(lái)工作的,,因此家庭內(nèi)的PC機(jī)必須負(fù)責(zé)保存數(shù)據(jù)并對(duì)藍(lán)牙無(wú)線傳感網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)融合處理。
?
??? 系統(tǒng)工作流程如下:如果遠(yuǎn)程PC監(jiān)控機(jī)發(fā)送啟動(dòng)監(jiān)控命令,,則激活攝像頭,。在對(duì)攝像頭完成初始化之后,就將進(jìn)行圖像的采集,。采集的圖像以文件的形式被送入藍(lán)牙模塊,,此時(shí)的藍(lán)牙模塊已經(jīng)進(jìn)入了以太網(wǎng)仿真模式,因此可以通過(guò)SOCKET通信將圖像發(fā)送到家庭內(nèi)的PC機(jī),。最后通過(guò)互聯(lián)網(wǎng)發(fā)送到遠(yuǎn)程的PC監(jiān)控機(jī),。
2 USB藍(lán)牙模塊驅(qū)動(dòng)和USB攝像頭驅(qū)動(dòng)
2.1 USB藍(lán)牙模塊驅(qū)動(dòng)
??? 在Linux系統(tǒng)內(nèi)核配置過(guò)程中,進(jìn)入Networking Support選項(xiàng)的Bluetooth subsystem support子選項(xiàng),,選擇L2CAP protocol support,、BNEP protocol support(Malticast filter support和Protocol filter support)這幾項(xiàng),其作用就是使內(nèi)核支持藍(lán)牙協(xié)議中的L2CAP和BNEP協(xié)議,。然后進(jìn)入Bluetooth device drivers,,選擇HCI USB driver。至此,,就完成了內(nèi)核對(duì)于USB藍(lán)牙的支持,。
??? 完成內(nèi)核對(duì)藍(lán)牙的支持后,下一步是移植Linux藍(lán)牙協(xié)議棧的庫(kù)(bluez-libs-2.17.tar.gz)和工具包" title="工具包">工具包(bluez-utils-2.17.tar.gz),。在指定了交叉編譯器和安裝路徑并運(yùn)行安裝命令后,,bluez-libs庫(kù)生成libbluetooth.so.1.17等3個(gè)庫(kù)文件,bluez-utils工具包生成hcid(HCI后臺(tái)進(jìn)程),、sdpd(服務(wù)發(fā)現(xiàn)協(xié)議后臺(tái)進(jìn)程)、hciconfig(檢查HCI接口并開(kāi)啟藍(lán)牙設(shè)備)和hcitool(掃描藍(lán)牙設(shè)備的地址)等幾個(gè)進(jìn)程文件,。
2.2 USB攝像頭驅(qū)動(dòng)
??? USB攝像頭使用的是市場(chǎng)上廣泛應(yīng)用的采用中芯微公司的ZC301芯片的攝像頭,,這種攝像頭采用硬件壓縮方式,,截取到的圖片是JPEG格式,這樣可以大大減少由于軟件壓縮所耗費(fèi)的時(shí)間,,便于網(wǎng)絡(luò)多媒體的應(yīng)用,。Linux內(nèi)核并未包括這種攝像頭,因此必須針對(duì)嵌入式 Linux環(huán)境,,打入攝像頭驅(qū)動(dòng)補(bǔ)丁文件usb-2.6.12LE06.patch.tar.gz,。將該文件解壓縮,然后放入/kernel2.6.14/drivers/usb目錄,,用命令path-pl
??? 整個(gè)通信過(guò)程如下:
??? (1)USB藍(lán)牙的傳輸驅(qū)動(dòng)程序(drivers/bluetooth/hci_usb.c)將信息注冊(cè)到Linux USB核心,。當(dāng)USB藍(lán)牙插入時(shí),主機(jī)控制器設(shè)備驅(qū)動(dòng)程序會(huì)枚舉它并給它分配地址,,同時(shí)讀取設(shè)備描述符中所包含的設(shè)備信息,。如果枚舉期間讀取的設(shè)備描述符與hci_usb驅(qū)動(dòng)程序注冊(cè)到Linux USB核心的信息相匹配,這個(gè)驅(qū)動(dòng)程序就能添加進(jìn)USB設(shè)備[1],。
??? (2)在S3C2410上運(yùn)行hcid,、sdpd、hciconfig,、hcitool四個(gè)藍(lán)牙工具文件,。在S3C2410一側(cè)的藍(lán)牙設(shè)備能夠被發(fā)現(xiàn)并被成功分配唯一地址的基礎(chǔ)之上運(yùn)行pand--listen--role NAP,這樣將允許藍(lán)牙監(jiān)聽(tīng)服務(wù)器,。
??? (3)PC機(jī)上插入U(xiǎn)SB藍(lán)牙,,運(yùn)行命令hciconfig hci0 up、hcid-f/etc/bluetooth/hcid.conf,、hciconfig-a,、hcitool scan
后,啟動(dòng)藍(lán)牙設(shè)備,并能夠檢查到S3C2410一側(cè)的藍(lán)牙設(shè)備,,可以根據(jù)藍(lán)牙設(shè)備對(duì)應(yīng)的物理地址用pand connect-c XXXX(物理地址)來(lái)連接2個(gè)藍(lán)牙設(shè)備[2],。
??? (4)在個(gè)人局域網(wǎng)建立的基礎(chǔ)之上,BNEP就可以將自己作為以太網(wǎng)(TCP/IP)設(shè)備注冊(cè)到Linux網(wǎng)絡(luò)層,??梢酝ㄟ^(guò)命令ifconfig bnep0來(lái)改變藍(lán)牙接口IP地址。BNEP模塊和用戶(hù)模式pand后臺(tái)進(jìn)程實(shí)現(xiàn)了Bluetooth個(gè)人區(qū)域網(wǎng)(PAN),。
4 智能家居中的視頻監(jiān)控軟件流程
4.1 USB攝像頭圖像采集軟件流程
??? 該系統(tǒng)正常工作時(shí),,整個(gè)設(shè)計(jì)有兩個(gè)關(guān)鍵的部分:一是攝像頭如何采集圖像;二是如何進(jìn)行圖像的傳輸,。
??? 為了實(shí)現(xiàn)監(jiān)控,,獲得視頻數(shù)據(jù)是一個(gè)重要環(huán)節(jié),。系統(tǒng)是在嵌入式Linux系統(tǒng)平臺(tái)上采用Video4Linux編程來(lái)獲取圖像的[3]。攝像頭圖像采集流程如圖2所示,。Video4Linux是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),,它為針對(duì)視頻設(shè)備的應(yīng)用編程提供一系列接口函數(shù),用戶(hù)通過(guò)open,、write,、read、ioctl等函數(shù)來(lái)實(shí)現(xiàn)對(duì)設(shè)備文件的操作,。采集程序?qū)崿F(xiàn)過(guò)程:調(diào)用函數(shù)fd=open(“/dev/v4l/video0”,0_RDWR)打開(kāi)視頻設(shè)備對(duì)應(yīng)的設(shè)備文件/dev/v4l/video0,,接著利用ioctl函數(shù)分別調(diào)用VIDIOCGCAP、VIDIOCGPICT,、VIDIOCSPICT來(lái)獲得設(shè)備相關(guān)信息,、讀取圖像信息、修改圖片中的depth=8信息(對(duì)應(yīng)的格式是JPEG)并設(shè)置圖片格式為320×240,在完成了設(shè)備的初始化后,,就可以截取視頻圖像了,。調(diào)用realloc(vd->pFramebuffer, (size_t)vd->framesizeIn)函數(shù),得到的返回值就是圖像所需要的內(nèi)存空間首地址vd->pFramebuffer,,然后用read()函數(shù)直接讀取設(shè)備就能得到圖像,,采集一幀的時(shí)間約為38ms,圖像效果很清晰,。最后計(jì)算圖像大小(JPEG圖像的有效段從1 024B開(kāi)始,,以0xFF、0xD9結(jié)束)并送入傳輸部分,。
?
?
4.2 圖像的無(wú)線和有線傳輸軟件流程
??? 由于TCP/IP可以直接運(yùn)行于Bluetooth上,,因此家庭內(nèi)PC機(jī)和S3C2410以及家庭內(nèi)PC機(jī)和遠(yuǎn)程監(jiān)控機(jī)的通信程序均可由SOCKET編程來(lái)完成。服務(wù)器的工作流程:首先調(diào)用s = socket(AF_INET, SOCK_STREAM, 0)來(lái)創(chuàng)建socket號(hào),,調(diào)用bind(s, (struct sockaddr*)&sin, sizeof(sin))函數(shù)將其與本機(jī)地址以及一個(gè)本地端口號(hào)" title="端口號(hào)">端口號(hào)綁定,。然后調(diào)用listen(s,5)函數(shù)在相應(yīng)的socket上監(jiān)聽(tīng),調(diào)用accept函數(shù),,最后睡眠并等待客戶(hù)的連接請(qǐng)求,,當(dāng)accept函數(shù)接收到一個(gè)連接服務(wù)請(qǐng)求時(shí),將生成一個(gè)新的socket,,并通過(guò)新的socket將圖像內(nèi)容發(fā)送出去,。客戶(hù)接收端程序流程:首先調(diào)用gethostbyname(host_name)函數(shù)完成域名與IP地址的轉(zhuǎn)換得到服務(wù)器的IP地址,,然后調(diào)用sockfd=socket(AF_INET, SOCK_STREAM, 0)函數(shù)創(chuàng)建一個(gè)socket號(hào),,并設(shè)定端口號(hào)為1 500,最后調(diào)用connect(sockfd, (struct sockaddr*)&sin, sizeof(sin))函數(shù)與服務(wù)器建立連接,,連接成功后接收從服務(wù)器發(fā)送過(guò)來(lái)的數(shù)據(jù),。實(shí)驗(yàn)測(cè)得用藍(lán)牙傳輸采集到的每幀圖像時(shí)的速度約為78kB/s,。
參考文獻(xiàn)
[1] CORBET J, RUBINI A, KROAH-HARTMA G. 魏永明,耿岳,鐘書(shū)毅等譯.LINUX設(shè)?備驅(qū)動(dòng)程序(第3版)[M].北京:中國(guó)電力出版社,,2006,1.
[2] ?ROGER W. Linux Unwired[M]. O’Reilly,2004,4.
[3] ?陳賾,秦貴和,,徐華中,等.ARM9嵌入式技術(shù)及Linux高級(jí)實(shí)踐教程[M].北京:北京航空航天出版社,,2005.