main.lua 1.8 KB

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