新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何基于嵌入式Linux設計家居監控系統?

        如何基于嵌入式Linux設計家居監控系統?

        作者: 時間:2018-08-07 來源:網絡 收藏

        1 系統流程架構

        本文引用地址:http://www.104case.com/article/201808/385610.htm

        本系統的操作系統平臺為Linux, 內核版本為2.6,目標板上包括視頻采集、GPRS 模塊和控制器S3C2440.控制器主要是負責向客戶顯示及后端服務提供圖像數據。視頻服務器的啟動方式是由后臺或觸發啟動。當用戶觸發事件時自動啟動采集程序或者由用戶遠程啟動,再進行圖像數據的抓取。

        2 系統設計

        2.1 Linux 下設備驅動

        Linux 是免費的操作系統,其源代碼是公開的,我們能夠根據實驗的需求進行必要的研究和修改。在Linux 操作系統中,設備都是以文件形式的存在,對設備的操作就是對文件的操作,使用戶可以調用通用的文件操作函數來進行訪問和操作設備。

        設備驅動程序是Linux 內核與外部設備關聯的接口,它們都根據用戶操作一系列的標準函數調用來執行,通過調用獨立的驅動程序來調用實際硬件的設備進行特定操作。編程接口能夠使驅動程序獨立運行于內核的其他部分,就如“嵌入”到內核中一樣。這種模塊化設計特點使得Linux 驅動程序的編寫方法簡單并且高效。操作簡單的同時也有風險,因為設備驅動程序是運行在內核中,如果驅動程序編寫出現問題,很有可能會使整個Linux 系統運行出現問題。

        驅動程序運行與一般應用程序也有不同地方,驅動程序運行只能調用自己相應函數和內核中的標準函數,而一般應用程序只能調用外部數據庫等應用函數。內核模塊源文件中也不能包括一般的庫文件,只能使用內核中規定的內核函數,否則就會出現問題。這也是驅動程序的寫法與應用程序的寫法不同之處。當然另一個不同之處是內核與一般應用程序處理錯誤的方式不同:

        應用程序中的錯誤是不會對系統產生故障,并可使用調試器來進行源代碼的跟蹤,從而發現問題所在,但內核錯誤有可能會影響整個系統,即使不影響系統也會出現殺死當前進程的問題,而且也不能使用調試來發現問題根源。

        2.2紅外中斷觸發設計

        本監控系統實現了紅外熱釋電傳感器驅動,使用字符設備驅動。由于S3C2440有117路的I/O線。其I/O線分成8組端口,分別是 GPA,GPB,GPC,GPD,GPE,GPF,GPG,GPH.當有人進入時或離開被感應區域時,都會使熱釋電紅外傳感器的電平發生變化,從而引起中斷。熱釋電紅外傳感器感應到有人進入時就會自動啟動正在睡眠的視頻采集設備,對目標進行數據采集。同時熱釋電紅外傳感器的驅動程序需要調用中斷方式來通知內核,讓內核通知視頻采集器已進入工作狀態,從而便于設備管理。

        S3C2440 通過GPIO 引腳的函數和宏來進行配置和控制;函數S3C2440 _ GPIO _ CFGPIN 對復用GPIO 引腳配置;函數SET_ IRQ _ TYPE 對外部中斷觸發器進行設置。本監控系統使用了宏IRQT _ BOTHEDGE 對中斷進行配置。在內核頭文件中定義中斷號,每個外部中斷都分配不同的中斷號來進行控制。當內核接收到中斷響應,就會使用異步通知辦法。為了解決文件的異步通信,用戶程序必須做到兩點:第一必須給進程指定“屬主”;第二為了運行異步通知,用戶程序必須在設備中設置FASYNC 標志。根據內核驅動程序寫法,驅動程序必須要定義自己的fasync 方法。當程序執行到F_SETFL 時就啟動FASYNC,內核就會調用驅動程序fasync.內核空間使用異步信號來向用戶發送信號,相應信號函數是:

        Void kill_fasync(struct fasync_struct **fa,intsig,init band)

        信號函數的功能是當紅外傳感器輸出電平由高到低或由低到高的變化時觸發中斷響應,同時外部設備得到一個通過處理函數產生的電平變化,從而驅動程序中定義read 方法。

        2.3 視頻采集驅動

        在初始化的流程中初始化了攝像頭的一些默認的值,根據紅外傳感器傳過來的拍照命令,啟動拍照程序,開始拍照,圖片數據保存為JPEG 格式存儲,同時發送到手機終端While(1)

        {

        If(paizhao)

        {

        _pal=0 ;

        sendPaiZhao() ;

        readJPEG() ;

        keepData() ;

        sendData() ;

        }

        }

        2.4 圖像數據的JPEG 壓縮編碼

        通常情況下,沒有壓縮的JPEG圖像數據占用存儲空間比較大,非常耗費存儲空間,也不利于網絡數據傳輸,因此對圖像數據進行壓縮很有必要。對于圖像的壓縮方法,Linux系統下的Libjpeg庫中已經有實現。Libjpeg是Linux下的一個標準的庫,能夠直接調用它來實現圖片壓縮。這個庫的主要功能是將圖片以一定的壓縮比率壓縮成JPEG文件格式的圖片。由于Linux是開源的,這個庫也是開放的。不僅可以在一般的Linux操作系統下工作,也可以在Linux下進行工作。這樣就減少了很多底層的工作,也有利于避免重復性的開發工作。

        在使用這個庫之前,首先需要安裝和編譯這個庫。對于Linux,libjpeg庫已經包括在Linux源代碼包中,在配置相關庫文件選項時把這個庫加入,再編譯一下內核就可以使用libjpeg庫。

        圖像壓縮封裝調用image類的compress函數,如下所示:

        Int image compress(image *newone,int quality)這個函數的功能是按照指定的quality 比率將圖片壓縮成JPEG 格式。函數中的兩個參數分別是指向新的image 類數據的指針( 即壓縮后的圖像數據),另一個參數是指定壓縮比率,一般范圍為0~100.當數字越大,壓縮得到的圖片質量就越高,也就越清晰,但同時壓縮后的數據文件容量越大。所以壓縮比不是越大越好,需要根據實驗的現實需求來確定,以滿足實驗功能要求且存儲成本和傳輸成本最低為標準。

        2.5 短消息的收發

        嵌入式監控系統通過使用串口與GPRS連接,通過使用GPRS模塊來進行短消息的收發。SMS短信的收發有兩種模式,即文本模式和PDU模式。文本模式只能發送變通的ASCII字符,短信內容簡單,其最大不足之處是不能收發其他字符。PDU模式將發送的信息按照一定的格式進行新的編碼,一般是十六進制數的PDU序列為主,把所有中文或者圖像進行編碼后再予以發送(如圖2-1)。

        編程過程如下:

        1)打開串口

        打開串口設備文件需要使用標準的I/O操作函數。

        Fd=open(“/dev/ttyS0”,O_RDWR|O_NDELAY|O_NOCTTY) ;

        2) 設置串口屬性

        串口有一些規定的屬性必須進行設置,否則就不能正常運行,一般要設置波特率、控制模式標志、本地模式標志、輸入/ 輸出模式標志、控制字符等相關串口屬性。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高雄县| 基隆市| 深州市| 内江市| 峨边| 茌平县| 汉阴县| 淮南市| 夏邑县| 曲水县| 通河县| 泰来县| 延津县| 麻栗坡县| 乌兰浩特市| 伊通| 嫩江县| 杨浦区| 睢宁县| 江陵县| 浦江县| 青州市| 通河县| 抚宁县| 壤塘县| 阳新县| 长海县| 雅江县| 无锡市| 志丹县| 社旗县| 巴楚县| 公安县| 普兰县| 宁陵县| 临桂县| 镇安县| 青河县| 右玉县| 漠河县| 萍乡市|