锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

iic温度传感器sht30

时间:2022-07-23 20:30:00 电阻模拟温度传感器

如何用开发板实现?iic功能

目录名称

  • 如何用开发板实现?iic功能
    • 简介
    • 材料准备
    • 步骤
    • 常见问题
      • 1、i2c每次读写数据都需要setup一次吗?
      • 2、i2c模块能从设备中进行通信吗?
      • 3、i2c在通信过程中,主从机电平不同,需要进行电平转换吗?
    • 相关信息及购买链接

简介

Air724UG模块提供3个I2C接口,速率支持FAST(400KHz)、SLOW(100KHz)、3500KHz。外部地址支持0x00-0x7f。
iic接口是物联网中最常用的接口。本文介绍了如何使用它Air724开发板,和PC端搭建一个iic功能演示。功能开发指南

材料准备

  1. EVB_Air724UG_A13开发板包括天线SIM卡,USB线。
  2. PC电脑,sht30温湿度传感器
  3. luat开发环境:环境建设方法
    图片.png

步骤

本文以demo/iic这个DEMO为例,SHT演示30温湿度传感器。
1.定义iic id单号、设备地址、单读命令

local i2c_id = 2 -- I2C id号local i2c_addr = 0x45 -- i2c地址local TEMP_MEASURE = {0x2C,0x06} 

2.定义校验算法的函数

-- CRC8校验算法-- data table-- num : 数据(table)长度-- @return crc值local function Calc_CRC8(data,num)    local crc,bits,bytes = 0xFF,0,0    for bytes = 1,num do        crc = bit.bxor(crc,data[bytes])        for bits = 8,1,-1 do            if (bit.band(crc,0x80) ~= 0x0) then                crc = bit.bxor(bit.clear(bit.lshift(crc,八、九、十),x31)       else                crc = bit.lshift(crc,1)               end        end    end    return crcend

3.定义读取传感器数据函数

-- 读取传感器function sht30()    if i2c.setup(i2c_id,i2c.SLOW,i2c_addr) ~= i2c.SLOW then        i2c.close(i2c_id)        log.warn("SHT30","open i2c error.")        return    end      i2c.send(i2c_id,i2c_addr,TEMP_MEASURE)    local RevData = i2c.recv(i2c_id,i2c_addr,6)    i2c.close(i2c_id)    if RevData and #RevData >= 6 then        log.warn("SHT30",RevData:toHex())        解包       local _,t_H,t_L,t_crc,h_H,h_L,h_crc = pack.unpack(RevData,'b         - 数据转换得到温度和湿度的转换local rawT,rawR = t_H * 256 or t_L,h_H * 256 or h_L -- 左移为*256              local temp,humi = -45   rawT * 175 / 65535,               math.ceil(100 * rawR         nil)        local T_Tbl,R_Tbl = {t_H,t_L},{h_H,h_L}        local T_crc,R_crc = Calc_CRC8(T_Tbl,2),Calc_CRC8(R_Tbl,2)           if T_crc ~= t_crc then temp = nil end        if R_crc ~= h_crc then humi = nil end        if temp and humi then      body      四舍五入处理            temp = string.format("%.01f",temp)            humi = string.format("%d",humi)      local tempBin = pack.pack(">H",temp * 10)      local humiBin = pack.pack("b",humi)          返回            log.warn("SHT30","temp =",temp," humi =",humi)            return temp,humi        end    else        log.warn("SHT30","read sensor data fail..")    endend

4.启动循环定时器,间隔2s读取传感器数据一次

sys.timerLoopStart(sht30,2000)

5.理解和修改DEMO后将demo将相应的底包下载到开发板,下载方式在此不详细说明,请参考环境建设中的烧录章节。
6. 下载后重启开发板luatools打印的数据可以在上面看到度单位是°C,湿度单位为%RH

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-g6NQHwMh-1624772605154)(http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20210422163612488_微信截图_20210422163321.png “undefined”)]

常见问题

http://doc.openluat.com/article/2111/0

1、i2c每次读写数据都需要setup一次吗?

不需要

正常的业务逻辑如下:
i2c.setup
…这里可以多次读写数据
i2c.close
setup之后,只要没有close,数据可以反复读写
一旦实施close,在下次阅读数据之前,必须再次阅读数据setup

2、i2c模块能从设备中进行通信吗?

注意:模块I2C只能做主设备,外部需要上拉,配置FAST上拉电阻值不得大于4.7K。

3、i2c在通信过程中,主从机电平不同,需要进行电平转换吗?

若设备参考电平不一致,请注意电平转换。如下图所示:

相关信息及购买链接

  • 常用iic API
  • Air724UG开发板购买链接
  • Air724 开发板使用说明书

相关文章