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

iic温度传感器sht30

时间:2022-12-07 12:30:00 3b6传感器32002105温度湿度传感器iic

如何用开发板实现?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, 1), 8, 9, 10), 0x31)             else                 crc = bit.lshift(crc, 1)             end         end     end     return crc end  

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, 'b6')         -- 通过数据转换获得温湿度         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 / 65535)         -- 数据检查(返回正确值,否则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..")     end end  

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 开发板使用说明书
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章