http_app.lua 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. local httpplus = require "httpplus"
  2. --加载AirCAMERA_1030驱动文件
  3. local air_camera = require "AirCAMERA_1030"
  4. --依次打开USB HUB上的端口号为1,2,3,4的AirCAMERA_1030摄像头
  5. --拍摄一张1280*720分辨率的照片,通过http上传到服务器;
  6. --上传结束后,等待10秒钟打开下一个端口的摄像头,重复执行拍照和上传的动作;
  7. local function http_upload_photo_task_func()
  8. local camera_usbhub_port = -1
  9. while true do
  10. --USB HUB上一共接了4个AirCAMERA_1030摄像头
  11. --在USB HUB上的端口号依次记录为1,2,3,4
  12. --camera_usbhub_port的值在0,1,2,3之间依次循环
  13. --打开摄像头时,使用camera_usbhub_port+1的值指定USB HUB端口号
  14. ::continue::
  15. camera_usbhub_port = camera_usbhub_port+1
  16. camera_usbhub_port = camera_usbhub_port%4
  17. log.info("http_upload_photo_task_func", "camera_usbhub_port", camera_usbhub_port+1)
  18. --打开USB HUB上端口号为camera_usbhub_port+1的AirCAMERA_1030摄像头
  19. local result = air_camera.open(camera_usbhub_port+1)
  20. --如果打开失败,跳转到continue标签,打开USB HUB上的下一个AirCAMERA_1030摄像头
  21. if not result then
  22. log.error("http_upload_photo_task_func error", "air_camera.open fail")
  23. goto continue
  24. end
  25. --拍摄一张1280*720分辨率的照片
  26. --如果拍摄成功,result中存储是照片数据
  27. --如果拍摄失败,result为false
  28. result = air_camera.capture()
  29. --如果拍摄失败,关闭当前摄像头,跳转到continue标签,打开USB HUB上的下一个AirCAMERA_1030摄像头
  30. if not result then
  31. log.error("http_upload_photo_task_func error", "air_camera.capture fail")
  32. air_camera.close()
  33. goto continue
  34. end
  35. --检查WIFI连接状态
  36. log.info("http_upload_photo_task_func", "socket.adapter(socket.dft())", socket.adapter(socket.dft()))
  37. --如果WIFI还没有连接成功
  38. if not socket.adapter(socket.dft()) then
  39. --在此处阻塞等待WIFI连接成功的消息"IP_READY"
  40. --或者等待30秒超时退出阻塞等待状态
  41. --如果没有等到"IP_READY"消息,关闭当前摄像头,跳转到continue标签,打开USB HUB上的下一个AirCAMERA_1030摄像头
  42. if not sys.waitUntil("IP_READY", 30000) then
  43. log.error("http_upload_photo_task_func error", "ip network timeout")
  44. air_camera.close()
  45. goto continue
  46. end
  47. end
  48. -- 通过WIFI网络将拍摄到的照片数据result上传到服务器upload.air32.cn
  49. -- 如果上传成功,电脑上浏览器打开https://www.air32.cn/upload/data/jpg/,打开对应的测试日期目录,点击具体的测试时间照片,可以查看摄像头拍照上传的照片
  50. -- 执行httpplus.request后,等待服务器的http应答,此处会阻塞当前task,等待整个过程成功结束或者出现错误异常结束
  51. -- code表示结果,number类型,详细说明参考API手册,一般来说:
  52. -- 200表示成功
  53. -- 小于0的值表示出错,例如-8表示超时错误
  54. -- 其余结果值参考API手册
  55. local code = httpplus.request({
  56. url = "http://upload.air32.cn/api/upload/jpg",
  57. method = "POST",
  58. body = result
  59. })
  60. log.info("http_upload_photo_task_func", "httpplus.request", code, camera_usbhub_port+1)
  61. -- 打印内存信息, 调试用
  62. log.info("sys", rtos.meminfo())
  63. log.info("sys", rtos.meminfo("sys"))
  64. log.info("psram", rtos.meminfo("psram"))
  65. --关闭当前摄像头
  66. air_camera.close()
  67. -- 等待10秒钟
  68. sys.wait(10000)
  69. end
  70. end
  71. --创建并且启动一个task
  72. --运行这个task的主体函数http_upload_photo_task_func
  73. sys.taskInit(http_upload_photo_task_func)