| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- -- LuaTools需要PROJECT和VERSION这两个信息
- PROJECT = "dht12"
- VERSION = "1.0.0"
- -- sys库是标配
- _G.sys = require("sys")
- -- https://datasheet.lcsc.com/szlcsc/DHT12-Digital-temperature-and-humidity-sensor_C83989.pdf
- -- Air302只有一个i2c, id=0
- -- 如果读不到数据, 请尝试以下操作
- -- 1. 调换SCL和SDA
- -- 2. 确保SCL和SDA均有上拉到VCC(3.3v), 1k~10k
- -- -- 初始化并打开I2C操作DHT12
- -- local function read_dht12(id)
- -- local data = i2c.readReg(id, 0x5C, 0, 5)
- -- if not data then
- -- log.info("i2c", "read reg fail")
- -- return
- -- end
- -- log.info("DHT12 HEX data: ", data:toHex())
- -- -- 分别是湿度整数,湿度小数,温度整数,温度湿度
- -- local _, h_H, h_L, t_H, t_L,crc = pack.unpack(data, 'b5')
- -- log.info("DHT12 data: ", h_H, h_L, t_H, t_L)
- -- -- 计算校验和, 前4位的值相加应该等于最后一位的值
- -- if (((h_H + h_L + t_H + t_L) & 0xFF )) ~= crc then
- -- log.info("DHT12", "check crc fail")
- -- return "0.0", "0.0"
- -- end
- -- -- 需要考虑温度低于0度的情况, t_L第0位是符号位
- -- local t_L2 = tonumber(t_L)
- -- if t_L2 > 127 then
- -- return h_H .. ".".. h_L, "-" .. t_H .. "." .. tostring(t_L2 - 128)
- -- else
- -- return h_H .. ".".. h_L, t_H .. "." .. t_L
- -- end
- -- end
- sys.taskInit(function()
- local id = 0--i2c的id,请按需更改
- while 1 do
- sys.wait(5000) -- 5秒读取一次
- i2c.setup(id, i2c.SLOW)
- --log.info("dht12", read_dht12(0)) -- 如果想用传统方式读取,请取消read_dht12方法的注释
- log.info("dht12", i2c.readDHT12(id))
- i2c.close(id)
- end
- end)
- -- 用户代码已结束---------------------------------------------
- -- 结尾总是这一句
- sys.run()
- -- sys.run()之后后面不要加任何语句!!!!!
|