no_block_test.lua 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. -- 测试SHT30,addr脚接地
  2. --7bit地址,不包含最后一位读写位
  3. local addr = 0x44
  4. -- 按照实际芯片更改编号哦
  5. local i2cid = 0
  6. sys.taskInit(function()
  7. i2c.setup(0, i2c.SLOW)
  8. local cbTopic = "I2CDONE"
  9. local txbuff = zbuff.create(8)
  10. local rxbuff = zbuff.create(8)
  11. txbuff:pack(">H", 0x2c0d)-- 单次中等精度测量命令
  12. local result, devid, succ, errorcode, crc1, crc2, buff,T,H
  13. while true do
  14. result = i2c.xfer(i2cid,addr,txbuff,nil,0,cbTopic,100)
  15. if result then
  16. result, devid, succ, errorcode = sys.waitUntil(cbTopic)
  17. else
  18. log.error("启动i2c失败")
  19. end
  20. if not result or not succ then
  21. log.error("sht30不存在", errorcode)
  22. sys.wait(1000)
  23. else
  24. sys.wait(1000)
  25. result = i2c.xfer(i2cid, addr, nil, rxbuff, 6, cbTopic, 100)
  26. if result then
  27. result, devid, succ, errorcode = sys.waitUntil(cbTopic)
  28. end
  29. if not result or not succ then
  30. log.error("sht30获取数据失败", errorcode)
  31. else
  32. crc1 = crypto.crc8(rxbuff:query(0,2), 0x31, 0xff, false)
  33. crc2 = crypto.crc8(rxbuff:query(3,2), 0x31, 0xff, false)
  34. if crc1 == rxbuff[2] and crc2 == rxbuff[5] then
  35. T = rxbuff:query(0, 2, true) * 175.0 / 65535.0 - 45.0
  36. H = rxbuff:query(3, 2, true) * 100.0 /65535.0
  37. log.info("温度", T, "湿度", H)
  38. else
  39. log.error("sht30 数据校验错误")
  40. end
  41. end
  42. end
  43. --log.info(os.date("%Y-%m-%d %H:%M:%S"))
  44. end
  45. end)