使用SHT3x-DIS温湿度传感器的I2C案例 原创 精华
前言
本文将介绍I2C总线、SHT3x DIS温度传感器的相关知识以及OpenHarmony的HDF驱动和NAPI框架的使用方法。
一、I2C总线原理
I2C总线是飞利浦公司开发的一种双向二线制同步串行总线。只需要两根线便可在连接于总线上的器件之间进行传输信息。I2C通信为点对点通信,存在主设备和从设备之分。主从设备通过两根线进行通信,其中两根线分别是SDA和SCL,其中SDA为数据线,SCL为时钟线。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。
通信过程包含应答响应,时钟同步。传输的数据字节格式有一定要求,每个字节必须为8位,每次发送的字节字数不受限制,每个字节后面必须跟一位校验位。应答响应,数据传输必须有响应,由主机产生,在响应中发送器将时钟线电平被拉高,接收器将电平拉低,保持稳定的电压差;时钟同步,数据传输只发生在时钟信号的高电平期间,所以需要同步双方时钟信号以确保数据的准确性;
二、传感器SHT3X DIS
Sensirion SHT3x-DIS湿度和温度传感器基于CMOSens®传感器芯片,更加智能、可靠,精度更高。SHT3x-DIS具有增强的信号处理能力、两个独特的用户可选I2C地址,通信速度高达1MHz。SHT35-DIS的典型相对湿度 (RH) 精度为±1.5%,典型温度精度为±0.1°C。SHT3x-DIS具有2.5mm x 2.5mm x 0.9mm(长x宽x高)占位面积,电源电压范围为2.4V至5.5V。
2.1 特性
- 完全校准、线性化和温度补偿的数字输出
- I2C接口,通信速度高达1MHz,具有两个用户可选地址
- SHT35的典型精度为+/-1.5% RH和+/-0.1°C
- 启动和测量速度极快
- 2.15V到5.5V的宽电源电压范围
- 小型8引脚DFN封装
2.2 引脚介绍
主要引脚SDA,SCL,VCC,GND。
2.3 通信过程
- 开始测量
在开始测量前,主设备必须先把开始测量的信号发送到传感器。发送的信号被称为I2C写入标头,由7比特的I2C设备地址和一个·0(0表示写入,1表示读取),再加上16比特的测量命令构成。当传感器接收到信号时,将会把SDA信号先拉低,响应信号ACK,在第八个时钟信号下降沿时表示传感器接收到了主设备的信号,开始测量。
-
模式
传感器数据采集模式多种多样,我们可以选择不同的方式进行测量以满足不同的应用场景,这便是以上提到写入表头最后两位字节表示的是测量命令,大类分为两种采集模式。
单次数据采集模式
周期性数据采集模式
-
其它命令
除此之外,传感器里还设置了其它命令,可在传感器说明文档中查看。 -
数据
当测量开始时,主设备便可以接收到信号,而此时标头要使用读取标头,将0改为1。传感器返回的后六位字节便是测量到的温度和相对湿度的数据。其中六个字节,高三位为两位温度和一位校验位,低三位为两位相对湿度和一位校验位,采用CRC校验。
数据转换公式如下:
三、简单实现
以下代码只是简单地演示如何使用传感器,没有过多的规范要求。
3.1 接口定义
3.2 主函数
四、采用标准系统HDF驱动实现
使用到:九联科技unionpi_tiger开发板,SHT3x-DIS温湿度传感器,OpenHarmony源码。
4.1 配置产品驱动(一般厂商都会配置好,若没配置可以跳转至官方文档查看详细教程)
- 实例化驱动入口:
实例化HdfDriverEntry结构体成员。
调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。 - 配置属性文件:
在device_info.hcs文件中添加deviceNode描述。
- 实例化I2C控制器对象:
初始化I2cCntlr成员。
实例化I2cCntlr成员I2cMethod和I2cLockMethod。
p.s 使用到的九联开发板已有相关配置,以上配置无需做更改或添加。
- 一个结构三个接口
- I2cMsg结构体:用于传输数据载体,由地址addr,缓存buf,缓存长度len,信号标记flags组成。
- 三个接口分别为I2cOpen()、I2cClose()、I2cTransfer()。
4.3 代码
- 头文件
- 结构体与接口
- 主函数
至此,成功通过OpenHarmony的HDF驱动来获取传感器的值
五、实现NAPI
5.1 模块定义与注册
5.2 接口定义与注册
5.3 北向接口
- NAPI
- Index.ets
5.4 效果演示
总结
整个案例整体思路都是围绕着I2C通信流程和SHT3x温度传感器工作流程展开的。而在HDF驱动的使用中,我们会发现,获取设备句柄的方式我们只用一个数字就可以,相比之前的"/dev/i2c-5"更加简易明了,这也是HDF的特性之一。NAPI的实现,将整个OpenHarmoy南北向打通,使得北向程序可通过本地的接口就可以访问传感器的温湿度。
冲着作者的名字我就得给作者点赞