| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- --[[
- 特别提醒: 本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()之后后面不要加任何语句!!!!!
|