|
@@ -12,39 +12,42 @@ _G.sys = require("sys")
|
|
|
-- 1. 调换SCL和SDA
|
|
-- 1. 调换SCL和SDA
|
|
|
-- 2. 确保SCL和SDA均有上拉到VCC(3.3v), 1k~10k
|
|
-- 2. 确保SCL和SDA均有上拉到VCC(3.3v), 1k~10k
|
|
|
|
|
|
|
|
--- 初始化并打开I2C操作DHT12
|
|
|
|
|
-local function read_dht12(id)
|
|
|
|
|
- i2c.setup(id, i2c.SLOW)
|
|
|
|
|
-
|
|
|
|
|
- local data = i2c.readReg(id, 0x5C, 0, 5)
|
|
|
|
|
- if not data then
|
|
|
|
|
- log.info("i2c", "read reg fail")
|
|
|
|
|
- return
|
|
|
|
|
- end
|
|
|
|
|
-
|
|
|
|
|
- i2c.close(id)
|
|
|
|
|
- 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
|
|
|
|
|
|
|
+-- -- 初始化并打开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()
|
|
sys.taskInit(function()
|
|
|
|
|
+ local id = 0
|
|
|
while 1 do
|
|
while 1 do
|
|
|
sys.wait(5000) -- 5秒读取一次
|
|
sys.wait(5000) -- 5秒读取一次
|
|
|
- log.info("dht12", read_dht12(0))
|
|
|
|
|
|
|
+ i2c.setup(id, i2c.SLOW)
|
|
|
|
|
+ --log.info("dht12", read_dht12(0)) -- 传统方式读取,请取消read_dht12方法的注释
|
|
|
|
|
+ log.info("dht12", i2c.readDHT12(id))
|
|
|
|
|
+ i2c.close(id)
|
|
|
end
|
|
end
|
|
|
end)
|
|
end)
|
|
|
|
|
|