main.lua 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. --[[
  2. 特别提醒: 本demo已经有更好的替代品: video, 请使用新版video demo, 效果比本demo好很多.
  3. 这是Air105+摄像头, 通过USB传输JPG到上位机显示图片的示例, 速率2fps, 色彩空间 RGB565, 不要期望太高
  4. 本demo不需要lcd屏,但lcd的代码暂不可省略
  5. 本demo需要V0006, 20220331之后编译的固件版本, 老版本不可用
  6. 测试流程:
  7. 1. 先选取最新固件, 配合本demo的main.lua及GC032A_InitReg.txt, 两个文件都需要下载到设备
  8. 2. 断开USB, 将拨动开关切换到另一端, 切勿带电操作!!!
  9. 3. 重新插入USB
  10. 4. 打开上位机, 选择正确的COM口, 然后开始读取
  11. -- USB驱动下载 https://doc.openluat.com/wiki/21?wiki_page_id=2070
  12. -- USB驱动与 合宙Cat.1的USB驱动是一致的
  13. 上位机下载: https://gitee.com/openLuat/luatos-soc-air105/attach_files
  14. 上位机源码: https://gitee.com/openLuat/luatos-soc-air105 C#写的, 就能用, 勿生产
  15. ]]
  16. PROJECT = "usbcamera"
  17. VERSION = "1.0.0"
  18. sys = require("sys")
  19. if wdt then
  20. wdt.init(15000)--初始化watchdog设置为15s
  21. sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
  22. end
  23. spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)
  24. log.info("lcd.init",
  25. 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))
  26. --GC032A输出rgb图像初始化命令
  27. local GC032A_InitReg =
  28. {
  29. zbar_scan = 0,--是否为扫码
  30. draw_lcd = 0,--是否向lcd输出
  31. i2c_id = 0,
  32. i2c_addr = 0x21,
  33. pwm_id = 5;
  34. pwm_period = 12*1000*1000,
  35. pwm_pulse = 0,
  36. sensor_width = 640,
  37. sensor_height = 480,
  38. color_bit = 16,
  39. init_cmd ="/luadb/GC032A_InitReg.txt"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
  40. }
  41. local uartid = uart.VUART_0 -- 根据实际设备选取不同的uartid
  42. --初始化
  43. local result = uart.setup(
  44. uartid,--串口id
  45. 115200,--波特率
  46. 8,--数据位
  47. 1--停止位
  48. )
  49. local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引脚
  50. local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引脚
  51. camera_rst(0)
  52. -- 拍照, 自然就是RGB输出了
  53. local camera_id = camera.init(GC032A_InitReg)--屏幕输出rgb图像
  54. log.info("摄像头启动")
  55. camera.start(camera_id)--开始指定的camera
  56. log.info("摄像头启动完成")
  57. usbapp.start(0)
  58. camera.on(0, "scanned", function()
  59. sys.publish("scanned")
  60. end)
  61. sys.taskInit(function()
  62. while 1 do
  63. -- 稍微等待一下
  64. sys.wait(100)
  65. log.debug("摄像头捕获图像")
  66. -- 删除老的图片,避免重复显示
  67. os.remove("/temp.jpg")
  68. camera.capture(camera_id, "/temp.jpg", 1)
  69. sys.waitUntil("scanned", 1000)
  70. local f = io.open("/temp.jpg", "r")
  71. local data
  72. if f then -- 若文件存在, 必然能打开并读取, 否则肯定拍照失败了
  73. data = f:read("*a")
  74. log.info("fs", #data)
  75. f:close()
  76. -- 请使用上位机读取
  77. uart.write(uart.VUART_0, "Air105 USB JPG " .. tostring(#data) .. "\r\n")
  78. uart.write(uart.VUART_0, data)
  79. end
  80. end
  81. end)
  82. -- 用户代码已结束---------------------------------------------
  83. -- 结尾总是这一句
  84. sys.run()
  85. -- sys.run()之后后面不要加任何语句!!!!!