标题: 分享个用STM32F429做的网络摄像头(含上位机下位机代码) [打印本页]
作者: shanji 时间: 2019-1-2 18:30
标题: 分享个用STM32F429做的网络摄像头(含上位机下位机代码)
2019年的第一天上班,来点干货。
先来看看硬件资源:
主控是STM32F429IG,1MB flash,256KB RAM;外扩32MB SDRAM,用于暂存camera 输出的JPEG数据和LCD显存,摄像头这块使用DCMI传输数据。
简单实现原理:
以太网使用lwip,netconn API编程,这种编程方式相比RAW 比较简单,只是需要OS的支持;然后,板子当服务器,PC当客户端,当建立连接后,服务器将采集到的摄像头数据发送到客户端显示。
现象:
ov5642
ov2640
上位机用的是labview2015。
关键代码:
系统(ucos_ii)中建立了两个任务,task1用来处理服务器的一些周期性任务,task2用来发送JPEG数据流。
/**
* @brief TCP服务器任务
* @param
* @retval None
*/
void TCP_Server_task(void *arg)
{
err_t err=0;
err_t recv_err;
struct netconn *server_coon; //服务器连接
struct netbuf *recvbuf; //接收数据netbuf指针
struct pbuf *bufptr; //pbuf数据缓冲区指针
server_coon = netconn_new(NETCONN_TCP); //创建一个TCP链接
netconn_bind(server_coon,IP_ADDR_ANY,TCP_SERVER_PORT); //绑定端口
netconn_listen(server_coon); //进入监听模式
server_coon->recv_timeout = 10; //禁止阻塞线程 等待10ms
while (1)
{
err = netconn_accept(server_coon,&client_conn); //接收连接请求
//printf("\r\nerr=0x%x\r\n",err);
if (err == ERR_OK) //正确说明有客户端联入
{
while(1)
{
if((recv_err = netconn_recv(client_conn,&recvbuf)) == ERR_OK) //接收到数据且正确
{
bufptr=recvbuf->p; //得到数据指针
memcpy(Data_buff,bufptr->payload,bufptr->tot_len); //拷贝数据
Data_buff[bufptr->tot_len]='\0'; //加入结束符
if(!memcmp(Data_buff,Video_Start,9)) //开始采集
{
Video_flag=1; //标志位值1
CamFrame=0; //帧率清零
cam_start(); //开始采集
RTC_ITConfig(RTC_IT_WUT,ENABLE);
}
else if(!memcmp(Data_buff,Video_Stop,8)) //关闭采集
{
Video_flag=0; //标志位值0,自动采集完最后一帧,自动停止
RTC_ITConfig(RTC_IT_WUT,DISABLE);
}
netbuf_delete(recvbuf); //清除缓冲netbuf
}
else if(recv_err == ERR_CLSD) //关闭连接
{
netconn_close(client_conn); //关闭连接
netconn_delete(client_conn); //删除连接
break;
}
}
}
}
}
/*********************分割线*************************/
/**
* @brief 发送数据任务
* @param
* @retval None
*/
void CAM_Send_task(void *arg)
{
u16 len,i,temp;
u8 *ptr;
u8 flag;
while(1)
{
if(Buf_DoutPtr!=Buf_DinPtr)
{
len=(*Buf_DoutPtr);
ptr=(u8 *)(Buf_DoutPtr+1); //指向CAMbuf
flag=0;
for(i=0;i<len;i++)
{
if((ptr==0xFF)&&(ptr[i+1]==0xD9)) //找数据尾
{
ptr[i+2]='\r';
ptr[i+3]='\n';
temp=i+4; //有效数据长度
flag=1;
break;
}
}
if(flag)
{
netconn_write(client_conn ,ptr,temp,NETCONN_COPY); //发送数据
CamFrame++; //帧率+1
}
Buf_DoutPtr+=BUFF_SIZE;
if(Buf_DoutPtr==Buf_EndPtr) Buf_DoutPtr=Buf_StartPtr; //到最后一个了
//回到开头
}
OSTimeDly(1);
}
}
帧率在15fps左右。
测试源码和上位机全部资料51hei下载地址:
作者: 12qwaszx 时间: 2019-1-5 10:15
高手高手啊
作者: wshangm 时间: 2019-1-7 09:59
这个不错,技术牛人
作者: WFX777888 时间: 2019-1-7 10:49
谢谢分享资料
作者: feitian227 时间: 2019-1-7 21:05
厉害,是不是可以当作网络摄像头使用啊?
作者: aing123 时间: 2019-1-8 13:31
好厉害!!
作者: aing123 时间: 2019-1-8 13:42
rar里面的文件用什么软件打开的?
作者: zxianyu 时间: 2019-1-8 18:41
谢谢楼主分享
作者: wuyuwangluo 时间: 2019-1-14 22:51
大神 厉害
作者: shanji 时间: 2019-2-20 11:22
本帖最后由 shanji 于 2019-2-25 14:26 编辑
有没有人会搞网页端的摄像头画面显示?打开浏览器输入ip就能显示
作者: 1439095252 时间: 2019-3-18 21:46
牛人,老厉害了
作者: 轩辕楼阁 时间: 2019-4-6 21:28
学习了
作者: Loomin 时间: 2019-4-19 22:37
这个需不需要将板子与电脑连接啊,还是无线传输给电脑
作者: ealoo 时间: 2019-4-20 17:15
刚入门,进来学习
作者: m182892 时间: 2019-4-23 18:26
谢谢楼主分享
作者: seasonli 时间: 2019-5-5 15:09
尝试一下,不知道f407可不可以实现
作者: 马子华 时间: 2019-5-6 15:24
高手在这里呀!
作者: qqhuacong 时间: 2019-5-7 20:14
牛了,刚刚给予别人下载。
作者: zhouwei0815 时间: 2019-5-8 14:14
东西是不错 就是STM32不会 可惜啊
作者: Scene6 时间: 2019-6-4 09:34
厉害厉害
作者: QAZ1235888 时间: 2019-7-18 11:35
这个好像不错,收藏了
作者: loki1 时间: 2019-7-18 21:59
超赞,收藏一波
作者: 绝望大白鼠 时间: 2019-7-22 15:51
菜鸡表示看不懂
作者: LBJ9999 时间: 2019-7-22 17:27
厉害厉害
作者: oyfmzyf 时间: 2019-8-19 09:43
十分感谢,正好在弄这方面的东西
作者: zhengguo_wang 时间: 2019-8-19 10:16
非常感谢,这个很厉害
作者: szwsu 时间: 2019-8-26 16:10
高手,这东西不错,可惜没有积分下载了
作者: shanji 时间: 2019-10-17 13:36
慢慢攒
作者: jkfyt 时间: 2019-10-18 19:51
学习了~
作者: lushiyi 时间: 2019-10-21 19:26
真的是很厉害啊
作者: dnqs 时间: 2019-10-22 13:50
谢谢楼主分享
作者: lushiyi 时间: 2019-10-25 00:40
谢谢分享资料!
作者: saya0769 时间: 2019-10-25 09:17
stm32f401可以吗?? 卡吗
作者: kxsen 时间: 2019-10-25 13:34
arm如同跑车,我还是开自行车算了。
作者: 13452 时间: 2019-11-8 17:03
谢谢老板
作者: 欢迎新会员 时间: 2019-11-8 21:08
楼主无私奉献真乃豪情万丈,谢谢分享
作者: crystaldoor 时间: 2019-12-26 09:13
谢谢老板,受教了
作者: jinniuxing88888 时间: 2020-1-5 10:54
谢谢分享,正需要这方面的资料
作者: ahtyqq789 时间: 2020-1-5 20:45

技术大佬
作者: ZZD12306 时间: 2020-1-15 15:35
技术大佬
作者: llm4109 时间: 2020-3-27 15:03
已下载.学习中...
作者: GodWorks 时间: 2020-3-30 11:08
谢谢楼主分享
作者: zbl 时间: 2020-3-31 21:30
视频卡顿不?
作者: wsy06 时间: 2020-4-1 10:17
厉害!51有你更精彩
作者: 3040001835 时间: 2020-6-17 18:23
高手高手,不知道传输的是FFD8......FFD9数据吗
作者: 3040001835 时间: 2020-6-17 19:27
我现在遇到了一个基本同样的问题,
我是用的正点原子的stm32f429做下位机,摄像头用的ov5640,现在他上传的格式也是jpeg图像,也是tcp传输,单片机做服务器,pc做客户端,上传图像的格式是FFD8开头,FFD9结尾,我也是用labview做的上位机,
我是挨个找开始为结束位,然后把他们存成jpg图像,然后再显示
但是这种基本不能传输,显示第一张数据的以后就直接卡掉了,卡的直接自动关掉程序
我用您做好的上位机,不能显示,可能是我们的传输数据有些不同
我已经弄了好久了,还没弄好,非常绝望,希望能得到您的指导,感谢
作者: zhangyouxiu 时间: 2020-12-7 17:17
大佬大佬,有了TCP的,看看我能不做个UDP的
作者: SJ-123 时间: 2020-12-9 06:02
这应该就是网络摄像头的基础版吧,值得学习探讨!
作者: ajdumyd 时间: 2020-12-11 22:16
正好有个STM32的板子。
作者: jvsoft 时间: 2020-12-12 21:22
很好资料。值得学习
作者: zzh1326423948 时间: 2020-12-15 17:36
模仿着做了一个,作者计数确实可以。
作者: iYoutudou 时间: 2021-2-4 11:41
楼主帅呆了,我要向楼主学习,谢谢分享
作者: 林小获 时间: 2021-4-17 15:15
菜鸡表示看不懂
作者: 曾现路 时间: 2021-4-19 10:28
跟着楼主学习一下!
作者: rayin 时间: 2021-4-20 13:40
我也去买个板子搭着搞搞
作者: gg_sockie 时间: 2021-4-28 17:14
牛叉啊~~
作者: lihui2558 时间: 2021-7-30 12:22
这个帧数可以达到多少
作者: ganhui1300 时间: 2021-8-5 12:19
使用网线连接使STM32图像采集板,然后连接到路由器?PC访问路由器再访问STM32图像采集板?
作者: lyMarvin 时间: 2021-8-21 19:23
还有上位机下位机代码,楼主厉害
作者: zzh999 时间: 2021-11-27 20:45
真是很及时的土货。
作者: hyjxxy 时间: 2022-4-28 16:39
厉害,技术牛人!
作者: 尚封竹YL 时间: 2022-5-1 14:28
为什么大学老师不像大佬一样教我们项目呢
作者: abcd44 时间: 2022-9-16 15:46
大学指导的使命是把你领进门,大佬是负责带你飞的,如果你连门都没进你就和大佬交流是对大佬的严重不尊重,搞得老版还真的以为大佬能搞的东西整个实习生就分分钟搞定了,如果大学指导给你整天整些高端的你会觉得指导整天就会装逼,连个学生都教不会,并且测验铁定不过,分分钟将你学习的信心打击到十八层地狱中

作者: yanhy2000 时间: 2022-9-23 14:35
大佬好强,我也想复现一个,只可惜手头没高性能的32
作者: mcu_samkan 时间: 2022-9-24 11:07
这个要能处理简单的http请求。然后将视频信息的数据包装成http视频流的形式发送给请求方就可以了。直接用单片机来进行这个工作,可能有点难为单片机了,可以找个上位机(arm 戓 pc),上位机建立服务器与单片机通信来实现。
作者: 静仪 时间: 2022-12-9 17:17
很不错的设计,感谢分享,给力!
作者: Longan.Wang 时间: 2022-12-13 14:27
资料不错,顶一个
作者: bjfxxc 时间: 2023-5-18 17:21
技术大牛,这个厉害。
作者: wk111 时间: 2023-5-20 12:15
arm如同跑车,我还是开自行车算了。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |