main.lua 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. -- UART1支持600 1200 2400 4800 9600波特率下休眠仍然接收数据,并且不丢失数据
  2. -- 其他波特率时,在休眠后通过UART1的RX唤醒,注意唤醒开始所有连续数据会丢失,所以要发2次,第一次发送字节后,会有提示,然后再发送数据
  3. -- LuaTools需要PROJECT和VERSION这两个信息
  4. PROJECT = "ZE08G-CH2O"
  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. local ppb = 0
  12. --初始化
  13. local result = uart.setup(
  14. uartid,--串口id
  15. 9600,--波特率
  16. 8,--数据位
  17. 1--停止位
  18. )
  19. -- 获取PPB值
  20. -- 气体浓度值 (PPB)=( 气 体 浓 度 高 位 *256+ 气 体 浓 度 低 位 )
  21. function GetPPB()
  22. if not rbuff then return nil end
  23. ppb = rbuff:byte(5)*255 + rbuff:byte(6)
  24. return ppb
  25. end
  26. -- 获取PPM值
  27. --百万分比浓度(PPM)= PPB / 1000
  28. function GetPPM()
  29. return ppb / 1000
  30. end
  31. -- 收取数据会触发回调, 这里的"receive" 是固定值
  32. uart.on(uartid, "receive", function(id, len)
  33. local s = ""
  34. s = uart.read(id, len)
  35. if #s == 0 then return end
  36. local hexStr, hexLen = s:toHex()
  37. log.info("CH2O", "receive", hexStr, hexLen)
  38. if string.sub(hexStr,1,2) == "FF" and hexLen == 18 then
  39. rbuff = s
  40. end
  41. end)
  42. sys.taskInit(function ()
  43. while true do
  44. sys.wait(1000)
  45. log.info("ppb: ", GetPPB(), "ppm: ", GetPPM(), string.format("USART_PM25: %s mg/m3.", GetPPM() * 1.25))
  46. end
  47. end)
  48. -- 用户代码已结束---------------------------------------------
  49. -- 结尾总是这一句
  50. sys.run()
  51. -- sys.run()之后后面不要加任何语句!!!!!