【Luat-air105】8.1 camera拍照

1 前言

本章测试下air105+gc9306+GC032A拍照。

2 硬件

在这里插入图片描述
开发板:air105
camera:105附带的camera模组——GC032A
lcd屏幕:gc9306x

官方的demo使用的时PA10作为拍照按键,由于我焊接排针朝上,盖在面包板上,boot按键按不到,使用keyboord0/1作为拍照按键。

3 官方代码

https://gitee.com/openLuat/LuatOS/blob/master/demo/camera/Air105/capture/main.lua
官方示例使用的屏幕是st7789,需要根据自己的情况选择。

4 调整代码

我将camera的初始化放在了一个lua文件中。
PS:如果使用的是105固件版本 v0005,则需要将示例中lcd_init的gc9306x改为gc9306,如果是更高的版本则不需要这样修改。

main.lua

PROJECT = "camerademo"
VERSION = "1.0.0"

local sys = require "sys"
require("t8_camera")
--[[
-- LCD接法示例, 以Air105开发板的HSPI(SPI5)为例
LCD管脚       Air105管脚
GND          GND
VCC          3.3V
SCL          (PC15/HSPI_SCK)
SDA          (PC13/HSPI_MOSI)
RES          (PC12/HSPI_MISO)
DC           (PE08) --开发板上的U3_RX
CS           (PC14/HSPI_CS)
BL           (PE09) --开发板上的U3_TX


提示:
1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
]]

if wdt then
    wdt.init(15000)--初始化watchdog设置为15s
    sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
end

spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,20*1000*1000,spi.MSB,1,1)

-- log.info("lcd.init",
-- lcd.init("st7735s",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 2,w = 160,h = 80,xoffset = 1,yoffset = 26},spi_lcd))

-- log.info("lcd.init",
-- lcd.init("st7789",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))

-- log.info("lcd.init",
-- lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd))

log.info("lcd.init",
lcd.init("gc9306",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))

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

t8_camera_init()
t8_camera_start()

sys.taskInit(function()

    while 1 do
        result, data = sys.waitUntil("CAPTURE", 30000)
        if result==true and data==true then
            log.debug("摄像头捕获图像")
            camera.capture(camera_id, "/temp.jpg", 1)
            sys.wait(2000)
            local f = io.open("/temp.jpg", "r")
            local data
            if f then
                data = f:read("*a")
                log.info("fs", #data)
                f:close()
            end
        
            uart.write(uartid, data) --找个能保存数据的串口工具保存成文件就能在电脑上看了, 格式为JPG
        end
    end
    
end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

t8_camera.lua

--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 =
	{
        0xf3,0xff,
        0xf7,0x01,
        0xf8,0x03,
        0xf9,0xce,
        0xfa,0x00,
        0xfc,0x02,
        0xfe,0x02,
        0x81,0x03,
        0xfe, 0x00,
        0x77, 0x64,
        0x78, 0x40,
        0x79, 0x60,

        0xfe, 0x00,
        0x03, 0x01,
        0x04, 0xcb,
        0x05, 0x01,
        0x06, 0xb2,
        0x07, 0x00,
        0x08, 0x10,

        0x0a, 0x00,
        0x0c, 0x00,
        0x0d, 0x01,
        0x0e, 0xe8,
        0x0f, 0x02,
        0x10, 0x88,

        0x17, 0x54,
        0x19, 0x08,
        0x1a, 0x0a,
        0x1f, 0x40,
        0x20, 0x30,
        0x2e, 0x80,
        0x2f, 0x2b,
        0x30, 0x1a,
        0xfe, 0x02,
        0x03, 0x02,
        0x05, 0xd7,
        0x06, 0x60,
        0x08, 0x80,
        0x12, 0x89,
       

        0xfe, 0x00,
        0x18, 0x02,
        0xfe, 0x02,
        0x40, 0x22,
        0x45, 0x00,
        0x46, 0x00,
        0x49, 0x20,
        0x4b, 0x3c,
        0x50, 0x20,
        0x42, 0x10,


        0xfe, 0x01,
        0x0a, 0xc5,
        0x45, 0x00,
        0xfe, 0x00,
        0x40, 0xff,
        0x41, 0x25,
        0x42, 0xef,
        0x43, 0x10,
        0x44, 0x82,
        0x46, 0x22,
        0x49, 0x03,
        0x52, 0x02,
        0x54, 0x00,
        0xfe, 0x02,
        0x22, 0xf6,


        0xfe, 0x01,
        0xc1, 0x38,
        0xc2, 0x4c,
        0xc3, 0x00,
        0xc4, 0x2c,
        0xc5, 0x24,
        0xc6, 0x18,
        0xc7, 0x28,
        0xc8, 0x11,
        0xc9, 0x15,
        0xca, 0x20,
        0xdc, 0x7a,
        0xdd, 0xa0,
        0xde, 0x80,
        0xdf, 0x88,


        0xfe, 0x01,
        0x50, 0xc1,
        0x56, 0x34,
        0x58, 0x04,
        0x65, 0x06,
        0x66, 0x0f,
        0x67, 0x04,
        0x69, 0x20,
        0x6a, 0x40,
        0x6b, 0x81,
        0x6d, 0x12,
        0x6e, 0xc0,
        0x7b, 0x2a,
        0x7c, 0x0c,
        0xfe, 0x01,
        0x90, 0xe3,
        0x91, 0xc2,
        0x92, 0xff,
        0x93, 0xe3,
        0x95, 0x1c,
        0x96, 0xff,
        0x97, 0x44,
        0x98, 0x1c,
        0x9a, 0x44,
        0x9b, 0x1c,
        0x9c, 0x64,
        0x9d, 0x44,
        0x9f, 0x71,
        0xa0, 0x64,
        0xa1, 0x00,
        0xa2, 0x00,
        0x86, 0x00,
        0x87, 0x00,
        0x88, 0x00,
        0x89, 0x00,
        0xa4, 0xc2,
        0xa5, 0x9b,
        0xa6, 0xc8,
        0xa7, 0x92,
        0xa9, 0xc9,
        0xaa, 0x96,
        0xab, 0xa9,
        0xac, 0x99,
        0xae, 0xce,
        0xaf, 0xa9,
        0xb0, 0xcf,
        0xb1, 0x9d,
        0xb3, 0xcf,
        0xb4, 0xac,
        0xb5, 0x00,
        0xb6, 0x00,
        0x8b, 0x00,
        0x8c, 0x00,
        0x8d, 0x00,
        0x8e, 0x00,
        0x94, 0x55,
        0x99, 0xa6,
        0x9e, 0xaa,
        0xa3, 0x0a,
        0x8a, 0x00,
        0xa8, 0x55,
        0xad, 0x55,
        0xb2, 0x55,
        0xb7, 0x05,
        0x8f, 0x00,
        0xb8, 0xc7,
        0xb9, 0xa0,

        0xfe, 0x01,
        0xd0, 0x40,
        0xd1, 0x00,
        0xd2, 0x00,
        0xd3, 0xfa,
        0xd4, 0x4a,
        0xd5, 0x02,

        0xd6, 0x44,
        0xd7, 0xfa,
        0xd8, 0x04,
        0xd9, 0x08,
        0xda, 0x5c,
        0xdb, 0x02,
        0xfe, 0x00,


        0xfe, 0x00,
        0xba, 0x00,
        0xbb, 0x06,
        0xbc, 0x0b,
        0xbd, 0x10,
        0xbe, 0x19,
        0xbf, 0x26,
        0xc0, 0x33,
        0xc1, 0x3f,
        0xc2, 0x54,
        0xc3, 0x68,
        0xc4, 0x7c,
        0xc5, 0x8c,
        0xc6, 0x9c,
        0xc7, 0xb4,
        0xc8, 0xc9,
        0xc9, 0xd8,
        0xca, 0xe4,
        0xcb, 0xee,
        0xcc, 0xf4,
        0xcd, 0xf9,
        0xce, 0xfa,
        0xcf, 0xff,


        0xfe, 0x00,
        0x5a, 0x08,
        0x5b, 0x0f,
        0x5c, 0x15,
        0x5d, 0x1c,
        0x5e, 0x28,
        0x5f, 0x36,
        0x60, 0x45,
        0x61, 0x51,
        0x62, 0x6a,
        0x63, 0x7d,
        0x64, 0x8d,
        0x65, 0x98,
        0x66, 0xa2,
        0x67, 0xb5,
        0x68, 0xc3,
        0x69, 0xcd,
        0x6a, 0xd4,
        0x6b, 0xdc,
        0x6c, 0xe3,
        0x6d, 0xf0,
        0x6e, 0xf9,
        0x6f, 0xff,


        0xfe, 0x00,
        0x70, 0x50,


        0xfe, 0x00,
        0x4f, 0x01,
        0xfe, 0x01,
        0x0c, 0x01,
        0x0d, 0x00,
        0x12, 0xa0,
        0x13, 0x4a,
        0x44, 0x04,
        0x1f, 0x40,
        0x20, 0x40,
        0x23, 0x0a,
        0x26, 0x9a,
        0x3e, 0x20,
        0x3f, 0x2d,
        0x40, 0x40,
        0x41, 0x5b,
        0x42, 0x82,
        0x43, 0xb7,
        0x04, 0x0a,
        0x02, 0x79,
        0x03, 0xc0,


        0xfe, 0x01,
        0xcc, 0x08,
        0xcd, 0x08,
        0xce, 0xa4,
        0xcf, 0xec,


        0xfe, 0x00,
        0x81, 0xb8,
        0x82, 0x04,
        0x83, 0x10,
        0x84, 0x01,
        0x86, 0x50,
        0x87, 0x18,
        0x88, 0x10,
        0x89, 0x70,
        0x8a, 0x20,
        0x8b, 0x10,
        0x8c, 0x08,
        0x8d, 0x0a,


        0xfe, 0x00,
        0x8f, 0xaa,
        0x90, 0x1c,
        0x91, 0x52,
        0x92, 0x03,
        0x93, 0x03,
        0x94, 0x08,
        0x95, 0x6a,
        0x97, 0x00,
        0x98, 0x00,


        0xfe, 0x00,
        0x9a, 0x30,
        0x9b, 0x50,
        0xa1, 0x30,
        0xa2, 0x66,
        0xa4, 0x28,
        0xa5, 0x30,
        0xaa, 0x28,
        0xac, 0x32,


        0xfe, 0x00,
        0xd1, 0x3f,
        0xd2, 0x3f,
        0xd3, 0x38,
        0xd6, 0xf4,
        0xd7, 0x1d,
        0xdd, 0x72,
        0xde, 0x84,

        0xfe, 0x00,
        0x05, 0x01,
        0x06, 0xad,
        0x07, 0x00,
        0x08, 0x10,

        0xfe, 0x01,
        0x25, 0x00,
        0x26, 0x4d,

        0x27, 0x01,
        0x28, 0xce,
        0x29, 0x01,
        0x2a, 0xce,
        0x2b, 0x01,
        0x2c, 0xce,
        0x2d, 0x01,
        0x2e, 0xce,
        0x2f, 0x01,
        0x30, 0xce,
        0x31, 0x01,
        0x32, 0xce,
        0x33, 0x01,
        0x34, 0xce,
        0x3c, 0x10,
        0xfe, 0x00,
        0xfe,0x00,
        0x44,0x06,--RGB565输出
        0x46,0x0f,
	}
}



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)


function t8_camera_init()
    -- 拍照, 自然就是RGB输出了
    camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
end

function t8_camera_start()
    log.info("摄像头启动")
    camera.start(camera_id)--开始指定的camera

    gpio.setup(pin.PA10, function()
        sys.publish("CAPTURE", true)
    end, gpio.PULLUP,gpio.FALLING)

end

5 结果

在这里插入图片描述
图像显示正常。

6 小结

后续加上105的tf卡,将图片存到tf卡中。
或者使用uart传输到电脑上。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值