基于STM32的无线图像实时采集传输系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 116

利用STM32单片机为控制芯片驱动OV2640模块,实现图像采集,通过wifi 模块把采集的图像通过TCP 协议传输给移动端手持Android 设备。

Qt 开发软件通过socket 接口编程设计出了app 用于图像实时显示OV2640模块采集的图像。

实验结果表明图像传输稳定,可以实现实时的无线图像传输。

OV2640模块可以和其它设备组合,对未来图像类设备有很好的应用潜力。

图像传输应用广泛,在安防设备上可以通过摄像头监控家门、小区等,对犯罪侦查、丢失物品寻找等起到很大作用。

在人工智能领域,需要识别特定事物,比如人脸识别、物体识别等,需要采集很多的图像样本,离不开图像采集技术。

在没有线的束缚下,摄像头和显示终端分离,无线图像传输在日常生活中也有很大的实用性,例如可以在忙着洗衣做饭的时候监控小孩的实时举动,可以查看特定角落的实时画面。

本文探索了图像监控的关键技术图像采集和传输,并通过wifi 模块由TCP 协议实现无线图像传输。

在没有线的束缚下,摄像头和显示终端分离。

在wifi 信号覆盖范围内可以实时探索看不到的或者人类不方便探索的角落。

1 无线图像传输系统
无线图像传输系统分为图像采集部分、数据传输部分和终端显示部分。

三者关系如图1所示。

的滤波器,逐行排列,形成方形采集阵列,BG/GR 形式构成的像素大约可以达到200w 个。

在采集光的时候也是逐行扫描采集,直到扫描完成。

其中内部集成了数字图像处理模块,可以直接输出JPEG, GRB422和YCbCr 等数据格式。

Ov2640模块使用的是正点原子的A TK-OV2640摄像头模块。

它共有18个引脚。

其中最重要的是SCCB 总线和HREF 行同步线,VSYNC 场同步线和8位并行数据线。

SCCB 总线和I2C 总线类似用于单片机向Ov2640模块发送控制命令。

在图像采集开始之后,模块会产生采集输出时序。

HREF 输出高电平时,根据时钟进行像素数据的读取,HREF 线变为低电平时读取的数据无效,循环采集直到采完一帧为止。

当一帧数据采集完之后HREF 会一直为低电平,VSYNC 场同步线一定时间后会翻转一下电平,在配置单片机的时候可以通过寄存器配置帧中断,用来处理采集的数据。

在Ov2640模块已经加入了12Mhz 晶振给Ov2640提供时钟。

这样就不需要单片机产生时钟送给它了。

2.2 STM32相关接口
STM32f407内置了DCMI 接口可以配置寄存器通过DMA 自动把采集的数据保存在特定内存中。

对于Ov2640需要把数据时钟和数据采集线等连接到STM32f407的DCMI 接口上,SCCB 接口线连
接到特定引脚并用软件实现控制。

Wifi模块采用有人物联网公司的USR-WIFI232-s 模块。

该模块工作于单频2.4Ghz 频段,低功耗工作。

有丰富的AT 指令集可以配置。

基于STM32的无线图像实时采集传输系统
中南民族大学 陈国栋
图1 系统整体框架
OV2640模块由STM32f407单片机驱动控制,进行图像的采集,并且通过wifi 模块把采集到的图像传输给android 设备上,wifi 模块配置成AP 模式,配置模块为服务器,android 设备作为客户端连接上wifi模块上之后通过socket 接口来进行通信,接收数据,解析图片并显示。

2 无线图像传输硬件组成
2.1 OV2640模块
Ov2640是具有200w 像素的CMOS 传感器,每个像素由BG/GR 形式
通过AT 指令可以配置模块,提前配置好模块串口波特率为115200bps ,设为AP 模式再配置成服务器,设置好ip 地址和端口号等。

每次连接好wifi 之后直接通过串口就可以使用收发数据了。

STM32单片机和wifi 模块直接通过串口通信。

单片机配置串口为115200波特率和wifi模块的波特率相匹配。

3 相关概念的研究
3.1 jpeg图像格式研究
通过SCCB 总线配置ov2640模块,可把原始数据自行编码成jpeg 格式的文件,可以把图像压缩到最小,压缩率大,很适合网络传输,是大众常用的图片格式。

jpeg 格式压缩需要经过几个重要的过程。

首先把原始图像做空间变换,以便进行降采样。

采样之后把图像分为几个部分,每个部分进行DCT 变换,然后把每个变换后的
部分块进行滤波,最后再进行游程编码和霍夫曼编码,最终得到编码之后的文件。

根据jpeg 文件格式的一些特征,单片机用SOI 标记码作为图片的开始,EOI 标记码作为图片的结束。

• 117

从jpeg编码文件恢复到静态图像大体是把jpeg编码反过来执行,需要进行霍夫曼解码,游程解码,反扫面排序,反量化,反DCT变换,升采样和色彩空间变换等步骤。

Qt软件Qimage类的fromData方法内部封装反解码算法,可以把jpeg文件存储格式的数据自动反解码为图片去显示。

3.2 TCP/IP模型的研究
网络之间的通信,最常用的网络体系是ISO/OSI模型和TCP/IP 模型。

国际标准化组织ISO一早就研究建立网络体系,但是后来在因特网发展迅速的环境下,还是TCP/IP模型被世界广泛的应用。

TCP/IP模型的链路层是在物理介质基础上实现相邻节点的数据流传输并差错检测。

这一层常用的设备是集线器、中继器和交换机等,通过主机的MAC地址交换机可以判断数据的来去,实现局域网内主机间的数据传输。

网络层是主机之间通过IP地址传输数据。

当主机在接入网络后,会被分配IP地址,实现不同局域网主机之间的数据传输。

网络层还会通过算法帮助传输的数据选择到目的主机的最佳路径,防止走丢。

常用设备是路由器。

传输层主要把应用层和网络层的数据进行处理,处理传输错误,确保数据的准确等,实现两个进程之间的通信。

TCP/UDP协议正是这一层常见的协议。

应用层面向用户提供了很多服务协议,如HTML协议、ftp协议等。

socket接口是TCP/IP通用的API,可作为两个应用程序之间通信的接口。

两个应用程序通过套接字通信需要分别设置成服务器和客户端。

然后建立连接。

服务器端先创建监听套接字,绑定自己的ip地址和端口号。

监听客户端的连接,当客户端有请求的时候,就会选择需要连接的客户端请求,需要经过连接的三次握手来确认请求。

然后可以取出通信套接字用于通信。

在结束的时候也是要经过四次握手就断开socket的连接了。

客户端连接服务器需要先创建一个通信socket接口,可以选择的绑定ip和端口然后连接服务器。

经过和服务器三次握手之后就可以相互通信了。

最后也是经过四次握手结束本次通信。

4 无线图像传输软件设计
4.1 ov2640初始化
通过SCCB总线控制的Ov2640模块,其的时序和I2C类似,通常用一个时钟线和一个数据传输线就可以传输数据。

SCCB时序有分为开始,数据传输,停止,应答。

单片机可以配置GPIO的寄存器使用两个引脚进行控制,开始传输的时候,要在数据线高电平的时候,时钟线给一个下降沿,在结束的时候,要在时钟线为高电平时,数据线给一个上升沿,在数据传输的时候,要在时钟线低电平时变化数据的电平,高电平时当前位就会传输出去,数据接收也是要在时钟线高电平时,把当前位读入进来。

STM32f407单片机内部有DMA,DMA可以不占用CPU资源自行的传输数据。

可以让CPU 去做其它事情。

设置DMA的触发源为DCMI并把内部存储位置作为数据流向,在DCMI接口采集到一定的数据后,DMA就把数据存储到对应内存中。

4.2 wifi模块初始化
Wifi模块在每次上电需要复位一下。

先初始化单片机相关接口引脚,然后要设置单片机串口波特率和wifi模块相匹配。

4.3 数据传输
程序中通过DMA进行数据传输,把数据保存在一个数组中,在一帧数据采集完成调用中断函数,当前状态为采集状态时,关闭DMA,停止DMA传输图像数据,标记当前状态为传输到上位机。

在主程序中把数据按照自定义的协议格式通过wifi模块上传到上位机。

数据包分为包头、分割字段和数据三部分组成。

数据包包头以“image”作为传输数据的开始,后面是特定的两个字符的分割字段,我选用‘/r’‘/n’两个字符作为分割字段。

数据为一帧图像,由单片机进行处理。

发送包头和分割字段后,单片机开始寻找的jpeg文件的SOI标记码的位置开始通过串口进行传输,其余数据为无效数据可以舍去。

接着一直传送图像数据直到传送了EOI标记码为止。

这样可以确保在包头和分隔符之后正好是一帧图像。

之后标记当前状态为传完状态。

等待其他函数开启DMA继续传输图像数据等处理操作。

4.4 上位机软件简介
终端设备是基于Qt编写的人机交互和数据处理系统。

首先配置好安卓开发环境,下载相应的JAVA jdk,sdk和ndk并在Qt中设置好对应的位置。

Qt中构建套件选择android for arm64-v8a
,就可以把程
下位机图像传输 上位机图像接收
图2 上位机和下位机数据处理流程图
• 118

序运行到平板上了。

4.5 人机交互界面设计
Qt 内部集成Qt 设计师界面,开发者可以通过选择特有部件进行ui 界面设计。

用QstackedWidget 类的对象可以设置多个界面,运行起来只需要调用该类中的setCurrentWidget()方法可以切换设置的界面,这里设计两个界面。

第一个界面用于TCP 连接,一旦连接成功就切换到第二个界面,在其中放置QLabel 类的对象用于图像显示。

4.6 Qt TCP的连接
上位机和下位机通过TCP 协议进行无线数据传输,需要建立socket 连接。

Qt 作为客户端连接已经作为服务器的wifi模块。

利用信号与槽机制,在Qt 编写的客户端程序连接上服务器的时,槽函数会被调用,在槽函数中切换图像显示页面。

4.7 上位机数据解析和图像显示程序
在socket 接口数据到达的时候,Qt 框架会发射readyRead 信号,通过信号与槽机制,在槽函数中读取所有的数据并进行数据解析。

根据协议先找到包头,再寻找图片的SOI 标记码和EOI 标记码,把找到的一帧数据保存在QByteArray 类的对象中,然后调用QImage 类中的fromData ()方法,把字节阵列保存的jpeg 数据解析成图像。

最后在按一定的时间周期性把图像显出来。

图像传输和解析数据的流程图如图2所示。

5 实验测试
Wifi 模块作为服务器,单片机传输的数据可以通过串口/
网络调试
图3 传输效果
助手的进行初步测试。

把调试助手网络配置为TCP 客户端,输入对应wifi 模块的ip 地址和端口号,可以查看传输到的数据。

由于TCP 连包现象,每次收到的数据数量都不一样,但是上位机协议是把所有的数据读取,通过查找的方式解析的,所以并不影响数据处理结果。

通过Qt 编译程序,把app 部署到android 平板上。

进入app 会显示初始界面,当连接好wifi 模块的时候就可以进行实时图像传输和显示了。

串口/网络调试助手的数据测试和app 界面如图3所示。

实验结果可以实现采集的图像在android 设备上实时和稳定的传输和显示。

结语:通过ov2640摄像头、wifi 模块、平板app 组成的无线图像传输系统,可以很好的传输实时画面,摄像头模块未来发展越来越小,清晰度越来越高,把他安装在不同的设备会给人们带来很多的价值,大到移动无线巡逻小车,小到人体内镜检查。

无线通信还可以通过物联网模块传输,可以实现远程无线实时传输,为安防、巡逻、探索领域提供广阔的发展空间。

图像采集传输技术也为人工智能领域新模式打下基础。

可以通过人工智能算法,实时采集实时学习和训练,并可以实时识别特定目标。

手持终端可以解放固定的电脑,在一定范围内随时查看到传输到的图像。

在未来有很大的发展空间。

作者简介:陈国栋(1994—),男,河南中牟人,硕士,研究方向:传感器信号处理。

通讯作者:王晓磊(1984—),讲师,供职于中南民族大学电子信息工程学院。

相关文档
最新文档