scan_code.lua 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. --[[
  2. @module scan_code
  3. @summary AirCAMERA_1050 gc0310摄像头扫描二维码应用模块
  4. @version 1.0
  5. @date 2025.11.09
  6. @author 陈取德
  7. @usage
  8. 本demo主要使用AirCAMERA_1050 gc0310摄像头完成一次扫描二维码任务
  9. ]] --
  10. -- 摄像头扩展库模块
  11. -- 功能:提供摄像头初始化、扫描和资源管理功能
  12. -- 引入excamera扩展库模块
  13. local excamera = require "excamera"
  14. -- 扫描功能函数
  15. -- 作用:循环监听扫描事件,执行摄像头初始化、扫描和资源释放
  16. local function scan_code_func()
  17. -- 定义变量用于存储操作结果和数据
  18. local result, data
  19. gpio.setup(24, 1)
  20. gpio.setup(164, 1)
  21. -- 无限循环,持续等待扫描事件
  22. while true do
  23. -- 配置gc0310摄像头参数表
  24. local spi_camera_param = {
  25. id = "gc0310", -- SPI摄像头仅支持"gc032a"、"gc0310"、"bf30a2",请带引号填写
  26. i2c_id = 0, -- 模块上使用的I2C编号
  27. work_mode = 0, -- 工作模式,0为拍照模式,1为扫描模式
  28. save_path = nil, -- 拍照结果存储路径,可用"ZBUFF"交由excamera库内部管理
  29. camera_pwr = 147, -- 摄像头使能管脚,填写GPIO号即可,无则填nil
  30. camera_pwdn = 153, -- 摄像头pwdn开关脚,填写GPIO号即可,无则填nil
  31. camera_light = nil -- 摄像头补光灯控制管脚,填写GPIO号即可,无则填nil
  32. }
  33. -- 等待外部触发扫描事件(SCAN_CODE)
  34. sys.waitUntil("SCAN_CODE")
  35. -- 初始化摄像头,传入配置参数
  36. result = excamera.open(spi_camera_param)
  37. -- 记录摄像头初始化状态
  38. log.info("初始化状态", result)
  39. -- 判断摄像头初始化是否成功,不成功则直接关闭,成功则启动扫描
  40. if result then
  41. -- 执行扫描操作,5秒超时
  42. result, data = excamera.scan(5000)
  43. -- 扫描执行完成则上传,否则关闭摄像头
  44. if result then
  45. log.info("Scan result :", data)
  46. end
  47. end
  48. -- 关闭摄像头,释放资源
  49. excamera.close()
  50. end
  51. end
  52. -- 内存检查函数
  53. -- 作用:定期监控系统内存使用情况
  54. local function memory_check()
  55. -- 无限循环,定期检查内存
  56. while true do
  57. -- 等待3秒
  58. sys.wait(3000)
  59. -- 打印系统内存使用信息
  60. log.info("sys ram", rtos.meminfo("sys"))
  61. -- 打印Lua虚拟机内存使用信息
  62. log.info("lua ram", rtos.meminfo("lua"))
  63. end
  64. end
  65. -- AirCAMERA_1050 DEMO应用触发函数,每30S触发一次扫描
  66. local function AirCAMERA_1050_func()
  67. while true do
  68. sys.publish("SCAN_CODE")
  69. sys.wait(30000)
  70. end
  71. end
  72. -- 创建扫描功能任务
  73. -- 作用:在单独的任务中运行扫描逻辑
  74. sys.taskInit(scan_code_func)
  75. -- 创建内存监控任务
  76. -- 作用:在单独的任务中运行内存监控逻辑
  77. sys.taskInit(memory_check)
  78. -- 创建扫描触发任务
  79. -- 作用:每30秒触发一次扫描二维码业务
  80. sys.taskInit(AirCAMERA_1050_func)