Bläddra i källkod

add: 温湿度传感器cht8305c的驱动

i2s没调通, 那就搞个温湿度传感器吧, 在w800开发板上, 板子本身发热, 测出的温度也高2度左右
Wendal Chen 2 år sedan
förälder
incheckning
be8e3c3e9d
1 ändrade filer med 77 tillägg och 0 borttagningar
  1. 77 0
      script/libs/cht8305c.lua

+ 77 - 0
script/libs/cht8305c.lua

@@ -0,0 +1,77 @@
+--[[
+@module cht8305c
+@summary cht8305c 温湿度传感器
+@version 1.0
+@date    2023.07.21
+@author  wendal
+@usage
+--注意:因使用了sys.wait()所有api需要在协程中使用
+-- 用法实例
+local cht8305c = require "cht8305c"
+i2cid = 0
+i2c_speed = i2c.FAST
+sys.taskInit(function()
+    i2c.setup(i2cid,i2c_speed)
+    cht8305c.init(i2cid)--初始化,传入i2c_id
+    while 1 do
+        local data = cht8305c.get_data()
+        if data and data.RH then
+            local tmp = string.format("RH: %.2f T: %.2f ℃", data.RH*100, data.T)
+            log.info("cht8305c", tmp)
+        else
+            log.info("cht8305c", "读取失败")
+        end
+        sys.wait(1000)
+    end
+end)
+]]
+
+
+local cht8305c = {}
+local sys = require "sys"
+local i2cid
+
+local cht8305c_addr       =   0x40
+
+--[[
+cht8305c初始化
+@api cht8305c.init(i2c_id)
+@number 所在的i2c总线id
+@return bool   成功返回true
+@usage
+cht8305c.init(0)
+]]
+function cht8305c.init(i2c_id)
+    i2cid = i2c_id
+    sys.wait(20)
+    local Manufacture = i2c.readReg(i2cid, cht8305c_addr, 0xFE, 2)
+    -- log.info("cht8305c", "Manufacture", Manufacture and Manufacture:toHex() or "??")
+    if Manufacture and Manufacture:byte() == 0x59 then
+        log.info("cht8305c init_ok")
+        return true
+    else
+        log.info("cht8305c init_fail")
+    end
+end
+
+--[[
+获取cht8305c数据
+@api cht8305c.get_data()
+@return table cht8305c数据
+]]
+function cht8305c.get_data()
+    local data={RH=nil,T=nil}
+    i2c.send(i2cid, cht8305c_addr, string.char(0))
+    sys.wait(22)
+    local tmp = i2c.recv(i2cid, cht8305c_addr, 4)
+    -- log.info("CHT8305C", tmp and tmp:toHex() or "??")
+    if tmp and #tmp == 4 then
+        local _, temp, hum = pack.unpack(tmp, ">HH")
+        data.T = (165 * temp) / 65535.0 - 40
+        data.RH = hum / 65535.0
+        -- log.info("CHT8305C", temp, hum)
+    end
+    return data
+end
+
+return cht8305c