新闻中心

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 下一页

评论


相关推荐

技术专区

关闭