嵌入式 STM32 SHT31温湿度传感器

简介: 嵌入式 STM32 SHT31温湿度传感器

简介

什么是SHT31?  一主机多从机--通过寻址的方式--每个从机都有唯一的地址(器件地址0x44+引脚地址)<<1 + 读写位(读1写0)

SHT31新一代 Sensirion 湿度和温度传感器在尺寸与智能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚 DFN 封装, 底面 3 x 3mm ,高度 1.1mm。传感器输出经过标定的数字信号,标准 I2C 格式。

1、原理图

 

配置为通用开漏输出

PB6--SCL  

PB7--SDA

器件地址  引脚地址--ADDR引脚的高低电平

0x44+  0

          1

2、时序说明

数据传输

SDA 引脚用于传感器的数据输入和输出。当向传感器发送命令时, SDA 在串行时钟(SCL)的上升沿

有效, 且当 SCL 为高电平时, SDA 必须保持稳定。在 SCL 下降沿之后, SDA 值可被改变。为确保通讯

安全, SDA 的有效时间在 SCL 上升沿之前和下降沿之后应该分别延长至 TSU and THO -参考图 9。当从传感器读取数据时, SDA 在 SCL 变低以后有效(TV),且维持到下一个 SCL 的下降沿 。

为避免信号冲突,微处理器(MCU)必须只能驱动SDA 和 SCL 在低电平。需要一个外部的上拉电阻(例如: 10kΩ)将信号提拉至高电平。上拉电阻通常可能已包含在微处理器的 I/O 电路中。

起始信号

结束信号

3、SHT31读写数据

SHT31指令集

了解一下如下SHT31命令集:

读数据

工作顺序为:先发送IIC通信开始标志Start后,写入左移一位的地址,并将空出来的位写0表示写数据。当收到传感器应答后,即可发送命令的高八位,再次等待应答,再发送余下的低八位。然后等待ACK应答即可。

 

(读 R:‘1’,写 W:‘0’)。在第 8 个 SCL时钟下降沿之后,通过拉低 SDA 引脚(ACK 位),指示传感器数据接收正常。

校验:发送一次读取指令,收到6字节数据;期中1、2字节数温度的,第三字节是温度的校验字节;4、5字节是湿度的,第6字节是湿度的校验字节。校验方式采用。

温湿度转换

4、温湿度转换应用

sht3x初始化

读取温湿度

/*********************************************************************************************************
* 函 数 名 : Sht3x_Read_TemperatureHumidity
* 功能说明 : 读取SHT3x温湿度数据
* 形    参 : HT:存储温湿度的结构体指针
* 返 回 值 : 无
*********************************************************************************************************/ 
int Sht3x_Read_TemperatureHumidity(Sht3x_TypeDef *temp)
{
  unsigned char buff[6] = {0};
  unsigned char i = 0;
  IIC_Start();                    //起止信号
  IIC_WriteByte(SHT3X_ADDR<<1 | IIC_WRITE);     //器件地址+写
  if(IIC_Wait_ACK() == ACK){              //对方应答了,继续执行
    IIC_WriteByte(SHT3X_READ_TEMP_HUM>>8);      //命令的高位
    if(IIC_Wait_ACK() == ACK){            //对方应答了,继续执行
      IIC_WriteByte(SHT3X_READ_TEMP_HUM&0xff);  //命令的低位
      if(IIC_Wait_ACK() == ACK){          //对方应答了,继续执行
        do{
          if(++i > 20){
            return 4;
          }
          IIC_Stop();
          Delay_Ms(2);              //等待对方采集好数据
          IIC_Start();
          IIC_WriteByte(SHT3X_ADDR<<1 | IIC_READ);//询问是否采集好了数据
        }while(IIC_Wait_ACK() != ACK);        //如果条件成立,表示传感器采集数据未完成
        for(i=0; i<5; i++){
          buff[i] = IIC_ReadByte(ACK);
        }
        buff[5] = IIC_ReadByte(NACK);
        IIC_Stop();
    }
    //转换温湿度
if(crc8(buff, 2) == buff[2] && crc8(&buff[3], 2) == buff[5])
{
  temp->temperature = (buff[0]<<8|buff[1])/65535.0*175-45;
  temp->humidity = (buff[3]<<8|buff[4])/65535.0*100;
}


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
传感器
【STM32】I2C练习,SHT3X温度传感器的数据读取
【STM32】I2C练习,SHT3X温度传感器的数据读取
|
2天前
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计2
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
303 0
|
2天前
|
传感器 监控 C#
使用STM32实现一个简单的温湿度监控系统
使用STM32实现一个简单的温湿度监控系统
47 0
|
9月前
|
传感器
STM32(HAL库)驱动GY30光照传感器通过串口进行打印
STM32(HAL库)驱动GY30光照传感器通过串口进行打印
|
2天前
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计1
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
292 0
|
2天前
|
芯片
嵌入式STM32中时钟系统详细分析
嵌入式STM32中时钟系统详细分析
65 0
嵌入式STM32中时钟系统详细分析
|
7月前
|
数据格式
嵌入式 STM32 红外遥控
嵌入式 STM32 红外遥控
|
7月前
|
网络协议 算法 网络架构
嵌入式 STM32 通讯协议--MODBUS
嵌入式 STM32 通讯协议--MODBUS
|
7月前
|
存储 机器人 芯片
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
|
7月前
|
C语言
嵌入式 STM32 使用C语言打开读取歌曲目录
嵌入式 STM32 使用C语言打开读取歌曲目录