CJMCU3001.lua 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. PROJECT = "sensor"
  2. VERSION = "1.0.0"
  3. require "log"
  4. require "sys"
  5. require "misc"
  6. -- i2c ID
  7. i2cid = 2
  8. -- i2c 速率
  9. --#define DEFAULT_CONFIG_800 1100 1100 0001 0000 // 800ms
  10. local DEFAULT_CONFIG_800 =0xCC10
  11. local RESULT_REG = 0x00
  12. local CONFIG_REG = 0x01
  13. local LOWLIMIT_REG = 0x02
  14. local HIGHLIMIT_REG = 0x03
  15. local MANUFACTUREID_REG = 0x7E
  16. local DEVICEID_REG = 0x7F
  17. local addr = 0x44
  18. local speed = 100000
  19. local function I2C_Write_Byte_CJMCU3001(regAddress,p1,p2)
  20. i2c.send(i2cid, addr, {regAddress,p1,p2})
  21. end
  22. local function I2C_Read_Byte_CJMCU3001(regAddress)
  23. i2c.send(i2cid, addr, regAddress)
  24. local rdstr = i2c.recv(i2cid, addr, 1)
  25. log.info("rdstr:toHex()",rdstr:toHex())
  26. return rdstr:byte(1)
  27. end
  28. local function I2C_Read_Bytes_CJMCU3001(regAddress,cnt)
  29. i2c.send(i2cid, addr, regAddress)
  30. local rdstr = i2c.recv(i2cid, addr, cnt)
  31. log.info("rdstr:toHex()",rdstr:toHex())
  32. return rdstr
  33. end
  34. -- 初始化
  35. function init()
  36. if i2c.setup(i2cid, speed, addr) ~= speed then
  37. log.error("i2c", "setup fail", addr)
  38. return
  39. end
  40. local whoid = I2C_Read_Bytes_CJMCU3001(DEVICEID_REG,2)
  41. if whoid:byte(1) ==0x30 and whoid:byte(2) ==0x01 then
  42. log.info("===================dev is ok========================")
  43. else
  44. log.info("i2c dev id is wrong!")
  45. return false
  46. end
  47. local manufid = I2C_Read_Bytes_CJMCU3001(MANUFACTUREID_REG,2)
  48. log.info("dev manufid",string.format("0x%02X%02X",manufid:byte(1),manufid:byte(2)))
  49. local devcfg = I2C_Read_Bytes_CJMCU3001(CONFIG_REG,2)
  50. log.info("dev config",string.format("0x%02X%02X",devcfg:byte(1),devcfg:byte(2)))
  51. local lowlimit = I2C_Read_Bytes_CJMCU3001(LOWLIMIT_REG,2)
  52. log.info("dev lowlimit",string.format("0x%02X%02X",lowlimit:byte(1),lowlimit:byte(2)))
  53. local higlimit = I2C_Read_Bytes_CJMCU3001(HIGHLIMIT_REG,2)
  54. log.info("dev higlimit",string.format("0x%02X%02X",higlimit:byte(1),higlimit:byte(2)))
  55. I2C_Write_Byte_CJMCU3001(CONFIG_REG,0xCC,0X10)
  56. log.info("dev i2c init_ok")
  57. return true
  58. end
  59. --获取加速度计的原始数据
  60. local function TEST_CJMCU3001()
  61. local val = I2C_Read_Bytes_CJMCU3001(RESULT_REG,2)
  62. local raw = (val:byte(1)) *256 + (val:byte(2))
  63. local result = bit.band(raw, 0x0FFF)
  64. local expont = bit.band(raw, 0xF000)
  65. expont = bit.rshift(expont,12)
  66. return result * 0.01 * math.pow(2, expont)
  67. end
  68. sys.taskInit(function()
  69. sys.wait(4000)
  70. if init() then
  71. while true do
  72. local val = TEST_CJMCU3001()
  73. log.info("lux=", val)
  74. sys.wait(1000)
  75. end
  76. end
  77. end)
  78. sys.init(0, 0)
  79. sys.run()