main.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "usb_cam_mp4"
  3. VERSION = "1.0.0"
  4. -- sys库是标配
  5. _G.sys = require("sys")
  6. -- 特别提醒, 由于FAT32是DOS时代的产物, 文件名超过8个字节是需要额外支持的(需要更大的ROM)
  7. -- 例如 /sd/boottime 是合法文件名, 而/sd/boot_time就不是合法文件名, 需要启用长文件名支持.
  8. local camera_id = camera.USB
  9. local usb_camera_table = {
  10. id = camera_id,
  11. sensor_width = 1280,
  12. sensor_height = 720,
  13. usb_port = 1
  14. }
  15. local rtos_bsp = rtos.bsp()
  16. -- spi_id,pin_cs
  17. local function fatfs_spi_pin()
  18. if rtos_bsp == "AIR101" then
  19. return 0, pin.PB04
  20. elseif rtos_bsp == "AIR103" then
  21. return 0, pin.PB04
  22. elseif rtos_bsp == "AIR105" then
  23. return 2, pin.PB03
  24. elseif rtos_bsp == "ESP32C3" then
  25. return 2, 7
  26. elseif rtos_bsp == "ESP32S3" then
  27. return 2, 14
  28. elseif rtos_bsp == "EC618" then
  29. return 0, 8
  30. elseif string.find(rtos_bsp,"EC718") then
  31. return 0, 8
  32. elseif string.find(rtos_bsp,"Air810") then
  33. gpio.setup(13, 1, gpio.PULLUP)
  34. gpio.setup(28, 1, gpio.PULLUP)
  35. return 0, 3, fatfs.SDIO
  36. else
  37. log.info("main", "bsp not support")
  38. return
  39. end
  40. end
  41. sys.taskInit(function()
  42. sys.wait(1000)
  43. airlink.init()
  44. airlink.start(airlink.MODE_SPI_MASTER)
  45. sys.wait(1000)
  46. -- fatfs.debug(1) -- 若挂载失败,可以尝试打开调试信息,查找原因
  47. camera.config(0, camera.CONF_UVC_FPS, 30)
  48. -- -- 此为spi方式
  49. local spi_id, pin_cs,tp = fatfs_spi_pin()
  50. if tp and tp == fatfs.SPI then
  51. -- 仅SPI方式需要自行初始化spi, sdio不需要
  52. spi.setup(spi_id, nil, 0, 0, 8, 400 * 1000)
  53. gpio.setup(pin_cs, 1)
  54. end
  55. -- lua内存
  56. log.info("lua", rtos.meminfo())
  57. -- sys内存
  58. log.info("sys", rtos.meminfo("sys"))
  59. fatfs.mount(tp or fatfs.SPI, "/sd", spi_id, pin_cs, 24 * 1000 * 1000)
  60. local data, err = fatfs.getfree("/sd")
  61. if data then
  62. log.info("fatfs", "getfree", json.encode(data))
  63. else
  64. log.info("fatfs", "err", err)
  65. end
  66. wlan.init()
  67. wlan.connect("luatos1234", "12341234", 1)
  68. sys.waitUntil("IP_READY", 15000)
  69. sys.wait(100)
  70. socket.sntp()
  71. sys.wait(1000)
  72. -- 打印剩余内存
  73. log.info("lua", rtos.meminfo())
  74. log.info("sys", rtos.meminfo("sys"))
  75. log.info("psram", rtos.meminfo("psram"))
  76. --初始化摄像头
  77. while 1 do
  78. -- if true then rtos.reboot() end
  79. result=camera.init(usb_camera_table)
  80. log.info("摄像头初始化", result)
  81. log.info("lua", rtos.meminfo())
  82. log.info("sys", rtos.meminfo("sys"))
  83. log.info("psram", rtos.meminfo("psram"))
  84. if(result==0) then
  85. camera.start(camera_id)
  86. --开始mp4录制
  87. camera.capture(camera_id, "/sd/" .. os.time() .. ".mp4", 1)
  88. sys.wait(3000)
  89. --结束MP4录制
  90. camera.stop(camera_id)
  91. log.info("保存成功")
  92. end
  93. camera.close(camera_id)
  94. --- 打印一下内存状态
  95. log.info("lua", rtos.meminfo())
  96. log.info("sys", rtos.meminfo("sys"))
  97. log.info("psram", rtos.meminfo("psram"))
  98. sys.wait(2000)
  99. -- rtos.reboot()
  100. end
  101. -- #################################################
  102. end)
  103. -- 用户代码已结束---------------------------------------------
  104. -- 结尾总是这一句
  105. sys.run()
  106. -- sys.run()之后后面不要加任何语句!!!!!