--[[ @module zh07 @summary ZH07 激光粉尘传感器 @version 1.0 @date 2023.03.09 @author BaiShiyu @usage --注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 sys = require("sys") local zh07 = require "zh07" local uartid = 1 -- 根据实际设备选取不同的uartid sys.taskInit(function () local result = zh07.init(uartid) if not result then return end while true do sys.wait(1000) log.info(string.format("pm1.0 %sμg/m³", zh07.getPM_1())) log.info(string.format("pm2.5 %sμg/m³", zh07.getPM_2_5())) log.info(string.format("pm10 %sμg/m³", zh07.getPM_10())) end end) ]] local zh07 = {} -- local sys = require "sys" local uartid -- 根据实际设备选取不同的uartid local rbuff --[[ zh07初始化 @api zh07.init(uart_id) @number uart_id uartid @return bool 成功返回true @usage zh07.init(1) ]] function zh07.init(uart_id) uartid = uart_id --初始化 local result = uart.setup( uartid,--串口id 9600,--波特率 8,--数据位 1--停止位 ) if result ~= 0 then log.info("zh07 init_fail") return false end -- 收取数据会触发回调, 这里的"receive" 是固定值 uart.on(uartid, "receive", function(id, len) local s = "" s = uart.read(id, len) if #s == 0 then return end local hexStr, hexLen = s:toHex() log.info("ZH07", "receive", hexStr, hexLen) if string.sub(hexStr,1,2) == "42" and hexLen == 64 then rbuff = s end end) log.info("zh07 init_ok") return true end --[[ 获取zh07 PM1.0数据 @api zh07.getPM_1() @return number PM1.0数据 @usage local zh07_pm1 = zh07.getPM_1() log.info(string.format("pm1.0 %sμg/m³", zh07_pm1)) ]] function zh07.getPM_1() if not rbuff then return 0 end return rbuff:byte(11)*256 + rbuff:byte(12) end --[[ 获取zh07 PM2.5数据 @api zh07.getPM_2_5() @return number PM2.5数据 @usage local zh07_pm25 = zh07.getPM_2_5() log.info(string.format("pm2.5 %sμg/m³", zh07_pm25)) ]] function zh07.getPM_2_5() if not rbuff then return 0 end return rbuff:byte(13)*256 + rbuff:byte(14) end --[[ 获取zh07 PM10数据 @api zh07.getPM_10() @return number PM10数据 @usage local zh07_pm10 = zh07.getPM_10() log.info(string.format("pm10 %sμg/m³", zh07_pm10)) ]] function zh07.getPM_10() if not rbuff then return 0 end return rbuff:byte(15)*256 + rbuff:byte(16) end return zh07