lm75.lua 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. --[[
  2. @module lm75
  3. @summary lm75 温度传感器 支持lm75a lm75b
  4. @version 1.0
  5. @date 2022.04.12
  6. @author Dozingfiretruck
  7. @usage
  8. --注意:因使用了sys.wait()所有api需要在协程中使用
  9. -- 用法实例
  10. local lm75 = require "lm75"
  11. i2cid = 0
  12. i2c_speed = i2c.FAST
  13. sys.taskInit(function()
  14. i2c.setup(i2cid,i2c_speed)
  15. lm75.init(i2cid)--初始化,传入i2c_id
  16. while 1 do
  17. local lm75_data = lm75.get_data()
  18. if lm75_data then
  19. log.info("lm75_data", lm75_data.."℃")
  20. end
  21. sys.wait(1000)
  22. end
  23. end)
  24. ]]
  25. local lm75 = {}
  26. local sys = require "sys"
  27. local i2cid
  28. local LM75_ADDRESS_ADR = 0x48
  29. ---器件所用地址
  30. local LM75_CONF = 0x01 --配置寄存器
  31. local LM75_TEMP = 0x00 --温度寄存器
  32. local LM75_TOS = 0x03 --过热关断阈值寄存器
  33. local LM75_THYST = 0x02 --滞后寄存器
  34. --[[
  35. lm75_data 初始化
  36. @api lm75_data.init(i2c_id)
  37. @number i2c_id i2c_id
  38. @return bool 成功返回true
  39. @usage
  40. lm75_data.init(0)
  41. ]]
  42. function lm75.init(i2c_id)
  43. i2cid = i2c_id
  44. return true
  45. end
  46. --[[
  47. 获取 lm75 数据
  48. @api lm75.get_data()
  49. @return table lm75 数据
  50. @usage
  51. local lm75_data = lm75.get_data()
  52. if lm75_data then
  53. log.info("lm75_data", lm75_data.."℃")
  54. end
  55. ]]
  56. function lm75.get_data()
  57. local temp
  58. i2c.send(i2cid, LM75_ADDRESS_ADR,LM75_TEMP)
  59. local _,data = pack.unpack(i2c.recv(i2cid, LM75_ADDRESS_ADR, 2),">h")
  60. if data then
  61. if bit.isclear(bit.rshift(data,5), 10) then
  62. temp = bit.rshift(data,5)*0.125
  63. else
  64. temp = -(bit.bxor(bit.rshift(data,5),0x3F8)+1)*0.125
  65. end
  66. end
  67. return temp
  68. end
  69. return lm75