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")
if wdt then
wdt.init(15000)
sys.timerLoopStart(wdt.feed, 10000)
end
spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,20*1000*1000,spi.MSB,1,1)
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
local result = uart.setup(
uartid,
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)
end
end
end)
sys.run()
t8_camera.lua
local GC032A_InitReg =
{
zbar_scan = 0,
draw_lcd = 1,
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,
0x46,0x0f,
}
}
local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP)
local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP)
camera_rst(0)
function t8_camera_init()
camera_id = camera.init(GC032A_InitReg)
end
function t8_camera_start()
log.info("摄像头启动")
camera.start(camera_id)
gpio.setup(pin.PA10, function()
sys.publish("CAPTURE", true)
end, gpio.PULLUP,gpio.FALLING)
end
5 结果
图像显示正常。
6 小结
后续加上105的tf卡,将图片存到tf卡中。 或者使用uart传输到电脑上。
|