lm75.lua 1.6 KB

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