当前位置: 首页 > news >正文

STM32G474单片机开发入门(二十二)SHT30温湿度传感器模块实战

文章目录

    • 一.概要
    • 二.SHT30主要性能参数
    • 三.SHT30温度传感器内部框图
    • 四.SHT30模块跟单片机板子接线和通讯时序
      • 1.单片机跟SHT30模块连接示意图
      • 2.单片机跟SHT30模块通讯流程与时序
    • 五.STM32单片机SHT30温度传感器实验
      • 1.硬件准备
      • 2.创建CubeMX工程
      • 3.实验结果
    • 六.小结

一.概要

SHT30是瑞士Sensirion公司推出的高精度数字温湿度传感器,属于SHT3x系列中的入门型号,采用I2C通信接口,广泛应用于工业控制、智能家居等领域。
SHT30模块如下图所示
在这里插入图片描述
模块上的芯片SHT30如下图所示
在这里插入图片描述

二.SHT30主要性能参数

测量范围‌
温度:-40℃~90℃(精度±0.3℃)
湿度:0~100%RH(精度±3%RH)‌
IIC通讯速率最高达到1MHZ。

模块接口说明:
1.VCC 外接3.3V-5V。
2.GND 外接GND。
3.SDA接单片机IIC接口的SDA。
4.SCL接单片机IIC接口的SCL。

三.SHT30温度传感器内部框图

SHT30内部组成基于CMOS-MEMS技术,内部是由感湿原件,感温元件,14位ADC,‌OTP存储等组成。
在这里插入图片描述

SHT30芯片参考硬件设计如下,ADDR一般接地,IIC通讯地址高7位就是0x44,读数据地址就是0x89,写数据地址就是0x88。
在这里插入图片描述

四.SHT30模块跟单片机板子接线和通讯时序

1.单片机跟SHT30模块连接示意图

在这里插入图片描述

2.单片机跟SHT30模块通讯流程与时序

单片机与SHT30一般操作命令流程如下:
复位操作‌:发送软复位命令(0x30A2)以初始化传感器‌。
工作模式‌设置:设置周期性测量,需通过特定命令(如0x2236)配置‌。
读数据:发送读命令(0xE000)后,接收6字节数据(温度高/低8位+CRC,湿度高/低8位+CRC)‌。
SHT30的CRC校验采用8位循环冗余校验(CRC-8)算法。

单片机与SHT30模块通讯读数据时序如下图所示。
在这里插入图片描述
CRC生成多项式‌:固定为0x31(二进制00110001),对应x⁸+x⁵+x⁴+1‌,仅对温度(2字节)和湿度(2字节)的有效数据进行校验,CRC校验码单独存储于数据帧的第3和第6字节‌。
温度CRC校验:比较计算值与接收到的第3字节(CRC_Temp)。
湿度CRC校验:比较计算值与接收到的第6字节(CRC_Humi)‌。

CRC函数参考C代码:

uint8_t CheckCrc8(uint8_t *data, uint8_t len) {uint8_t crc = 0xFF;for (uint8_t i = 0; i < len; i++) {crc ^= data[i];for (uint8_t j = 0; j < 8; j++) {if (crc & 0x80) crc = (crc << 1) ^ 0x31;else crc = (crc << 1);}}return crc;
}

五.STM32单片机SHT30温度传感器实验

1.硬件准备

STLINK接STM32G474RET6开发板,STLINK接电脑USB口, 把OLED模块插在板子上,用 4 根杜邦线把开发板3.3V与传感器的 VCC,开发板 GND 与传感器的 GND,开发板PC6脚与传感器的SCL,开发板PC7脚与传感器的SDA相连。

在这里插入图片描述

2.创建CubeMX工程

如下图所示,打开STM32CubeMX软件,新建工程。
在这里插入图片描述
如下图所示,Part Number处输入STM32G474RE,再双击就创建新的工程。
在这里插入图片描述

如下图所示,配置下载口引脚,PA13为SWD的SWDIO脚,PA14为SWD的SWCLK脚。
在这里插入图片描述

如下图所示,配置硬件IIC,PC6,PC7引脚为IIC引脚。
在这里插入图片描述

如下图所示,配置系统主频170Mhz,使用外部8MHZ晶振。
在这里插入图片描述

在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式,生成工程。
在这里插入图片描述
在这里插入图片描述

如下图所示,工程中添加oled.c显示驱动,添加温湿度数据读写代码。
在这里插入图片描述

主要代码如下

uint8_t SHT3X_Modecommand_Buffer[2]={0x22,0x36}; //周期测量模式
uint8_t SHT3X_Fetchcommand_Bbuffer[2]={0xE0,0x00};//读取测量结果
uint8_t SHT3X_Data_Buffer[6]; //byte0,1为温度 byte4,5为湿度
float Humidity_S1; //湿度 正数
float Temperature_S1; //温度 可能为负数
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//8M外部晶振,170MHZ系统主频/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C4_Init();//IIC4初始化,PC6:I2C4_SCL,PC7:I2C4_SDA/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化  OLED_Clear();//OLED清屏HAL_I2C_Master_Transmit(&hi2c4,0x44<<1,SHT3X_Modecommand_Buffer,2,0x10); //第一步,传感器周期性的进行温湿度转换HAL_I2C_Master_Transmit(&hi2c4,0x44<<1,SHT3X_Fetchcommand_Bbuffer,2,0x10); //第二步,随时读取传感器的数据 HAL_I2C_Master_Receive(&hi2c4,(0x44<<1)+1,SHT3X_Data_Buffer,6,0x10); //读取数据HAL_Delay(1000);//等待1000ms/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_I2C_Master_Transmit(&hi2c4,0x44<<1,SHT3X_Fetchcommand_Bbuffer,2,0x10); //随时读取传感器的数据 HAL_I2C_Master_Receive(&hi2c4,(0x44<<1)+1,SHT3X_Data_Buffer,6,0x10); //读取数据Temperature_S1=(float)((((SHT3X_Data_Buffer[0]<<8)+SHT3X_Data_Buffer[1])*175)/65535.0f)-45; //得到摄氏度温度 Humidity_S1=(((SHT3X_Data_Buffer[3]<<8)+SHT3X_Data_Buffer[4])*100)/65535.0f; //可以得到相对湿度HAL_Delay(1000);//等待1000msOLED_Clear();OLED_ShowCHinese(26,0,0);//光OLED_ShowCHinese(44,0,1);//子OLED_ShowCHinese(62,0,2);//物OLED_ShowCHinese(80,0,3);//联OLED_ShowString(24,3,(u8*)"SHT30 TEST");if(Temperature_S1>=0)//判断是否温度大于0	{OLED_ShowString(0,6,(u8*)"Tem: "); OLED_ShowNum(30,6,Temperature_S1,2,16);//显示温度 }else{OLED_ShowString(0,6,(u8*)"Tem:-"); OLED_ShowNum(38,6,-Temperature_S1,2,16);//显示负温度 }OLED_ShowString(60,6,(u8*)"Hum: ");  OLED_ShowNum(90,6,Humidity_S1,3,16);//显示湿度 OLED_ShowString(120,6,(u8*)"%");  	}/* USER CODE END 3 */
}

OLED显示的学习可以参考前面的文章,链接如下,因为都是使用GPIO口模拟操作,跟单片机平台相关性就不大了。
https://gzwelink.blog.csdn.net/article/details/142330816?fromshare=blogdetail&sharetype=blogdetail&sharerId=142330816&sharerefer=PC&sharesource=zy2232652&sharefrom=from_link

3.实验结果

结果如下图所示,能读到温度与湿度值,温度Tem是33度,湿度Hum是61%。
在这里插入图片描述

六.小结

在嵌入式开发中,温湿度传感器是一种十分常用的传感器,可以用于天气预报、智能家居、智慧大屏等等,相比DHT11等型号,SHT30在精度(如温度±0.3℃ vs DHT11±2℃)和可靠性上显著提升。

http://www.dtcms.com/a/515319.html

相关文章:

  • 【开题答辩实录分享】以《智能垃圾回收小程序》为例进行答辩实录分享
  • FSMC-灵活的静态存储控制器
  • 开源AI大模型AI智能名片S2B2C商城小程序在护肤品文案痛点表达中的应用与效果研究
  • 《3D端游云原生协作任务数据一致性优化实战》
  • Day8C语言前期阶段练习算法之插入排序
  • 计算机算法性能详解
  • 建设银行租房网站6网站建设的用例图
  • 国外黄冈网站推广软件有哪些网站建设销售员工作内容
  • Java 大视界 -- Java 大数据在智能医疗远程护理与患者健康管理中的应用与前景
  • 江苏省义务教育标准化建设网站北京住房和城乡建设局门户网站
  • 记2025羊城杯部分题目的解题思路
  • 198种组合算法+优化RF随机森林+SHAP分析+新数据预测!机器学习可解释分析,强烈安利,粉丝必备!
  • 2025第二十二届中国国际半导体博览会(IC CHINA 2025)亮点分析!
  • 「PPG信号处理——(1)基于多模态融合与智能决策的PPG运动伪影分层去除方法」2025年10月22日
  • 阿瓦隆A15 166T:如何突破SHA-256算法的瓶颈?
  • 【Qt开发】多元素类控件(三)-> QTreeWidget
  • MOSHELL (11) : MOSHELL 中的UNIX
  • 安洵杯2019
  • 离线环境下运行 Docker 容器编排指南
  • mapbox进阶,地图添加渐变背景色
  • Tornado + Motor 微服务架构(Docker + 测试 + Kubernetes)
  • YLOLv4
  • 实验室入门——ubuntu20.04安装ros和ros2全流程
  • uTools 最新版优化macOS 26 高 GPU 占用问题
  • wordpress如何建站拓普建站推广
  • 建筑智库免费网站商城网站开发报
  • 从埋点到用户行为分析:ClkLog 如何帮助企业读懂用户
  • 【Q-dir】QDir_x64窗口配合Mouselnc实现上一步
  • 手机网站备案密码找回的方法枣庄专业做网站
  • Oracle Database 19c 服务端(19.3)下载与安装