main.lua 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. -- UART1支持600 1200 2400 4800 9600波特率下休眠仍然接收数据,并且不丢失数据
  2. -- 其他波特率时,在休眠后通过UART1的RX唤醒,注意唤醒开始所有连续数据会丢失,所以要发2次,第一次发送字节后,会有提示,然后再发送数据
  3. -- LuaTools需要PROJECT和VERSION这两个信息
  4. PROJECT = "ZH07"
  5. VERSION = "1.0.0"
  6. log.info("main", PROJECT, VERSION)
  7. -- 引入必要的库文件(lua编写), 内部库不需要require
  8. sys = require("sys")
  9. local uartid = 1 -- 根据实际设备选取不同的uartid
  10. local rbuff
  11. --初始化
  12. local result = uart.setup(
  13. uartid,--串口id
  14. 9600,--波特率
  15. 8,--数据位
  16. 1--停止位
  17. )
  18. -- PM1.0
  19. function GetPM_1()
  20. if not rbuff then return nil end
  21. return rbuff:byte(11)*256 + rbuff:byte(12)
  22. end
  23. -- PM2.5
  24. function GetPM_25()
  25. if not rbuff then return nil end
  26. return rbuff:byte(13)*256 + rbuff:byte(14)
  27. end
  28. --PM10
  29. function GetPM_10()
  30. if not rbuff then return nil end
  31. return rbuff:byte(15)*256 + rbuff:byte(16)
  32. end
  33. -- 收取数据会触发回调, 这里的"receive" 是固定值
  34. uart.on(uartid, "receive", function(id, len)
  35. local s = ""
  36. s = uart.read(id, len)
  37. if #s == 0 then return end
  38. local hexStr, hexLen = s:toHex()
  39. log.info("ZH07", "receive", hexStr, hexLen)
  40. if string.sub(hexStr,1,2) == "42" and hexLen == 64 then
  41. rbuff = s
  42. end
  43. end)
  44. sys.taskInit(function ()
  45. while true do
  46. sys.wait(1000)
  47. log.info(string.format("pm1.0 %sμg/m³", GetPM_1()))
  48. log.info(string.format("pm2.5 %sμg/m³", GetPM_25()))
  49. log.info(string.format("pm10 %sμg/m³", GetPM_10()))
  50. end
  51. end)
  52. -- 用户代码已结束---------------------------------------------
  53. -- 结尾总是这一句
  54. sys.run()
  55. -- sys.run()之后后面不要加任何语句!!!!!