STM32的GPRS农田多点图像传输系统设计
扫描二维码
随时随地手机看文章
摘要:设计了基于32位STM32F103VET6微控制器的农田多点图像传输系统,重点介绍了其软件和硬件的设计过程。在Visual C++6.0平台,运用Windows socket编写PC端多线程的服务器程序,对农田多个位置的监测终端设备进行图像传输、接收和存储。该系统实现了图像从监测端到PC服务器的传输和保存等功能。农田测试结果表明,该系统运行稳定,图像传输速度较快。
引言
农田图像的监测和传输对于农田管理具有指导意义,其中的农田作物图像含有的信息量大、形象直观,对农田合理和高效管理起着重要作用,因此研究该项技术十分必要。传统的农田作物图像传输往往利用总线结构或以太网网络等有线方式进行图像传输,光纤常用于远距离的图像传输,这些有线的图像传输方式都不灵活,而且在许多条件恶劣的地方,由于农田需要监控的区域广、监控的农田作物繁多,需要花费大量人力、物力。随着图像处理和移动网络传输技术的快速发展,无线的图像传输方式得到技术人员的青睐。GPRS网络具有时刻在线、网络架构成熟、以流量计费等优点,可根据用户需要进行农田作物图像数据量间歇地传输。SIM900A模块是面向中国的GPRS模块,具有双频信号。根据GPRS技术特点,结合农田图像多监测点的需求,研究和设计了基于SIM900A模块和STM32F103VET6微控制器的农田多点图像传输系统,结合网络套接字通信软件技术,实现了对农田多点图像的远程监测和图片的本地存储。
1 系统总体设计
多点图像传输系统以STM32微控制器为主控芯片,结合网络套接字通信软件技术,实现图像处理压缩和远程传输两大功能。本设计用STM32F103VET6(以下简称STM32)芯片控制CMOS图像传感器OV2640获取图像,OV2640能够通过硬件电路实现JPEG压缩算法,在不影响作物观测效果的前提下减小了图像数据量,为图像的无线传输提供了方便。
图像传感器采集模拟信号转换成相应的数字量,通过8位并行口发送给STM32,STM32将数据发送给SIM900A,数据经SIM900A打包成TCP/IP数据包,然后通过无线网络运营商的网关服务器,接入Internet,将采集到的图像数据发送给服务器。本设计利用具有公网固定IP地址的微机作TCP服务器。系统总体结构设计如图1所示。
2 监控系统硬件设计
通过STM32控制OV2640采集农田图像,并通过GPRS模块把数据传输给服务器,系统硬件电路主要包括以下几部分:图像传感器模块、微控制器模块、GPRS通信模块,电源管理模块。图像采集由OV2640传感器完成,负责采集农田作物的图像,并将模拟数据转换成数字量,微控制器通过8位并行数据口接收图像数据。GPRS通信模块负责把微控制器发送来的图像数据通过天线传入Internet,电源管理模块为系统提供稳定的电源。
2.1 微控制器模块
STM32F103VET6是高性能、低功耗的32位微控制器,8 MHz的外部晶振经倍频后时钟频率可达到72MHz,丰富的外设资源、大容量的FLASH和SRAM存储器可以满足系统设计要求,其较强的运算能力可以保证大批量图像数据快速传输和处理。SPI、UART等丰富的串行接口使得控制器与外部芯片数据交换更加自由灵活。STM32接口的PC0~PC7作为OV2640并行数据交换口,PA9和PA10组成的UART1作为控制OV2640的信号口使用,PA2和PA3组成的UART2与SIM900A进行串口通信。
2.2 OV2640图像传感器工作原理
为了采集到清晰的农田作物图像,Omnivision公司的OV2640型图像传感器最高图片输出分辨率为1600×1200。此传感器内部集成了JPEG压缩电路,可以通过编程实现原始的200万像素图片的JPEG压缩,使得图像数据量大量减少,便于GPRS网络传输,功耗也随之降低。
STM32通过PC0~PC7端口与OV2640的8位数据线D0~D7通信,行同步信号HREF、像素同步信号PCLK,以及场同步信号VSYNC和SCCB总线的SDA和SCL信号,用于对传感器设备进行图像采集的过程控制。图像传感器接口电路设计如图2所示,图2中AVDD2.8V和DOVDD2.8V由3.3V电源通过LM1117—2.85芯片得到;AVDD2.8V与DOVDD2.8V通过0 Ω电阻相连,此方法减少了相互干扰,XCLK由24 MHz的有源晶振输出提供信号;DVDD1.5V由LM1117—1.5输出得到74LVC1G00是与非门电路。
HREF是高电平有效,场同步信号VSYNC是低电平有效。当引脚VSYNC为高电平时,表示一帧数据已经准备好;当由高电平变成低电平时,表明开始传输一帧图像数据。为了得到有效的像素数据,需要两个中断信号,捕获场同步VSYNC的信号送入中断引脚PB8,捕获HREF和PCLK的与非信号输出到PB13中断引脚,使得在行信号无效时不输出像素同步信号,用其输出信号作为像素数据同步。OV2640的工作模式是由内部寄存器确定的,其与外部的接口为SCCB总线,STM32通过PA9和PA10引脚模拟SCCB总线时序读写OV2640寄存器,设置其工作模式,本设计设置了输出图像的分辨率、亮度、格式等。STM32工作在主模式,对工作在从模式的OV2640内部的寄存器进行配置,配置完成后经一段图像采集时间后,OV2640即开始按照配置的模式工作。本设计图像输出格式为JPG,分辨率为640×480。
2.3 图像处理软件设计
图像处理程序负责OV2640初始化配置,以便实现图像的采集功能。通过检测场同步信号VSYNC判断一帧图像的起始位置,程序中设计128个内存单元,可以使系统运行流畅。中断程序检测像素同步信号PCLK来采集图像数据,当PCLK为下降沿时,读取D0~D7口数据,并存入内存,等待发送信号的到来,这就完成了图像的采集与发送。
图像采集控制程序是基于OV2640指令集编写的。init()函数用于设置图片大小、通信波特率和图片压缩率等图片参数,初始化的时候务必关闭串口1,start()函数用于发出拍照命令,get()函数完成获取图片信息的功能。
2.4 GPRS通信模块
SIM900A是2频的GSM/GPRS模块,工作频段为900 MHz或1800 MHz,采用SMT封装,SIM900A型针对中国地区。SIM900A性能稳定、体积小、支持标准和扩展的AT指令。SIM900A还支持GPRS class8/class10和CS-1、CS-2、CS-3和CS-4的GPRS编码格式,可以低功耗实现语音、SMS、数据的传输。SIM900A和STM32之间的通信主要是通过端口RXD与STM32上的UART2~TXD,TXD与UART2~RXD之间的数据交换来完成。其中,SIM900A上的UART2~TXD是发送串行数据口,UART2~RXD是接收数据口。
STM32通过AT指令和SIM900A模块进行通信,这些指令是以普通字符串的形式传输的。每个AT命令执行后,模块都会反馈状态信息,表明命令执行的结果,方便程序员了解程序的执行情况,要用到AT扩展指令中的TCP/IP型。
2.5 GPRS通信模块与SIM卡的连接
SIM卡具有5个引脚,分别为SIM卡时钟信号、电源引脚、数据引脚、状态引脚和复位引脚。SIM卡的电源电压为1.8 V,SIM900A模块对其供电。
2.6 电源管理
STM32的典型供电电压是3.3 V,本设计采用9 V电源供电,要提供9~3.3 V电压转换,以LM2576-ADJ芯片为核心的电源电路可为STM32提供3.3 V的电压。LM2576-ADJ最大可提供2 A的电流。
SIM900A模块典型供电电压值为4 V,天线发送信号时的瞬时最大电流可达到2 A左右,电流增大会使SIM900A电压突降,影响系统稳定性和发射功率。采用低压差的MIC29302电源芯片和电源引脚并接大容量电容可以解决此问题,回差电压低于0.3 V,可提供高达2.8 A左右的电流,能够满足SIM900A峰值电流2 A的要求,9 V电源符合其输入电压范围。
3 监测端图像发送软件设计
在Keil uVision4.12集成环境下,开发了监测端图像发送程序,首先进行各模块的初始化工作,使能STM32相关中断,接着STM32控制OV2640拍照和图片的压缩,压缩完成后,接着将流式数据通过8位并口存入SRAM为10 428字节的数组中。设置串口2的波特率,并将流式数据通过串口2发送至SIM900A,STM32同时控制SIM900A通过GPRS网络连接TCP服务器,连接过程中首先初始化网络,即激活移动场景,接着查询附着是否成功,否则手动附着,并向Internet上具有设定IP地址的服务器通过AT+CIPSTART指令申请建立连接,将AT+CIPSTART指令返回的IP地址和端口号存放到一个buff中,然后将这个buff里的内容写入到串口2中。如果之后能够读取到返回值“CONNECT OK”,就表示TCP连接已经成功建立,失败则收到“CONNECT FAIL”;TCP连接建立成功后,设置协议为TCP,SIM900A请求发送。
接着使用AT+CIPSEND命令发送信息,监测端将图片分解成若干个数据包,按照GPRS编码格式组建数据包,将数据包发送到服务器,需要先发送数据包头,为了保证图片传送的完整性,每次在发送下一个数据包之前,需等待上个包发送成功的回复,若发送成功返回指令“OK”,否则返回“FAIL”,系统重新发送,以确保数据包被成功交付。
最后等图片信息包发送完毕后,发送AT+CIP-CLOSE指令关闭连接。此AT命令没有返回值,直接将该指令写到串口2中,如果检测到“CLOSE OK”信息,就表示TCP连接已经被关闭。
服务器端的监听口接收TCP数据包,由于采用多线程设计,多个点的图像监测设备可以同时发送图像数据到服务器。按程序流程给出进行TCP传输时用到的AT扩展指令和相关缓存区定义。
4 多线程的服务器端软件设计
基于Visual C++6.0平台开发了服务器端对话框形式的程序界面,服务器端程序设计主要运用C/S架构的套接字,服务器端程序主要包括3大部分:数据流接收、数据文件处理并显示和图片的硬盘存储。主线程和用户子线程分别承担不同的任务:主线程负责用户子线程的创建、界面事件的响应和图片文件存储等工作。监测子线程主要完成发送开始采集命令和与监测端进行通信的功能,接收完图像信息后在界面窗口中显示。各线程运行时相互独立,因此每个监测端与服务器的数据传输互不影响。为了防止出现GPRS网络连接中断的情况,程序中采用了断点续传的补救方法,保证了数据传输过程的准确和可靠性。
在单个监测子线程设计中,首先创建监听的socket(),用于接收来自网络端口的数据流,并且分配足够大的缓冲区用于存放接收到的数据包。在图片接收过程中,服务器接收的是分包数据流,根据数据包的包头进行数据包的排列,并使用校验位进行数据包校验。当数据包接收完成后校验完好性,然后将数据包保存到一个文件中,最后调用OpenCV中的库函数完成对生成的文件进行解码显示。在硬盘上按照系统要求的文件名建立3个文件夹,即可自动存入3个不同地点的农田图片。监测端程序如图3所示,服务器端单个监测子线程的工作流程如图4所示。
5 系统测试与分析
本设计通过SCCB总线设置OV2640的图像大小为JPEG压缩格式,即分辨率为640×480,经过JPEG压缩后数据量从185 KB降低至17 KB左右。样机制作完成后经过多次测试,传输速率可达10 Kbps,传输中存在断点情况,续传功能发挥了作用。图像文件发送到服务器端时间测试结果如表1所列。
结语
本文设计的基于STM32的GPRS农田多点图像传输系统,具有体积小、监控范围大等优点,克服了现场布线成本高、环境恶劣等难题,为农田图像监测和传输提出了一种解决方案。由于GPRS通信流量资费、速度和网络质量的限制,系统传输的图像分辨率不是很高。随着4G网络技术的发展,该系统的架构很容易升级到4G网络进行远程的语音、高清图像传输。