main.lua 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. local sys = require "sys"
  2. -- 初始化并打开I2C操作DHT12
  3. local function read_dht12(id)
  4. --if i2c.setup(id, i2c.SLOW) ~= i2c.SLOW then
  5. -- log.error("I2C.init is: ", "fail")
  6. -- i2c.close(id)
  7. -- return
  8. --end
  9. local addr = 0xB8
  10. i2c.writeReg(id, addr, 0x00, 0x00)
  11. sys.wait(400)
  12. local data = i2c.recv(id, addr, 5)
  13. --i2c.close(id)
  14. log.info("DHT12", data:byte(1), data:byte(2), data:byte(3), data:byte(4), data:byte(5))
  15. --log.info("DHT12 HEX data: ", data:toHex())
  16. -- 分别是湿度整数,湿度小数,温度整数,温度湿度
  17. --[[
  18. local _, h_H, h_L, t_H, t_L = pack.unpack(data, 'b4')
  19. log.info("DHT12 data: ", h_H, h_L, t_H, t_L)
  20. -- 需要考虑温度低于0度的情况, t_L第0位是符号位
  21. local t_L2 = tonumber(t_L)
  22. if t_L2 > 127 then
  23. return h_H .. ".".. h_L, "-" .. t_H .. "." .. tostring(t_L2 - 128)
  24. else
  25. return h_H .. ".".. h_L, t_H .. "." .. t_L
  26. end
  27. ]]
  28. end
  29. sys.timerLoopStart(function() print("READY") end, 3000)
  30. sys.taskInit(function()
  31. while 1 do
  32. print("DHT12", read_dht12(1))
  33. sys.wait(3000)
  34. end
  35. end)
  36. sys.run()