找回密码
 立即注册
楼主: 电子DIY小家

SHT30温湿度传感器, 硬件I2C接口, 32G12K128 驱动教程系列

  [复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-06-14 08:02:36

4

主题

78

回帖

646

积分

高级会员

积分
646
发表于 2024-5-31 08:52:31 | 显示全部楼层
已经使用过了,没有问题,可以使用,
非常感谢,省了不少时间
希望这个世界让我装一次B
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:40
  • 最近打卡:2025-02-15 01:13:47

2

主题

15

回帖

260

积分

中级会员

积分
260
发表于 2024-6-5 15:55:54 | 显示全部楼层
本帖最后由 karlman 于 2024-6-5 22:08 编辑

我这几天用STC8G1K17A和SHT31测试了一下,本人新手有不少搞不明白的地方,修改了几个地方总算能在OLED上显示出正确的结果了,但是有几个疑问希望楼主能不吝赐教。
1.关于湿度的计算,按楼主的代码总是得不到正确的湿度值,这行代码  SHT30_humidity = (uint)((100.0 * (float)(0x7fff&Data_convert) / 65535.0) *10.0);
我不知道0x7fff&Data_convert这步计算是为了什么,我监控了一下读出的湿度数据,比如高位是0xB8,低位是0xED,合起来Data_conver的值是0xB8ED,除以65535是0.722377,湿度是72.2%。可按楼主的式子,0xB8ED被抹去了最高位的1变成了0x38ED,最终显示的湿度是22.2%。我这一行直接改成了SHT30_humidity = Data_convert / 65.535; 得到了正确的读数。
2.关于温度的计算,这一行SHT30_temperature = (uint)((175.0 * (float)(0x7fff&Data_convert) / 65535.0 - 45.0) *10.0);里的0x7fff&Data_convert同样让我疑惑,当然我们平常环境的温度不高,Data_convert最高位通常是0,这个式子在室温下能输出正常的结果,但如果温度是负数的时候呢?
3.在接收SHT30数据的时候,楼主定义了一个全局变量u8 read_sht_data[6]; 然后在子程序void SHT30_DataRead(void)里又定义了一个uchar temporary[3]; 每次先把温度或者湿度的值从read_sht_data[]送到temporary[]里再进行计算,为什么不直接对read_sht_data[]进行计算?u8和uchar应该都是8位int吧?只要在子程序内定义一个局部变量数组就行了吧?
4.我在监控SHT输出数据的时候发现一个有趣的现象,每当IIC总线读一次正确的温湿度数据,下一循环读出的6个字节数据必定全是0xff,再下一循环又是正确的数据。我想这就是需要计算CRC的原因吧,可为什么会这样呢?
希望版主能有空回复一下,也希望大家都能讨论一下,为我解惑。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:40
  • 最近打卡:2025-02-15 01:13:47

2

主题

15

回帖

260

积分

中级会员

积分
260
发表于 2024-6-5 21:54:08 | 显示全部楼层
本帖最后由 karlman 于 2024-6-5 22:16 编辑

在冰柜里试验了一下,又发现一个问题,SHT30_temperature不能定义成u16类型,要定义成signed int,这样才能正确显示零下的温度。

最终我把这个子程序修改为:
  1. signed int SHT30_temperature;
  2. u16 SHT30_humidity;
  3. //========================================================================
  4. // 函数: void SHT30_DataRead(void)
  5. // 描述: 温湿度数据读取
  6. // 参数:
  7. // 返回: none.
  8. // 版本: VER1.0
  9. // 日期: 2022-15-5
  10. // 备注:
  11. //========================================================================
  12. void SHT30_DataRead(void)
  13. {
  14.                 u8 read_sht_data[6];                       //数据读取缓存
  15.     unsigned long int  Data_convert;           //用于数据转换
  16.     uchar crc_result;             //用于CRC校验结果存放,为判断数据准确性做准备
  17.         
  18.     IIC_ReadNbyte_16bitAddr(SHT30_Slave,0xE000,read_sht_data,6);   //读出数据放入缓存数组等待处理>>T高八位>>T低八位>>温度T的CRC校验位>>H高八位>>H低八位>>湿度H的CRC校验位
  19.          
  20.     crc_result=SHT30_CRC8_Check(read_sht_data,2,read_sht_data[2]);         //crc校验,crc校验要是不成功就返回1,
  21.                                                                  //同时不会更新温度值
  22.     if(crc_result==0)  
  23.     {
  24.         Data_convert=(read_sht_data[0] << 8) | read_sht_data[1];  //把2个8位数据拼接为一个16位的数据
  25.         //温度转换,将16位温度数据转化为10进制的温度数据,
  26.         //这里保留了一位小数,SHT30_temperature这是一个全局变量,
  27.         //计算温度值(uchar强制转换,数据在超过八位范围后会丢失)
  28.       SHT30_temperature = (signed int)(1750 *Data_convert / 65535 - 450);
  29.     }
  30.    
  31.     //crc校验
  32.     crc_result=SHT30_CRC8_Check(&read_sht_data[3],2,read_sht_data[5]);   //crc校验,crc校验要是不成功就返回1,
  33.                                                                  //同时不会更新湿度值
  34.           if(crc_result==0)
  35.     {
  36.         Data_convert=(read_sht_data[3] << 8) | read_sht_data[4]; //把2个8位数据拼接为一个16位的数据
  37.         //湿度转换,将16位湿度数据转化为10进制的湿度数据,
  38.         //这里保留了一位小数,SHT30_humidity这是一个全局变量,
  39.         //计算湿度值(uchar强制转换,数据在超过八位范围后会丢失)
  40.        SHT30_humidity = Data_convert / 65.535;
  41.     }  
  42. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-07-09 16:38:12

3

主题

6

回帖

61

积分

注册会员

积分
61
发表于 2024-7-8 07:16:00 | 显示全部楼层
感谢分享,学习学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-06-14 23:19:22
已绑定手机

3

主题

12

回帖

177

积分

注册会员

积分
177
发表于 2024-7-21 13:42:05 | 显示全部楼层
微信截图_20240721134037.png

照抄了,没成功
主要是想搞一下SHT20的,据说这两个芯片就是读取地址不同……但是我愣是读取不出来
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:567
  • 最近打卡:2025-06-15 06:36:30
已绑定手机

33

主题

462

回帖

2548

积分

金牌会员

积分
2548
发表于 2024-7-25 17:45:15 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:324
  • 最近打卡:2025-06-15 07:47:48

2

主题

52

回帖

1068

积分

金牌会员

积分
1068
发表于 2024-7-26 08:08:43 | 显示全部楼层
开始学习STC8中~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-09-13 12:01:35

0

主题

25

回帖

102

积分

注册会员

积分
102
发表于 2024-9-11 16:18:52 | 显示全部楼层
学习了
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:196
  • 最近打卡:2025-06-13 08:43:01

7

主题

28

回帖

881

积分

高级会员

积分
881
发表于 2024-10-23 09:15:48 | 显示全部楼层
CV工程师表示疑惑
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:479
  • 最近打卡:2025-06-15 14:33:43

2

主题

57

回帖

802

积分

高级会员

积分
802
发表于 2024-12-9 18:13:37 | 显示全部楼层

很好的教程,要好好看看。

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 03:55 , Processed in 0.224433 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表