打印

Linux实现智能车库程序源码

[复制链接]
205|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
摄像头模块








0.png (34.18 KB, 下载次数: 12)


下载附件

保存到相册




2018-11-22 01:36 上传














0.png (7.86 KB, 下载次数: 12)


下载附件

保存到相册




2018-11-22 01:36 上传











   串口:  RFID模块   2个   



    进场(RFID):

        1. 蜂鸣器警报    ---  linux驱动

        2. 显示欢迎界面  ---  显示JPEG图片

        3. 播放欢迎语音  ---  madplay播放器

        4. 拍摄一张照片  ---  摄像头编程

        5. 数据库      

         

    退场



==========================================================================

一. 硬件在嵌入式设备中存放的方式?

    linux下,一切都是文件。  硬件  --> 文件



液晶屏幕: /dev/fb0   --> 开机默认加载

触摸屏:   /dev/input/event0  -->  开机默认加载

蜂鸣器:   /dev/beep  --> 手动加载  insmod

摄像头:   开机USB设备驱动默认已经安装好  --> 开机后,接入设备,寻找设备文件。



二. 内核加载摄像头



        //找到一个新的USB设备

[  151.907000] usb 1-1.3: New USB device found, idVendor=0ac8, idProduct=301b

[  151.908000] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0

[  151.915000] usb 1-1.3: Product: PC Camera  --> 摄像头



   ---> 去/dev目录下寻找设备文件   ---> /dev/video7



   注意:

    1. 开机



[root@GEC6818 /]#



    2. 接入摄像头  ---> /dev/video7





三. 研究摄像头工作流程



    推出去紫色: yuv_v4l2/

    紫白色: jpg_v4l2/





real_time_video.c   ---> 摄像头工作流程

libapi_v4l2_arm.so  ---> 摄像头接口对应库文件   

libjpeg.so          ---> JPEG库





FrameBuffer freambuf;



typedef struct Frame_Buffer

{

    char buf[1843200];  --->  字符数组   -->  图片的数据

    int length;         --->  整型变量   -->  数据长度

   

}FrameBuffer;



    FrameBuffer  等价于    struct Frame_Buffer

   



    FrameBuffer freambuf;   等价于    struct Frame_Buffer  freambuf;



void *get_real_time()

{

        

    int fd;

    int jpg_num = 0;

    char pic_name[20];

   

    //1. 打开液晶屏幕

    lcd_open();

   

    //2. 初始化摄像头设备

    linux_v4l2_device_init("/dev/video7");

   

    //3. 开始录制摄像头数据

    linux_v4l2_start_capturing();

   

    while(1)

    {

        //4. 获取摄像头数据

        linux_v4l2_get_fream(&freambuf);

            

        //5. 实时把图片数据显示在屏幕上

                //   x轴 y轴       图片的数据    数据长度

        lcd_draw_jpg(80, 0, NULL, freambuf.buf, freambuf.length, 0);

        if(get_picture_flag == 1)

        {

            //6. 清空数组

            bzero(pic_name, 20);

            

            //7. 保存一个字符串  picname -->  "/video_jpg/%d.jpg"

            sprintf(pic_name, "/video_jpg/%d.jpg", jpg_num);

            jpg_num++;

            

            //8. 新建一个文件

            fd = open(pic_name, O_RDWR | O_CREAT, 0777);

            if(-1 == fd)

            {

                perror("create jpg failed");

                continue;

            }

            

            //9. 把图片数据写入文件

            write(fd, freambuf.buf, freambuf.length);

            

            //10. 关闭文件

            close(fd);   

            

            //11. 修改标志位

            get_picture_flag = 0;

        }

        

    }

   

    //12. 停止录制

    linux_v4l2_stop_capturing();

   

    //13. 撤销摄像头初始化的资源

    linux_v4l2_device_uinit();



    //14. 关闭LCD屏幕文件

    lcd_close();

}





    1. 编译:  make



arm-linux-gcc real_time_video.c common.c lcd.c -o real_time_video -I ./libjpeg -L ./libjpeg -lapi_v4l2_arm -lpthread -ljpeg



    2. 下载real_time_video到开发板中



        rx real_time_video



    3.  下载库到开发板中/lib



   libapi_v4l2_arm.so

   libjpeg.so



    4.  执行代码



            chmod 777 real_time_video

        ./real_time_video



   







       yuv_v4l2/





        1.  make



    2.  下载main到开发板中



   

    3.  下载库到开发板中/lib



   libapi_v4l2_arm1.so

   libjpeg.so  



    4.  4.  执行代码



            chmod 777 main

        ./main

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

370

主题

370

帖子

0

粉丝