如何用开发板实现?iic功能
目录名称
- 如何用开发板实现?iic功能
-
- 简介
- 材料准备
- 步骤
- 常见问题
-
- 1、i2c每次读写数据都需要setup一次吗?
- 2、i2c模块能从设备中进行通信吗?
- 3、i2c在通信过程中,主从机电平不同,需要进行电平转换吗?
- 相关信息及购买链接
简介
Air724UG模块提供3个I2C接口,速率支持FAST(400KHz)、SLOW(100KHz)、3500KHz。外部地址支持0x00-0x7f。 iic接口是物联网中最常用的接口。本文介绍了如何使用它Air724开发板,和PC端搭建一个iic功能演示。功能开发指南
材料准备
- EVB_Air724UG_A13开发板包括天线SIM卡,USB线。
- PC电脑,sht30温湿度传感器
- luat开发环境:环境建设方法
步骤
本文以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 开发板使用说明书