自用库脚本,sht20传感器,参考官方数据手册以及稀饭AM2320demo

温湿度
--- SHT系列 温湿度传感器驱动
-- @module sensor_sht
-- @author DZQ
-- @license MIT
-- @copyright openLuat.com
-- @release 2017.10.19
require "utils"
module(..., package.seeall)
local filename ="sensor_sht"

-- 初始化并打开I2C操作
-- @param I2C 内部ID
-- @return number ,I2C的速率
local function i2c_open(id)
    if i2c.setup(id, i2c.SLOW) ~= i2c.SLOW then
        log.error("I2C.init is: ""fail")
        --i2c.close(id)
    end
end

--- 读取Sht20的温湿度
-- @return int,int,第一个参数是温度,第二个是湿度(都放大了100倍,方便不适用浮点数的情况)
-- @usage tmp, hum = readSht20()
function readSht20()
    local id =2
    i2c_open(id)
    --发送指令:温度测量:0xf3,0xe3。(e:保持主机,f:非)
    i2c.send(id, 0x400xE3)
    -- sys.wait(2)
    local data = i2c.recv(id, 0x403)
    --返回:1[高八位],2[低八位],3[CRC8效验]
    local _,H,L,crc = pack.unpack(data,'b3')
    --log.info(filename,"read data:",TH,TL,crc)
    local tmp =((4393*(H*256+L))/16384)-4685
    --湿度
    i2c.send(id, 0x400xE5)
    data = i2c.recv(id, 0x403)
    i2c.close(id)
    _,H,L,crc = pack.unpack(data,'b3')
    local hum =((3125*(H*256+L))/16384)-600
    log.info(filename,"100*T:",tmp,"100*H:",hum)
    return tmp,hum
end

--- 读取Sht30的温湿度
-- @return int,int,第一个参数是温度,第二个是湿度(都放大了100倍,方便不适用浮点数的情况)
-- @usage tmp, hum = readSht30()
function readSht30()
    local id =2
    i2c_open(id)
    --数值查询,发送指令0x2C06,通过iic发送完毕之后,sht30返回的数值是6个字节的数组
    i2c.send(id, 0x44,{0x2c,0x06})
    --1[温度高八位],2[温度低八位],3[温度crc校验],4[湿度高八位],5[湿度低八位],6[湿度crc校验]
    local data = i2c.recv(id, 0x446)
    i2c.close(id)
    local _,h_H,h_L,h_crc,t_H,t_L,t_crc = pack.unpack(data,'b6')
    local tmp =((4375*(H*256+L))/16384)-4500
    local hum =((2500*(H*256+L))/16384)
    log.info(filename,"100*T:",tmp,"100*H:",hum)
    return tmp,hum
end

--测试
sys.timerLoopStart(readSht20,3000)

  • 发表于 2020-05-07 13:34
  • 阅读 ( 2013 )
  • 分类:默认分类

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
丁小泉ZJ

7 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章