合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture

目录

基础资料

探讨重点

实现功能

硬件准备

 软件版本

软件使用

接线示意图

功能1:捕捉图片并存入SPI接口外置SD卡

lcd初始化

摄像头初始化

指定capture按钮

SD卡初始化

图片存储

功能2:捕捉图片并通过Serial 串口接收数据存入电脑

串口初始化

串口数据接收

串口数据处理

HEX数据转换为jpeg格式文件

HEX转JPG代码示例(Python)

测试LOG数据分析

后续:捕捉图片存入SPI接口外置sd卡,副本存入电脑


基础资料

基于Air105开发板:Air105 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方camera - 摄像头demo中capture功能的复现,进行相关内容的学习及探讨。

实现功能

功能1:捕捉图片并存入SPI接口外置sd卡;

功能2:捕捉图片并通过Serial 串口接收数据存入电脑;

硬件准备

Air105开发板1块,面包板1块,TFTLCD 屏幕,Micro SD卡模块(SPI)接口1个,摄像头GC032A(SPI) , USB转TTL串口模块,导线若干。

Air105开发板

 TFTLCD 屏幕

SD卡模块(SPI),摄像头GC032A(SPI)

 

CH340G-USB转TTL串口模块

 软件版本

AIR105:LuatOS@AIR105 base 22.10 bsp V0011

软件使用

接口文档可参考:camera摄像头

接线示意图

功能1:捕捉图片并存入SPI接口外置SD卡

lcd初始化

spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)   --debug信息:显示芯片类型st7735

log.info("lcd.init",  --SHPI接口管脚对应连接
lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 128,h = 160,xoffset = 2,yoffset = 1},spi_lcd))

摄像头初始化

--GC032A输出rgb图像初始化命令
local GC032A_InitReg =
{
	zbar_scan = 0,--是否为扫码
    draw,开发板未引出_lcd = 1,--是否向lcd输出
    i2c_id = 0,
	i2c_addr = 0x21,
    pwm_id = 5;
    pwm_period  = 12*1000*1000,
    pwm_pulse = 0,
	sensor_width = 640,
	sensor_height = 480,
    color_bit = 16,
	init_cmd ="/luadb/GC032A_InitReg.txt"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
}

local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引脚,开发板上未引出
local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引脚,开发板上未引出
camera_rst(0)

-- 拍照, 自然就是RGB输出了
local camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
camera.start(camera_id)--开始指定的camera
log.info("摄像头启动")

/luadb/是开发板的虚拟地址。GC032A_InitReg.txt在烧写主程序时一并烧写入开发板,和main()文件同级。PS:GC032A_InitReg.txt内容为摄像头模组GC032A的初始化的命令(寄存器操作指令及参数),后期另外撰文分析。

GC032A芯片硬件手册的最新版本为:GC032A DataSheet_Release_V1.1_20170314。

GC032ADataSheet-Release-V1.1-20170314(GC032ADataSheet-Release)-单片机文档类资源-CSDN下载

指定capture按钮

gpio.setup(pin.PA10, function()  --BOOT键
    sys.publish("CAPTURE", true) --点击后系统释放"CAPTURE",并由sys.waitUntil处理
end, gpio.PULLUP,gpio.FALLING)

SD卡初始化

 local spiId = 2
    local result = spi.setup(
        spiId,--串口id
        255, -- 不使用默认CS脚,通过gpio.setup(TF_CS, 1)重新指定
        0,--CPHA
        0,--CPOL
        8,--数据宽度
        400*1000  -- 初始化时使用较低的频率
    )
    local TF_CS = pin.PB3
    gpio.setup(TF_CS, 1)
    --fatfs.debug(1) -- 若挂载失败,可以尝试打开调试信息,查找原因
    fatfs.mount("SD", spiId, TF_CS, 24000000)
    local data, err = fatfs.getfree("SD")
    if data then
        log.info("fatfs", "getfree", json.encode(data))
    else
        log.info("fatfs", "err", err)
    end

图片存储

        result, data = sys.waitUntil("CAPTURE", 30000)  --capture捕获周期为30s
        if result==true and data==true then  --获取到数据
            log.debug("摄像头捕获图像")
            os.remove("/sd/temp.jpg")
            camera.capture(camera_id, "/sd/temp.jpg", 1)   --存储在SD上

功能2:捕捉图片并通过Serial 串口接收数据存入电脑

串口初始化

local uartid = 1 -- 根据实际设备选取不同的uartid
--初始化
local result = uart.setup(
    uartid,--串口id
    115200,--波特率
    8,--数据位
    1--停止位
)

官方demo本段代码注释状态,运行前需取消注释,并将SD卡存储部分代码进行注释,不能同时运行。

串口数据接收

demo中选用U1_RX,U2_TX端口。

点击板载BOOT键进行截图后,串口接收到截图信息,API已封装摄像头截图并输出JPEG格式的相关功能。

 

 端口收到的原始数据

串口数据处理

后期可以对HEX 16进制数据解码,采用HEX 16进制数据格式转换为JPEG格式。

HEX 16进制JPG文件信息

提示:JPG文件正常以FF D8开头,FF D9结尾,可以用来辅助判断串口接收信息是否完整。

HEX数据转换为jpeg格式文件

HEX(16进制数据)先转存在txt文档中,再通过Python的binascii库输出为jpeg文件(由十六进制字符串即十六进制数据,转换为二进制数据JPG文件)。

转换效果如下:

 HEX转JPG

HEX转JPG代码示例(Python)

import binascii

# 十六进制字符串,如:“ff d8 ff e1 11 e0 45 78 69...”;存入TXT文件。经过如下代码转换,可将pic存储为图片形式并可以正常打开
o_file=r"G:\jpg数据.txt"
filepath=r"G:\jpg数据.jpg"
f = open(o_file,"r")
payload=f.read()
f.close()
f=open(filepath,"ab") # filepath为你要存储的图片的全路径
pic = binascii.a2b_hex(payload.replace(' ', '').strip())
f.write(pic)
f.close()

验证完成!

测试LOG数据分析

  LOG数据分析

后续:捕捉图片存入SPI接口外置sd卡,副本存入电脑

介绍功能3:捕捉图片存入SPI接口外置sd卡,副本同步通过Serial 串口输出jpg文件存入电脑。

合宙Air105|摄像头|capture|SPI|Serial串口|TFTLCD|Micro SD卡|串口输出|jpg|官方demo|学习(2-2):摄像头camera:功能3:串口输出.jpg_Medlar_CN的博客

r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z 开发板:CB-S 1、(可选修改/调试技巧:) 除了ov5640.c之外,其它的驱动都不编译,节省编译时间! W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\Makefile obj-m += ov5640.o #obj-m += ov2640.o #obj-m += ov7736.o #obj-m += s5k4ec.o #obj-m += s5k4ec_mipi.o #obj-m += gc2035.o #obj-m += gt2005.o #obj-m += gc0307.o #obj-m += gc0308.o #obj-m += gc0328.o #obj-m += gc0328c.o #obj-m += gc2145.o #obj-m += gc0329.o #obj-m += gc0311.o #obj-m += hi253.o #obj-m += sp2518.o #obj-m += sp2519.o #obj-m += sp0718.o #obj-m += sp0838.o #obj-m += ov16825.o #obj-m += ov5650.o #obj-m += ov5647.o #obj-m += ov5647_mipi.o #obj-m += t8et5.o #obj-m += s5k4e1.o #obj-m += s5k4e1_mipi.o #obj-m += sp2518.o #obj-m += sp0718.o #obj-m += gc5004.o #obj-m += gc5004_mipi.o #obj-m += ov5648.o #obj-m += ar0330.o #obj-m += ov5648.o #obj-m += sp5408.o #obj-m += ov12830.o #obj-m += ov8825.o #obj-m += ov8850.o #obj-m += gc2155.o #obj-m += ov8858.o #obj-m += ov13850.o #obj-m += imx214.o #obj-m += ov8858_4lane.o #obj-m += sp5409.o #obj-m += s5k5e2yx.o #obj-m += ov2710_mipi.o #obj-m += ov2686.o (这里是看ov5640的驱动的probe执行是否正确?设备ID是否读取成功!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\ov5640.c static int sensor_detect(struct v4l2_subdev *sd) { data_type rdval; printk("****wyb %s:%d/%s()! \n", __FILE__, __LINE__, __func__); LOG_ERR_RET(sensor_read(sd, 0x300a, &rdval;)) printk("****wyb %s:%d/%s()! 0x300a rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x56) return -ENODEV; LOG_ERR_RET(sensor_read(sd, 0x300b, &rdval;)) printk("****wyb %s:%d/%s()! 0x300b rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x40) return -ENODEV; return 0; } (在全志R16平台改过这个文件,让摄像头不要休眠,但是全志R40平台的tina v2.1系统下不需要修改!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\vfe.c 2、(可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值