新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于 ARM 的遠程無線監控系統的設計與實現

        基于 ARM 的遠程無線監控系統的設計與實現

        作者: 時間:2011-07-27 來源:網絡 收藏

        在/usr/local/man/manl目錄下會生成cjpeg.l、djpeg.l、jpegtran.l、rdjpgcom.l、wrjpgcom.l、snapscreenshop.l六個文件,在/usr/local/arm/3.4.3/arm-linux/lib目錄下會生成libjpeg.a、libjpeg.la、libjpeg.so、 libjpeg.so.62、libjpeg.so.0.0五個函數庫,libjpeg.so.62、libjpeg.so.0.0就是我們需要的庫,將它拷貝到arm-linux里,這樣就支持JPEG壓縮格式的圖像。圖像壓縮的一些重要函數如下:


        char *filename = first.jpeg;//指定壓縮后的圖像所存放的目標文件
        struct jpeg_compress_struct cinfo;//申請并初始化JPEG壓縮對象
        struct jpeg_error_mgr jerr; // 聲明錯誤處理器
        JSAMPROW row_pointer[1]; // 一行位圖
        int row_stride; // 每一行的字節數
        int line; //每一列的字節數
        jpeg_create_compress(cinfo);
        cinfo.image_width = width; // 圖像的寬、高和深度
        cinfo.image_height = height;
        cinfo.input_components = depth;
        cinfo.in_color_space=JCS_RGB;// 彩色圖像
        jpeg_set_quality(cinfo, JPEG_QUALITY, TRUE ); // 設定壓縮質量
        cinfo.dct_method=JDCT_FASTEST; // DCT離散余弦變換
        jpeg_start_compress(cinfo, TRUE); //開始進行JPEG圖像壓縮
        while (cinfo.next_scanline cinfo.image_height)//對每一行進行壓縮
        jpeg_destroy_compress(cinfo); //釋放壓縮工作過程中所申請的資源
        采集到的圖像如圖5所示。如果要進行連續幀的采集由grab_fd.frams來確定需要采集的幀數,最多支持一次采集32幀。

        圖5 采集的圖像


        GPRS DTU通過全功能串口與開發板相連接,在arm-linux的指令調度下將采集到的圖像通過串口通信傳輸到GPRS DTU。arm-linux是通過設備文件訪問串口的,在訪問具體的串行端口時,只需打開相應的設備文件即可。串行端口Port1和Port2對應的設備文件分別為/dev/ttyS0和/dev/ttyS1。若要使用串口進行通信必須在通信兩端設置好串口的屬性,包括數據傳輸的波特率、傳輸的數據格式、是否有奇偶校驗位、流控方式等。在Linux下進行串口設置,涉及一個重要的數據結構struct termios,設置串口波特率struct termios Opt,設置串口數據位
        struct termios Opt;
        Opt.c_cflag = ~CSIZE; //屏蔽字符大小位
        Opt.c_cflag |= ~CS8; //選擇8位數據位
        設置串口校驗位與此相關的宏定義有:
        #define PARENB 0000400 //PARENB控制是否使能奇偶校驗
        #define PARODD 0001000 //PARODD控制使用奇校驗還是偶校驗
        設置串口停止位與停止位相關的宏定義只有CSTOPB,設置termios結構的.c_cflag成員即可。
        #define CSTOPB0000100
        Opt.c_cflag = ~CSTOPB;//1位停止位
        Opt.c_cflag |= ~CSTOPB;//2位停止位
        設置串口波特率:
        串口使用open函數執行打開操作,open( )函數帶有兩個參數,其中參數1為要打開的設備文件名,參數2為打開方式。它們的含義如下。


        O_RDWR:既可讀也可寫。


        O_NOCTTY:告訴嵌入式Linux,該程序不想成為此端口的“控制終端”。如果應用程序不強調這一點,那么任何輸入都會影響程序的執行。


        O_NDELAY:表示該程序不關注DCD信號線所處的狀態,即不管對端設備是在運行或是掛起。如果不設置該標志,則程序會被設置為睡眠狀態,直到DCD信號為低為止。


        使用close(fd)系統調用關閉串口。關閉一個串口通常會將DTR信號設置為低電平,如果外接GPRS DTU,就會將GPRS DTU掛起。使用write( )函數向串口寫入數據,write調用若正確,返回發送的字節數,否則返回-1。從串口讀取數據如果在原始數據的模式下對端口進行操作,read( )函數調用將返回串行口輸入緩沖區所有的數據。如果沒有數據,那么該進程將被阻塞,處于等待狀態,直到數據到來,或者到了規定時間和出現錯誤為止。通過如下方法,能使read( )函數調用立即返回。

        系統的
        本系統監控中心服務器采用PC,使用Windows操作系統,使用VC++編寫上位機程序,利用TCP/IP通信,輸入監控端的IP地址后,上位機可以與監控端通信,接收到傳輸過來的圖像,如圖6所示。該系統大概3~5秒傳輸一幅圖像。

        圖6接收到的圖像


        支持短信和電話喚醒功能,也就是說通過短信和電話撥號就可以對進行控制,使其進入工作狀態,進行信息傳輸。具有連接時機可控功能,支持永遠在線、空閑下線和空閑掉電3種工作方式。在不進行數據傳輸時,可以進入下線狀態,大大節約了通信費用,而在需要重新開始數據傳輸時,可以用手機給監控系統發送短信或打電話將其喚醒,恢復與數據中心的連接,也可以隨時隨地發短信對監控系統進行配置,方便管理。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石屏县| 营口市| 龙口市| 叙永县| 祁门县| 泾川县| 东乡县| 莫力| 开鲁县| 叙永县| 蓬溪县| 新民市| 嘉善县| 札达县| 怀柔区| 昌平区| 堆龙德庆县| 永嘉县| 福安市| 鹿邑县| 桃源县| 淅川县| 舒城县| 穆棱市| 芷江| 周至县| 乌兰浩特市| 平度市| 板桥市| 洪江市| 扎鲁特旗| 凤冈县| 桦南县| 平邑县| 奇台县| 武强县| 于都县| 大埔县| 桑日县| 子洲县| 通渭县|