Просмотр исходного кода

update: 更新Air105的USB摄像头demo,虚拟串口, 2fps

Wendal Chen 4 лет назад
Родитель
Сommit
ca98e35501
1 измененных файлов с 23 добавлено и 381 удалено
  1. 23 381
      demo/camera/Air105/capture_usb/main.lua

+ 23 - 381
demo/camera/Air105/capture_usb/main.lua

@@ -1,47 +1,30 @@
+--[[
+这是Air105+摄像头, 通过USB传输到上位机显示图片的示例
+本demo不需要lcd屏,但lcd的代码暂不可省略
+
+本demo需要V0006, 20220331之后编译的固件版本, 老版本不可用
 
+测试流程:
+1. 先选取最新固件, 配合本demo的main.lua及驱动txt, 两个都需要下载到设备!!
+2. 断开USB, 将拨动开关切换到另一端
+3. 重新插入USB
+4. 打开上位机, 选择正确的COM口, 然后开始读取
+]]
 
 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 =
 {
@@ -56,344 +39,6 @@ local GC032A_InitReg =
 	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 = uart.VUART_0 -- 根据实际设备选取不同的uartid
@@ -419,34 +64,31 @@ log.info("摄像头启动完成")
 
 usbapp.start(0)
 
--- 按开发板上的按钮触发拍照
-gpio.setup(pin.PA10, function()
-    sys.publish("CAPTURE", true)
-end, gpio.PULLUP,gpio.FALLING)
+camera.on(0, "scanned", function()
+    sys.publish("scanned")
+end)
 
 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)
+            -- 稍微等待一下
+            sys.wait(100)
             log.debug("摄像头捕获图像")
+            -- 删除老的图片,避免重复显示
             os.remove("/temp.jpg")
             camera.capture(camera_id, "/temp.jpg", 1)
-            sys.wait(1000)
+            sys.waitUntil("scanned", 1000)
             local f = io.open("/temp.jpg", "r")
             local data
-            if f then
+            if f then -- 若文件存在, 必然能打开并读取, 否则肯定拍照失败了
                 data = f:read("*a")
                 log.info("fs", #data)
                 f:close()
+
+                -- 请使用上位机读取, 链接稍后提供
+                uart.write(uart.VUART_0, "Air105 USB JPG " .. tostring(#data) .. "\r\n")
+                uart.write(uart.VUART_0, data)
             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)