之前用过一个类似软件,只能用串口接收,而且速度有限,并且还很耗CPU。前不久调USB摄像头的时候自己用C++写了一个,支持串口接收和网络接收JPEG图像序列。现在发出来给需要的同学,方便各位的程序调试。
串口接收功能:
串口端口无限制,自动检测电脑可用端口,波特率从9600到921600可选,默认不支持流控制和奇偶校验,8位数据位一位停止位。不需要通信协议,自动从接收的数据中判断JPG数据的起始(FFD8)结束(FFD9)标志,不包含在起始结束标志之间的数据默认为非jpg数据并显示在数据接收窗口(目前只支持文本显示,16进制暂未实现),支持接收数据量显示,帧速率显示(可能计算的不太准确),一帧JPG图像数据大小显示,图像分辨率显示。串口发送功能暂未实现。
网络接收功能:
上位机也支持通过网络接收JPG图片序列。数据接收功能和图像显示功能同串口。上位机默认作为服务器端,且暂时只支持TCP服务器,UDP未实现。目前只支持一个客户端的连接,可显示客户端的连接状态和IP。
注意:
串口接收功能和网络接收功能可同时开启,但如果同时接收数据会造成数据混乱从而导致图像显示不正常。
串口和网络的发送功能均暂未实现(暂时用不到发送功能)。
本人实测通过TCP本地回环接收TCP客户端发来的MJPG编码的1080P avi视频文件,网络速度3~5MB/s(360加速球显示),图像显示速率20~30fps,CPU(i5 750)占用25%左右,串口传输效果可以看这里链接里的视频
http://pan.baidu.com/s/1jGDA9s6
软件目前还算稳定,之前测试传输了几个小时的图像也没什么问题,可能还有些小bug,欢迎反馈。
测试截图
添加不了附件了,二楼传
更新内容:
1. 采用独立线程负责串口和网络数据的接收及图像解码,界面线程只负责显示和事件响应,降低了CPU占用,解决了界面卡顿的问题
已知BUG:
1. 文本接收窗口显示有问题(不影响图片接收和显示)。
关于BUG的描述:
由于采用的MFC的CEdit控件,而这个控件有个蛋疼的地方是当文本显示内容多了之后需要垂直自动滚动到文本末尾也就是最下面一行,而现在的情况是每刷新一遍CEdit的时候光标都会自动回滚到文本开始的地方,然后需要重新设置滚动条滚动到末尾,这在一般情况下没问题,但是在这种动态滚动刷新速度比较快的情况下会出现文本和滚动条高速来回滚动造成闪烁。同时CEdit里的文本只支持 换行, 或 或 都不会自动换行,因此加了在更新CEdit的时候将其中的 替换成 的操作,然而如果连续有多个 或 最终都会被替换掉只剩一个 ,因此显示出来会缺少空行。另外文本的暂存现在选用的是CString,收到一个字符就Append进去,这样处理效率也不高。前一个滚动的问题在网上找了好久没找到合适的解决方案,再加上换行和效率的问题,最后只有考虑放弃使用CEdit自己实现一个(不知道用RichEdit行不行),在网上也找到了参考代码,不过最近没太多时间弄,以后有时间再尝试下。
其实这个版本年前就弄好了,只不过接近放假,心都飞了。程序拷回去准备在家里调调,回到家才想起家里没网啊,又不能百度又不能查MSDN怎么调啊。年后又开始忙了。
看到有人私信求源码,我想了想,也就不藏着掖着了,不是什么高深的东西,串口和网络是一般嵌入式开发上位机常用的两种与下位机通信的接口,估计很多人也想了解,下面就把源码放出来吧,代码写的不好请轻喷。如果有人能完善我的代码或者添加其他功能,希望也能分享出来,一起交流,多多支持开源计划。
工程描述:
开发环境VS2010,工程选用MBCS字符集
串口通信采用CSerialPort类,网络通信采用CAsyncSocket类,线程间通信采用匿名管道通信,JPG图片显示采用CImage类,其他自行看代码。
以上。
补充内容 (2016-4-3 20:20):
上面说错了,Visual Studio版本是2013
@正点原子 @pyatao @login_FAE
我刚买了你得摄像头模块
一周热门 更多>