使用环境(蓝色粗体字为特别注意内容)
1、软件环境:Keil MDK 5.15,QT开发环境
2、硬件环境:STM32F103C8T6最小系统,OV7670摄像头模块,ENC28J60以太网模块,SIM卡模块GPRS模块,各种传感器,OLED显示屏。
最近在搞搞STM32网络摄像头的研究,上次用OV2640做了一个摄像头的项目,这次介绍一个更加完善的项目,也是一个关于摄像头的项目,不过这次是通过网络远程传输到上位机,达到一个远程监控的目的,下面我们来看一下。
首先介绍一下大概功能,首先通过STM32F103C8T6搜集各种传感器数据,包括“烟雾传感器、火焰传感器、人体传感器”等等以及通过OV7670摄像头采集图像数据,这里需要说明一下,这个OV7670比较坑爹,一定一定一定要买带FIFO的OV7670,重要的事情说三遍!否则会很惨的,OV7670摄像头速度太快,不是一般的单片机能够驾驭的,所以需要FIFO缓冲区!其中STM32单片机上面运行了UIPweb服务器,用来供Web浏览器远程访问的,同时通过以太网模块使用UDP协议帧将图像数据通过网络传输到远程的上位机,上位机使用QT编写。同时,报警数据可以通过GSM模块发送到指定手机号上面。
下面来看看实物图:
看起来好乱~~~~,但是效果不错哦,下面,我们来看看系统运行效果。
1)上位机
2)Web浏览器客户端
下面贴一下关键的单片机机代码
int main(void)
{
RCC_Configuration(); //系统时钟设置
OLED_Init(); //初始化OLED
OLED_Clear();
welcome();
HC_GPIO_INIT(); //初始化人体感应传感器
MQ_GPIO_INIT(); //初始化气体传感器
NVIC_Configuration();
GPIO_Configuration(); //IO口初始化
Usart1_Init(); //串口1初始化
InitGSM();
led_init();
/* 配置systic作为1ms中断 */
if (SysTick_Config(72000)) //时钟节拍中断时1ms一次 用于定时
{
/* Capture error */
while (1);
}
SPI1_Init();
FIFO_GPIO_Configuration();
Delay(2); //延时10ms
disableJTAG();
FIFO_WE_H();
while( 0 != Sensor_Init());
/* 初始化网络设备以及UIP协议栈,配置IP地址 */
InitNet();
uip_listen(HTONS(1200));
uip_listen(HTONS(80));
delay_ms(1000);
OLED_Clear();
while (1)
{
UipPro(); //中断触发读取网络接收缓存
eth_poll(); //定时查询TCP及UDP连接收发状态 ARP表更新, 并响应
led_flash();
if (dht11_read_data(tempHu) == 0)
{
showTemHu(tempHu);
}
if(HC_GET_INPUT())
{
showHuman(1);
human = 1;
SendSmsPduHuman();
}
else
{
showHuman(0);
human = 0;
}
if(!MQ_GET_INPUT()) //气体异常输出低电平
{
showGas(1);
gas = 1;
SendSmsPduGas();
}
else
{
showGas(0);
gas = 0;
}
}
}
这个项目比较大哈~~~继承了各种功能,捣鼓了大半个月终于搞定,这里记录一下。大家有兴趣可以联系
相互学习,探讨。 我是pang9998,谢谢大家!