HDC2080.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. --- 模块功能:I2C功能测试.
  2. -- @author openLuat
  3. -- @module i2c.testI2c
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.28
  7. module(...,package.seeall)
  8. require"utils"
  9. require "powerKey"
  10. --pmd.ldoset(5,pmd.LDO_VMMC)
  11. --i2c.set_id_dup(0)
  12. local i2cid = 2
  13. local i2cslaveaddr = 0x40
  14. local cmd,i ={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0xC,0x0D,0x0E,0X0F,0xFC,0xFD,0xFE,0xFF}
  15. -- sys.taskInit(function()
  16. -- if i2c.setup(i2cid,100000) ~= 100000 then
  17. -- print("init fail")
  18. -- return
  19. -- end
  20. -- for i=1,#cmd,1 do
  21. -- --向从设备i2cslaveaddr发送寄存器地址cmd[i]
  22. -- i2c.send(i2cid,i2cslaveaddr,cmd[i])
  23. -- --向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
  24. -- print("testI2c.init",string.format("%02X",cmd[i]),string.toHex(i2c.recv(i2cid,i2cslaveaddr,2)))
  25. -- i2c.close(i2cid)
  26. -- end
  27. -- end)
  28. local function longCb()
  29. sys.taskInit(function()
  30. if i2c.setup(i2cid,100000) ~= 100000 then
  31. print("init fail")
  32. return
  33. end
  34. for i=1,#cmd,1 do
  35. --向从设备i2cslaveaddr发送寄存器地址cmd[i]
  36. i2c.send(i2cid,i2cslaveaddr,cmd[i])
  37. --向从设备i2cslaveaddr发送要写入从设备寄存器内的数据cmd[i+1]
  38. print("testI2c.init",string.format("%02X",cmd[i]),string.toHex(i2c.recv(i2cid,i2cslaveaddr,6)))
  39. end
  40. i2c.close(i2cid)
  41. end)
  42. end
  43. local function shortCb()
  44. i2c.close(i2cid)
  45. end
  46. sys.taskInit(function()
  47. if i2c.setup(i2cid,100000) ~= 100000 then
  48. print("HDC2080 init fail")
  49. return
  50. end
  51. while true do
  52. sys.wait(3000)
  53. i2c.send(2, 0x40, {0x0F, 0xF9})
  54. sys.wait(10)
  55. i2c.send(i2cid,i2cslaveaddr,0x00)
  56. local zwdata=i2c.recv(i2cid,i2cslaveaddr,4) --读取温湿度数据
  57. local data=string.toHex(zwdata)
  58. --温度数据
  59. TEMP_LOW=string.sub(data,1,2)
  60. TEMP_HIGH=string.sub(data,3,4)
  61. --湿度数据
  62. HUMID_LOW=string.sub(data,5,6)
  63. HUMID_HIGH=string.sub(data,7,8)
  64. --log.debug("i2c",data,TEMP_LOW,TEMP_HIGH,HUMID_LOW,HUMID_HIGH)
  65. local tm=tonumber(TEMP_HIGH..TEMP_LOW,16)
  66. local over_tm=tm/65535*165-40
  67. log.info("HDC2080",(string.format("实际温度%.2f℃\n",over_tm)))
  68. local wd=tonumber(HUMID_HIGH..HUMID_LOW, 16)
  69. local over_wd=wd/65535*100
  70. log.info("HDC1080",string.format("实际湿度%.2f",over_wd).."%")
  71. end
  72. end)
  73. powerKey.setup(3000, longCb, shortCb)