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

update: 移除老的air105摄像头demo, 完善新的摄像头demo注释

Wendal Chen 3 лет назад
Родитель
Сommit
9fb4aebd73

+ 7 - 0
demo/camera/Air105/README.md

@@ -0,0 +1,7 @@
+# Air105摄像头的实例合集
+
+* capture - 捕捉图片并存入sd卡
+* raw_mode - 将摄像头数据通过w5500的udp协议发送到局域网,很慢
+* scanner - 演示扫码
+* synthesis - 综合演示, 扫码, 拍照, 存图
+* video - USB视频流, 可到5~10fps. 论图像质量,依然比不上某宝15块钱的USB摄像头

+ 0 - 336
demo/camera/Air105/capture_usb/GC032A_InitReg.txt

@@ -1,336 +0,0 @@
-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,
-#此为注释

+ 3 - 0
demo/camera/Air105/capture_usb/README.md

@@ -0,0 +1,3 @@
+# 本demo已废弃
+
+请使用 video 示例

+ 0 - 110
demo/camera/Air105/capture_usb/main.lua

@@ -1,110 +0,0 @@
---[[
-
-特别提醒: 本demo已经有更好的替代品: video, 请使用新版video demo, 效果比本demo好很多.
-
-这是Air105+摄像头, 通过USB传输JPG到上位机显示图片的示例, 速率2fps, 色彩空间 RGB565, 不要期望太高
-本demo不需要lcd屏,但lcd的代码暂不可省略
-
-本demo需要V0006, 20220331之后编译的固件版本, 老版本不可用
-
-测试流程:
-1. 先选取最新固件, 配合本demo的main.lua及GC032A_InitReg.txt, 两个文件都需要下载到设备
-2. 断开USB, 将拨动开关切换到另一端, 切勿带电操作!!!
-3. 重新插入USB
-4. 打开上位机, 选择正确的COM口, 然后开始读取
-
--- USB驱动下载 https://doc.openluat.com/wiki/21?wiki_page_id=2070
--- USB驱动与 合宙Cat.1的USB驱动是一致的
-
-上位机下载: https://gitee.com/openLuat/luatos-soc-air105/attach_files
-上位机源码: https://gitee.com/openLuat/luatos-soc-air105 C#写的, 就能用, 勿生产
-
-
-]]
-
-PROJECT = "usbcamera"
-VERSION = "1.0.0"
-
-sys = require("sys")
-
-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("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))
-
---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"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
-}
-
-local uartid = uart.VUART_0 -- 根据实际设备选取不同的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)
-
-camera.on(0, "scanned", function()
-    sys.publish("scanned")
-end)
-
-sys.taskInit(function()
-
-    while 1 do
-            -- 稍微等待一下
-            sys.wait(100)
-            log.debug("摄像头捕获图像")
-            -- 删除老的图片,避免重复显示
-            os.remove("/temp.jpg")
-            camera.capture(camera_id, "/temp.jpg", 1)
-            sys.waitUntil("scanned", 1000)
-            local f = io.open("/temp.jpg", "r")
-            local data
-            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
-    end
-
-end)
-
--- 用户代码已结束---------------------------------------------
--- 结尾总是这一句
-sys.run()
--- sys.run()之后后面不要加任何语句!!!!!

+ 13 - 0
demo/camera/Air105/scanner/main.lua

@@ -21,6 +21,19 @@ BL           (PE09) --开发板上的U3_TX
 提示:
 1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
 2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
+
+-- USB驱动下载 https://doc.openluat.com/wiki/21?wiki_page_id=2070
+-- USB驱动与 合宙Cat.1的USB驱动是一致的
+
+扫码解码会输出日志, 也会输出到USB HID.
+
+若需要通过USB HID查看
+1. 要安装USB驱动
+2. 刷好脚本, 务必把txt也下载下去,总共3个文件.
+3. 断电, 拨动切换开关, 重新连接电脑
+4. 打开记事本, 光标处于输入状态
+5. 移动摄像头进行扫码, 结果会输出到记事本, 每行一次
+
 ]]
 
 if wdt then

+ 23 - 24
demo/camera/Air105/video/camera_test.lua

@@ -2,16 +2,16 @@
 --编译好的工具:https://gitee.com/openLuat/luatos-soc-air105/attach_files
 local GC032A_InitReg =
 {
-	zbar_scan = 0,--是否为扫码
-    draw_lcd = 0,--是否向lcd输出
+	zbar_scan = 0,--是否为扫码, 扫码模式会显示灰度图像!!!
+    draw_lcd = 0,--是否向lcd输出, 若没有接lcd显示屏就不用设置为1
     i2c_id = 0,
 	i2c_addr = 0x21,
     pwm_id = 5;
-    pwm_period  = 24*1000*1000,
+    pwm_period  = 24*1000*1000, -- 摄像头的时钟线的波特率
     pwm_pulse = 0,
-	sensor_width = 640,
+	sensor_width = 640, -- GC032A摄像头的实际分辨率是30w,但内存不足,实际显示居中的1/4图像
 	sensor_height = 480,
-    color_bit = 16,
+    color_bit = 16, -- 颜色空间是 RGB565
 	init_cmd = "/luadb/GC032A_InitReg.txt"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
 
 }
@@ -20,6 +20,24 @@ 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引脚
 
 usbapp.start(0)
+
+sys.taskInit(function()
+	camera_rst(0)
+    uart.setup(
+        uart.VUART_0,-- USB虚拟串口id
+        115200,--波特率
+        8,--数据位
+        1--停止位
+    )
+	-- 拍照, 自然就是RGB输出了
+	local camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
+
+	log.info("摄像头启动")
+    camera.video(camera_id, 320, 240, uart.VUART_0)
+	log.info("摄像头启动完成")
+end)
+
+-- 以下是扫码的回调, 仅当zbar_scan=1时会有回调
 camera.on(0, "scanned", function(id, str)
     if type(str) == 'string' then
         log.info("扫码结果", str)
@@ -38,22 +56,3 @@ camera.on(0, "scanned", function(id, str)
         log.error("摄像头没有数据")
     end
 end)
-
-sys.taskInit(function()
-	camera_rst(0)
-    uart.setup(
-        uart.VUART_0,--串口id
-        115200,--波特率
-        8,--数据位
-        1--停止位
-    )
-	-- 拍照, 自然就是RGB输出了
-	local camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
-
-	log.info("摄像头启动")
-    camera.video(camera_id, 320, 240, uart.VUART_0)
-	log.info("摄像头启动完成")
-    while 1 do
-    	sys.wait(10000)
-    end
-end)

+ 27 - 3
demo/camera/Air105/video/main.lua

@@ -1,14 +1,38 @@
 
 -- LuaTools需要PROJECT和VERSION这两个信息
 PROJECT = "camera_video"
-VERSION = "1.1"
-PRODUCT_KEY = "s1uUnY6KA06ifIjcutm5oNbG3MZf5aUv" --换成自己的
+VERSION = "1.0.0"
+
+--[[
+这是Air105+摄像头, 通过USB传输到上位机显示图像的示例, 速率5~10fps, 不要期望太高
+本demo不需要lcd屏,但lcd的代码暂不可省略
+
+本demo需要最新固件
+
+测试流程:
+1. 先选取最新固件, 配合本demo的3个文件,3个文件都需要下载到设备,包括txt文件!!!
+2. 查看日志, 若提示摄像头无数据, 检查摄像头连线,并检查是否已经下载txt文件.
+3. 断开USB, 将拨动开关切换到另一端, 切勿带电操作!!!
+4. 重新插入USB
+5. 打开上位机, 选择正确的COM口, 然后开始读取
+
+-- USB驱动下载 https://doc.openluat.com/wiki/21?wiki_page_id=2070
+-- USB驱动与 合宙Cat.1的USB驱动是一致的
+
+上位机下载: https://gitee.com/openLuat/luatos-soc-air105/attach_files
+上位机源码: https://gitee.com/openLuat/luatos-soc-air105 C#写的, 就能用, 勿生产
+
+]]
+
+
 -- sys库是标配
 _G.sys = require("sys")
 _G.sysplus = require("sysplus")
+
 log.style(1)
 require "camera_test"
+
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句
 sys.run()
--- sys.run()之后后面不要加任何语句!!!!!
+-- sys.run()之后后面不要加任何语句!!!!!