main.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 - I2C1_SDA(GPIO4) PIN67
  16. SCL - I2C1_SCL(GPIO5) 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. -- 按接线选择配置
  28. -- 1: HW I2C1
  29. local id = 1
  30. ------------------硬件I2C---------------------------------
  31. -- 配置IO复用
  32. gpio.setup(5, 0, nil, nil, 2) -- PIN66 GPIO5 FUNC2-I2C1 SCL
  33. gpio.setup(4, 0, nil, nil, 2) -- PIN67 GPIO4 FUNC2-I2C1 SDA
  34. log.info("i2c".. id, "hw i2c initial", i2c.setup(id)) --初始化I2C
  35. while true do
  36. i2c.send(id, addr, string.char(0xF3)) --发送0xF3来查询温度
  37. sys.wait(100)
  38. tmp = i2c.recv(id, addr, 2) --读取传感器的温度值
  39. log.info("SHT20", "read tem data", tmp:toHex())
  40. i2c.send(id, addr, string.char(0xF5)) --发送0xF5来查询湿度
  41. sys.wait(100)
  42. hum = i2c.recv(id, addr, 2) --读取传感器湿度值
  43. log.info("SHT20", "read hum data", hum:toHex())
  44. local _,tval = pack.unpack(tmp,'>H') --提取一个按照大端字节序编码的16位无符号整数
  45. local _,hval = pack.unpack(hum,'>H')
  46. log.info("SHT20", "tval hval", tval,hval)
  47. if tval and hval then
  48. --按照传感器手册来计算对应的温湿度
  49. temp = (((17572 * tval) >> 16) - 4685)/100
  50. hump = (((12500 * hval) >> 16) - 600)/100
  51. log.info("SHT20", "temp,humi",string.format("%.2f",temp),string.format("%.2f",hump))
  52. end
  53. sys.wait(1000)
  54. end
  55. end)
  56. -- 用户代码已结束---------------------------------------------
  57. -- 结尾总是这一句
  58. sys.run()
  59. -- sys.run()之后后面不要加任何语句!!!!!