main.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "sht20demo"
  3. VERSION = "1.0.0"
  4. -- sys库是标配
  5. sys = require("sys")
  6. --添加硬狗防止程序卡死
  7. if wdt then
  8. wdt.init(9000) -- 初始化watchdog设置为9s
  9. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  10. end
  11. --本demo演示通过I2C协议去读取SHT20温湿度传感器的过程,并介绍luatos中I2C相关接口的用法。
  12. -- 接线
  13. --[[
  14. SHT20 --- 模块
  15. SDA - GPIO4(I2C SDA) PIN67
  16. SCL - GPIO5(I2C SCL) PIN66
  17. VCC - 3.3V
  18. GND - GND
  19. ]]
  20. --第二种方式,通过软件I2C来驱动
  21. -- 启动个task, 定时查询SHT20的数据
  22. sys.taskInit(function()
  23. local tmp,hum -- 原始数据
  24. local temp,hump -- 真实值
  25. --0100 0000 传感器七位地址
  26. local addr = 0x40
  27. ------------------软件I2C---------------------------------
  28. local io_scl = 5 -- PIN66 default GPIO5
  29. local io_sda = 4 -- PIN67 default GPIO4
  30. local softI2C = i2c.createSoft(io_scl,io_sda)
  31. log.info("i2c", "sw i2c initial", softI2C) --初始化I2C
  32. while true do
  33. i2c.send(softI2C, addr, string.char(0xF3)) --发送0xF3来查询温度
  34. sys.wait(100)
  35. tmp = i2c.recv(softI2C, addr, 2) --读取传感器的温度值
  36. log.info("SHT20", "read tem data", tmp:toHex())
  37. i2c.send(softI2C, addr, string.char(0xF5)) --发送0xF5来查询湿度
  38. sys.wait(100)
  39. hum = i2c.recv(softI2C, addr, 2) --读取传感器湿度值
  40. log.info("SHT20", "read hum data", hum:toHex())
  41. local _,tval = pack.unpack(tmp,'>H') --提取一个按照大端字节序编码的16位无符号整数
  42. local _,hval = pack.unpack(hum,'>H')
  43. log.info("SHT20", "tval hval", tval,hval)
  44. if tval and hval then
  45. --按照传感器手册来计算对应的温湿度
  46. temp = (((17572 * tval) >> 16) - 4685)/100
  47. hump = (((12500 * hval) >> 16) - 600)/100
  48. log.info("SHT20", "temp,humi",string.format("%.2f",temp),string.format("%.2f",hump))
  49. end
  50. sys.wait(1000)
  51. end
  52. end)
  53. -- 用户代码已结束---------------------------------------------
  54. -- 结尾总是这一句
  55. sys.run()
  56. -- sys.run()之后后面不要加任何语句!!!!!