aircamera.lua 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. local aircamera = {}
  2. require "gc0310"
  3. local taskName = "SPI_CAMERA"
  4. local TEST_MODE = 0 -- 写1 演示扫码(使用摄像头对二维码、条形码或其他类型的图案进行扫描和识别),0 演示拍照
  5. local scan_pause = true -- 扫码启动与停止标志位
  6. local done_with_close = false -- true 结束后关闭摄像头
  7. local uartid = 1 -- 根据实际设备选取不同的uartid
  8. local cspiId = 1 -- 摄像头使用SPI1、I2C0
  9. local i2cId = 0
  10. local camera_id
  11. local run_state = 0
  12. -- 初始化UART
  13. local result = uart.setup(uartid, -- 串口id
  14. 115200, -- 波特率
  15. 8, -- 数据位
  16. 1 -- 停止位
  17. )
  18. -- 初始化摄像头
  19. local rawbuff, err = zbuff.create(60 * 1024, 0, zbuff.HEAP_AUTO) -- gc03a
  20. if rawbuff == nil then
  21. log.info(err)
  22. end
  23. local function aircamera_run()
  24. lcd.clear()
  25. sys.wait(500)
  26. gpio.setup(147, 1, gpio.PULLUP) -- camera的供电使能脚
  27. gpio.setup(153, 1, gpio.PULLUP) -- 控制camera电源的pd脚
  28. gpio.setup(24, 1, gpio.PULLUP) -- i2c工作的电压域
  29. gpio.setup(164, 1, gpio.PULLUP) -- 因为I2C 和 音频公用,如果不打开,会造成无法工作
  30. log.info("摄像头启动")
  31. gpio.setup(153, 0) -- PD拉低
  32. camera_id = gc0310Init(cspiId, i2cId, 25500000, TEST_MODE, TEST_MODE)
  33. camera.stop(camera_id) -- 暂停摄像头捕获数据。仅停止了图像捕获,未影响预览功能。
  34. camera.preview(camera_id, true) -- 打开LCD预览功能(直接将摄像头数据输出到LCD)
  35. camera.start(camera_id)
  36. log.info("start ok")
  37. if done_with_close then
  38. camera.close(camera_id)
  39. else
  40. camera.stop(camera_id)
  41. end
  42. log.info(rtos.meminfo("sys"))
  43. log.info(rtos.meminfo("psram"))
  44. end
  45. -- 启动任务时传入依赖
  46. function aircamera.run()
  47. if run_state == 0 then
  48. sysplus.taskInitEx(aircamera_run,taskName)
  49. run_state = 1
  50. end
  51. while true do
  52. sys.wait(30)
  53. if run_state == 0 then -- 等待结束
  54. return true
  55. end
  56. end
  57. end
  58. return aircamera