STM32+ov7670网络摄像头+uip+udp+http协议+ENC28J60网口+SIM短信模块【硬件项目】

使用环境(蓝色粗体字为特别注意内容)
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,谢谢大家!

猜你喜欢

转载自blog.csdn.net/pang9998/article/details/88871950
今日推荐