5.基于STM32F103+OV7670的网络摄像头

前面移植了ucGUI,按说接下来应该说一下如何移植摄像头,不过如果根据奋斗开发板附带的源码摸索,也基本能看明白,无非就是初始化,设置中断和读取数据,添加任务等。

如果移植好了摄像头,那接下来就该移植uip了,这个确实头大,我搞了三天没搞成功,后来直接用书上附带的源码学习了,不过没有使用UCOS系统。


我把uip和摄像头的两个项目合并了,做了一个网络摄像头,下位机用MDK511实现,上位机用QT 5.3.2实现。


最主要的部分是修改了UDP_demo.c文件内的内容,当请求媒体流时,读取摄像头中的信息并发送,但uip不支持自动分片,而且一个视频画面有320*720*2的长度,无法一次发送,我设置了一个721长度的short类型的数组,手动将视频信息分片,第一个元素存放视频的编码,因为是通过UDP发送,防止乱序,后面存放该视频的内容,所以数组长度是1+720

pic[i]=CMOS_Data;
//USART_OUT(USART1,"will send pic%d,sizeof(pic)=%d\r\n",j,sizeof(pic));
if(i>719){
	if(j==number){
		//USART_OUT(USART1,"will send pic%d,sizeof(pic)=%d\r\n",j,sizeof(pic));
		myudp_send((char *)pic,sizeof(pic));
		break;
	}
	j++;
	pic[0]=j;
	i=0;
}

上位机用QT编写,新建一个QImage,设置格式为Format_RGB16,然后把从下位机通过网络发送的包写到数组pic中相应的位置即可

image=QImage(pic,320,240,QImage::Format_RGB16);

当然,我QT也是现学现用,只求把功能实现了,有许多要改进的地方,勿怪

你可能感兴趣的:(ucos)