|
|
@@ -0,0 +1,457 @@
|
|
|
+
|
|
|
+
|
|
|
+PROJECT = "usbcamera"
|
|
|
+VERSION = "1.0.0"
|
|
|
+
|
|
|
+local sys = require "sys"
|
|
|
+
|
|
|
+--[[
|
|
|
+-- 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,48*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 = 2,yoffset = 1},spi_lcd))
|
|
|
+
|
|
|
+-- log.info("lcd.init",
|
|
|
+-- lcd.init("gc9306x",{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))
|
|
|
+
|
|
|
+--GC032A输出rgb图像初始化命令
|
|
|
+local GC032A_InitReg =
|
|
|
+{
|
|
|
+ zbar_scan = 0,--是否为扫码
|
|
|
+ draw_lcd = 0,--是否向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"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
|
|
|
+ --如不使用外部文件可直接使用下方初始化指令表
|
|
|
+ -- {
|
|
|
+ -- 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 uartid = 1 -- 根据实际设备选取不同的uartid
|
|
|
+--初始化
|
|
|
+local result = uart.setup(
|
|
|
+ uartid,--串口id
|
|
|
+ 115200,--波特率
|
|
|
+ 8,--数据位
|
|
|
+ 1--停止位
|
|
|
+)
|
|
|
+
|
|
|
+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图像
|
|
|
+
|
|
|
+log.info("摄像头启动")
|
|
|
+camera.start(camera_id)--开始指定的camera
|
|
|
+log.info("摄像头启动完成")
|
|
|
+
|
|
|
+usbapp.start(0)
|
|
|
+
|
|
|
+-- 按开发板上的按钮触发拍照
|
|
|
+gpio.setup(pin.PA10, function()
|
|
|
+ sys.publish("CAPTURE", true)
|
|
|
+end, gpio.PULLUP,gpio.FALLING)
|
|
|
+
|
|
|
+sys.taskInit(function()
|
|
|
+
|
|
|
+ while 1 do
|
|
|
+ -- result, data = sys.waitUntil("CAPTURE", 30000)
|
|
|
+ -- log.info("main", result, data)
|
|
|
+ -- if result==true and data==true then
|
|
|
+ sys.wait(1000)
|
|
|
+ log.debug("摄像头捕获图像")
|
|
|
+ os.remove("/temp.jpg")
|
|
|
+ camera.capture(camera_id, "/temp.jpg", 1)
|
|
|
+ sys.wait(1000)
|
|
|
+ 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
|
|
|
+ uart.write(uart.VUART_0, "Air105 USB JPG " .. tostring(#data) .. "\r\n")
|
|
|
+ uart.write(uart.VUART_0, data)
|
|
|
+ -- end
|
|
|
+ end
|
|
|
+
|
|
|
+end)
|
|
|
+
|
|
|
+-- 用户代码已结束---------------------------------------------
|
|
|
+-- 结尾总是这一句
|
|
|
+sys.run()
|
|
|
+-- sys.run()之后后面不要加任何语句!!!!!
|