摄像头模块
串口: 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 |