STM32 SHT10温湿度传感器的信号采集

STM32 SHT10温湿度传感器的信号采集

       首先讲讲SHT10这款温室度传感器。SHT1x(包括SHT10,SHT11和SHT15)属于Sersirion温湿度传感器家族中的贴片封装系列。更之前我讲过的DHT11这款温湿度传感器相比,体积小了许多,特别适合用于产品中。SHT10温湿度传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件(文绉绉的),传感器内部有一个精度高达14为位的A/D转换器,适应串行接口电路实现无缝连接。该产品具有品质卓越、响应速度速度快,抗干扰能力强、性价比高等优点。

      1、接口定义:
  SHT10的接口定义如下图所示:

                                                             

           如上图所示,1脚为GND,4脚为VDD。它的供电电压范围为2.4~5.5V,建议的电压为3.3V,在电源引脚(VDD、GND)之间必须加上一个0.1uf的电容,应于去耦滤波用。它的2脚DATA为数据引脚,3脚SCK为时钟控制引脚,没有发现这两个引脚很像IIC所使用的引脚功能?没错,这个传感器确实可以认为是IIC接口,但是又有却别。该传感器不能按照IIC的协议编址,但是,如果IIC总线上没有挂接别的元件,传感器可以直接连到IIC总线上,但是单片机必须按照传感器的协议工作。传感器与单片机的接线如下图所示:

                                    

    2、传感器的通讯
      

     2.1、“启动传输”时序
用一组“启动传输”时序来完成数据传输的初始化。它包括:当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变成低电平,随后是在SCK时钟高电平,随后是在SCK时钟高电平DATA翻转位高电平。时序如下:

                       

     2.2、复位时序
如果与SHT1x 通讯中断,可通过下列信号时序复位:当DATA 保持高电平时,触发SCK 时钟9 次或更多。时序图如下:

                    
    2.3、命令集
传感器的命令包含三个地址位(目前只支持000,这就是他只能挂接在空闲的IIC总线上的原因)和五个命令位。。SHT1x 会以下述方式表示已正确地接收到指令:在第8 个SCK 时钟的下降沿之后,将DATA 下拉为低电平(ACK 位)。在第9 个SCK 时钟的下降沿之后,释放DATA(恢复高电平)。命令集如下:

                            
 
     2.4、温湿度测量
发布一组测量命令(‘00000101’表示相对湿度RH,‘00000011’表示温度T)后,控制器要等待测量结束。这个过程需要大约20/80/320ms,分别对应8/12/14bit 测量。确切的时间随内部晶振速度,最多可能有-30%的变化。。SHT1x 通过下拉DATA 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发SCK 时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。
在收到CRC 的确认位之后,表明通讯结束。如果不使用CRC-8 校验,控制器可以在测量值LSB 后,通过保持ACK高电平终止通讯。在测量和通讯完成后,SHT1x 自动转入休眠模式。

    2.5、状态寄存器
SHT1x 的某些高级功能可以通过给状态寄存器发送指令来实现,如选择测量分辨率,电量不足提醒,使用 OTP 加载或启动加热功能等。状态寄存器度、写如下:

 
状态寄存器写
 状态寄存器读
状态寄存器的具体描述如下表所示:


测量分辨率:默认分辨率 14bit (温度) 和 12bit (湿度) 可以被降低为 12 和 8bit. 尤其适用于要求测量速度极高或者功耗极低的应用。
电量不足检测功能:在电压不足 2.47V 发出警告。精度为±0.05 V。
加热:可通过向状态寄存器内写入命令启动传感器内部加热器.。加热器可以使传感器的温度高于周围环境 5 – 10°C12 。功耗大约为 8mA @ 5V 。
OPT加载:开启此功能,标定数据将在每次测量前被上传到寄存器。如果不开启此功能,可减少大约 10ms的测量时间。
上面的寄存器如果没有什么特殊要求或应用于特定的场合,则无需配置,选择默认就可以了。

     2.6、通讯过程
传感器的通讯过程为:发送”启动传输“时序,初始化传感器——>发送命令——>等待传感器应答,及测量结束——>接收传感器的16位数据值——>接收8为的CRC校验数据——>休眠,等待下一次传输开始。
传输的过程的测量时序可以由下图示意:

  上图中 TS = 传输开始, MSB = 高有效字节,LSB =低有效字节, LSb = 低有效位。
下面举个实际测量时的相对湿度测量时序例子。时序如下:

这张图可以知道:我们接收到的数据数值为”0000 0100 0011 0001“ = 1073 = 35.50% RH (位含温度补偿),至于怎么计算的,请接着往下看。

     2.7、信号转化  

       2.7.1 温度的转化
设T 2 1 SOt为从传感器上读出来的测量数值,我们需要用下面的公式将测量数值转换成整整的温度值。
T = d1 + d2 * SOt  (其中d1,d2的值根据实际情况选择,选项如下)


      2.7.2 湿度的转换 
湿度的转换公式如下:
。其中湿度的转化参数如下选择:根据采样的精度不同而不同。
 
  99%以上的湿度已经接近饱和必须经过处理显示100%RH13.请注意 湿度传感器对电压无依赖性。测量值与相对湿度的转化如下图所示:
  相对湿度根据上面的参数与公式算出来之后,还需要考虑当前环境温度而进行适当的补偿。补偿的公式及其参数选择如下:
 
       2.7.3、露点的计算
露点的定义:露点温度指空气在此温度下能保持最多的水汽,当温度冷却到露点,空气变得饱和,就会出现雾、露或霜。
SHT1x 并不直接进行露点测量,,但露点可以通过温度和湿度读数计算得到.。由于温度和湿度在同一块集成电路上测量,SHT1x 可测量露点。 一块集成电路上测量,SHT1x 可测量露点。 下面直接给出结论性的露点计算公式了。
 LogEW=(0.66077+7.5*T/(237.3+T)+(log10(RH)-2)         
露点:Dp=((0.66077-logEW)*237.3/(logEW-8.16077)         
例如:RH=10% T=25C  ->EW=23.7465->露点=-8.69℃
  RH=90% T=50C  ->EW=92.4753->露点=47.89℃

   2.8、STM32上的SHT10驱动程序
      2.8.1、SHT10.h文件的编写

这个文件主要定义些重要的参数,以及更硬件相关的一些定义。


   
   
   
   
  1. /*************************************************************
  2. \(^o^)/
  3. Copyright (C), 2013-2020, ZheJiang University of Technology
  4. File name : SHT10.h
  5. Author : ziye334
  6. Version : V1.0
  7. Data : 2014/3/10
  8. Description: Digital temperature and humidity sensor driver code
  9. *************************************************************/
  10. #ifndef __SHT10_H__
  11. #define __SHT10_H__
  12. #include "stm32f10x.h"
  13. enum {TEMP, HUMI};
  14. /* GPIO相关宏定义 */
  15. #define SHT10_AHB2_CLK RCC_APB2Periph_GPIOD
  16. #define SHT10_DATA_PIN GPIO_Pin_0
  17. #define SHT10_SCK_PIN GPIO_Pin_1
  18. #define SHT10_DATA_PORT GPIOD
  19. #define SHT10_SCK_PORT GPIOD
  20. #define SHT10_DATA_H() GPIO_SetBits(SHT10_DATA_PORT, SHT10_DATA_PIN) //拉高DATA数据线
  21. #define SHT10_DATA_L() GPIO_ResetBits(SHT10_DATA_PORT, SHT10_DATA_PIN) //拉低DATA数据线
  22. #define SHT10_DATA_R() GPIO_ReadInputDataBit(SHT10_DATA_PORT, SHT10_DATA_PIN) //读DATA数据线
  23. #define SHT10_SCK_H() GPIO_SetBits(SHT10_SCK_PORT, SHT10_SCK_PIN) //拉高SCK时钟线
  24. #define SHT10_SCK_L() GPIO_ResetBits(SHT10_SCK_PORT, SHT10_SCK_PIN) //拉低SCK时钟线
  25. /* 传感器相关宏定义 */
  26. #define noACK 0
  27. #define ACK 1
  28. //addr command r/w
  29. #define STATUS_REG_W 0x06 //000 0011 0 写状态寄存器
  30. #define STATUS_REG_R 0x07 //000 0011 1 读状态寄存器
  31. #define MEASURE_TEMP 0x03 //000 0001 1 测量温度
  32. #define MEASURE_HUMI 0x05 //000 0010 1 测量湿度
  33. #define SOFTRESET 0x1E //000 1111 0 复位
  34. void SHT10_Config( void);
  35. void SHT10_ConReset( void);
  36. u8 SHT10_SoftReset( void);
  37. u8 SHT10_Measure(u16 *p_value, u8 *p_checksum, u8 mode);
  38. void SHT10_Calculate(u16 t, u16 rh, float *p_temperature, float *p_humidity);
  39. float SHT10_CalcuDewPoint( float t, float h);
  40. #endif

2.8.2、SHT10.c驱动程序的编写
不废话了,直接贴代码:


   
   
   
   
  1. /*************************************************************
  2. \(^o^)/
  3. Copyright (C), 2013-2020, ZheJiang University of Technology
  4. File name : SHT10.c
  5. Author : ziye334
  6. Version : V1.0
  7. Data : 2014/3/10
  8. Description: Digital temperature and humidity sensor driver code
  9. *************************************************************/
  10. #include "SHT10.h"
  11. #include
  12. /*************************************************************
  13. Function :SHT10_Dly
  14. Description:SHT10时序需要的延时
  15. Input : none
  16. return : none
  17. *************************************************************/
  18. void SHT10_Dly( void)
  19. {
  20. u16 i;
  21. for(i = 500; i > 0; i--);
  22. }
  23. /*************************************************************
  24. Function :SHT10_Config
  25. Description:初始化 SHT10引脚
  26. Input : none
  27. return : none
  28. *************************************************************/
  29. void SHT10_Config( void)
  30. {
  31. GPIO_InitTypeDef GPIO_InitStructure;
  32. //初始化SHT10引脚时钟
  33. RCC_APB2PeriphClockCmd(SHT10_AHB2_CLK ,ENABLE);
  34. //PD0 DATA 推挽输出
  35. GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  36. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  37. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  38. GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  39. //PD1 SCK 推挽输出
  40. GPIO_InitStructure.GPIO_Pin = SHT10_SCK_PIN;
  41. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  42. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  43. GPIO_Init(SHT10_SCK_PORT, &GPIO_InitStructure);
  44. SHT10_ConReset(); //复位通讯
  45. }
  46. /*************************************************************
  47. Function :SHT10_DATAOut
  48. Description:设置DATA引脚为输出
  49. Input : none
  50. return : none
  51. *************************************************************/
  52. void SHT10_DATAOut( void)
  53. {
  54. GPIO_InitTypeDef GPIO_InitStructure;
  55. //PD0 DATA 推挽输出
  56. GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  57. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  58. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  59. GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  60. }
  61. /*************************************************************
  62. Function :SHT10_DATAIn
  63. Description:设置DATA引脚为输入
  64. Input : none
  65. return : none
  66. *************************************************************/
  67. void SHT10_DATAIn( void)
  68. {
  69. GPIO_InitTypeDef GPIO_InitStructure;
  70. //PD0 DATA 浮动输入
  71. GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  72. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  73. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  74. GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  75. }
  76. /*************************************************************
  77. Function :SHT10_WriteByte
  78. Description:写1字节
  79. Input : value:要写入的字节
  80. return : err: 0-正确 1-错误
  81. *************************************************************/
  82. u8 SHT10_WriteByte(u8 value)
  83. {
  84. u8 i, err = 0;
  85. SHT10_DATAOut(); //设置DATA数据线为输出
  86. for(i = 0x80; i > 0; i /= 2) //写1个字节
  87. {
  88. if(i & value)
  89. SHT10_DATA_H();
  90. else
  91. SHT10_DATA_L();
  92. SHT10_Dly();
  93. SHT10_SCK_H();
  94. SHT10_Dly();
  95. SHT10_SCK_L();
  96. SHT10_Dly();
  97. }
  98. SHT10_DATAIn(); //设置DATA数据线为输入,释放DATA线
  99. SHT10_SCK_H();
  100. err = SHT10_DATA_R(); //读取SHT10的应答位
  101. SHT10_SCK_L();
  102. return err;
  103. }
  104. /*************************************************************
  105. Function :SHT10_ReadByte
  106. Description:读1字节数据
  107. Input : Ack: 0-不应答 1-应答
  108. return : err: 0-正确 1-错误
  109. *************************************************************/
  110. u8 SHT10_ReadByte(u8 Ack)
  111. {
  112. u8 i, val = 0;
  113. SHT10_DATAIn(); //设置DATA数据线为输入
  114. for(i = 0x80; i > 0; i /= 2) //读取1字节的数据
  115. {
  116. SHT10_Dly();
  117. SHT10_SCK_H();
  118. SHT10_Dly();
  119. if(SHT10_DATA_R())
  120. val = (val | i);
  121. SHT10_SCK_L();
  122. }
  123. SHT10_DATAOut(); //设置DATA数据线为输出
  124. if(Ack)
  125. SHT10_DATA_L(); //应答,则会接下去读接下去的数据(校验数据)
  126. else
  127. SHT10_DATA_H(); //不应答,数据至此结束
  128. SHT10_Dly();
  129. SHT10_SCK_H();
  130. SHT10_Dly();
  131. SHT10_SCK_L();
  132. SHT10_Dly();
  133. return val; //返回读到的值
  134. }
  135. /*************************************************************
  136. Function :SHT10_TransStart
  137. Description:开始传输信号,时序如下:
  138. _____ ________
  139. DATA: |_______|
  140. ___ ___
  141. SCK : ___| |___| |______
  142. Input : none
  143. return : none
  144. *************************************************************/
  145. void SHT10_TransStart( void)
  146. {
  147. SHT10_DATAOut(); //设置DATA数据线为输出
  148. SHT10_DATA_H();
  149. SHT10_SCK_L();
  150. SHT10_Dly();
  151. SHT10_SCK_H();
  152. SHT10_Dly();
  153. SHT10_DATA_L();
  154. SHT10_Dly();
  155. SHT10_SCK_L();
  156. SHT10_Dly();
  157. SHT10_SCK_H();
  158. SHT10_Dly();
  159. SHT10_DATA_H();
  160. SHT10_Dly();
  161. SHT10_SCK_L();
  162. }
  163. /*************************************************************
  164. Function :SHT10_ConReset
  165. Description:通讯复位,时序如下:
  166. _____________________________________________________ ________
  167. DATA: |_______|
  168. _ _ _ _ _ _ _ _ _ ___ ___
  169. SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______
  170. Input : none
  171. return : none
  172. *************************************************************/
  173. void SHT10_ConReset( void)
  174. {
  175. u8 i;
  176. SHT10_DATAOut();
  177. SHT10_DATA_H();
  178. SHT10_SCK_L();
  179. for(i = 0; i < 9; i++) //触发SCK时钟9c次
  180. {
  181. SHT10_SCK_H();
  182. SHT10_Dly();
  183. SHT10_SCK_L();
  184. SHT10_Dly();
  185. }
  186. SHT10_TransStart(); //启动传输
  187. }
  188. /*************************************************************
  189. Function :SHT10_SoftReset
  190. Description:软复位
  191. Input : none
  192. return : err: 0-正确 1-错误
  193. *************************************************************/
  194. u8 SHT10_SoftReset( void)
  195. {
  196. u8 err = 0;
  197. SHT10_ConReset(); //通讯复位
  198. err += SHT10_WriteByte(SOFTRESET); //写RESET复位命令
  199. return err;
  200. }
  201. /*************************************************************
  202. Function :SHT10_ReadStatusReg
  203. Description:读状态寄存器
  204. Input : p_value-读到的数据;p_checksun-读到的校验数据
  205. return : err: 0-正确 0-错误
  206. *************************************************************/
  207. u8 SHT10_ReadStatusReg(u8 *p_value, u8 *p_checksum)
  208. {
  209. u8 err = 0;
  210. SHT10_TransStart(); //开始传输
  211. err = SHT10_WriteByte(STATUS_REG_R); //写STATUS_REG_R读取状态寄存器命令
  212. *p_value = SHT10_ReadByte(ACK); //读取状态数据
  213. *p_checksum = SHT10_ReadByte(noACK); //读取检验和数据
  214. return err;
  215. }
  216. /*************************************************************
  217. Function :SHT10_WriteStatusReg
  218. Description:写状态寄存器
  219. Input : p_value-要写入的数据值
  220. return : err: 0-正确 1-错误
  221. *************************************************************/
  222. u8 SHT10_WriteStatusReg(u8 *p_value)
  223. {
  224. u8 err = 0;
  225. SHT10_TransStart(); //开始传输
  226. err += SHT10_WriteByte(STATUS_REG_W); //写STATUS_REG_W写状态寄存器命令
  227. err += SHT10_WriteByte(*p_value); //写入配置值
  228. return err;
  229. }
  230. /*************************************************************
  231. Function :SHT10_Measure
  232. Description:从温湿度传感器读取温湿度
  233. Input : p_value-读到的值;p_checksum-读到的校验数
  234. return : err: 0-正确 1—错误
  235. *************************************************************/
  236. u8 SHT10_Measure(u16 *p_value, u8 *p_checksum, u8 mode)
  237. {
  238. u8 err = 0;
  239. u32 i;
  240. u8 value_H = 0;
  241. u8 value_L = 0;
  242. SHT10_TransStart(); //开始传输
  243. switch(mode)
  244. {
  245. case TEMP: //测量温度
  246. err += SHT10_WriteByte(MEASURE_TEMP); //写MEASURE_TEMP测量温度命令
  247. break;
  248. case HUMI:
  249. err += SHT10_WriteByte(MEASURE_HUMI); //写MEASURE_HUMI测量湿度命令
  250. break;
  251. default:
  252. break;
  253. }
  254. SHT10_DATAIn();
  255. for(i = 0; i < 72000000; i++) //等待DATA信号被拉低
  256. {
  257. if(SHT10_DATA_R() == 0) break; //检测到DATA被拉低了,跳出循环
  258. }
  259. if(SHT10_DATA_R() == 1) //如果等待超时了
  260. err += 1;
  261. value_H = SHT10_ReadByte(ACK);
  262. value_L = SHT10_ReadByte(ACK);
  263. *p_checksum = SHT10_ReadByte(noACK); //读取校验数据
  264. *p_value = (value_H << 8) | value_L;
  265. return err;
  266. }
  267. /*************************************************************
  268. Function :SHT10_Calculate
  269. Description:计算温湿度的值
  270. Input : Temp-从传感器读出的温度值;Humi-从传感器读出的湿度值
  271. p_humidity-计算出的实际的湿度值;p_temperature-计算出的实际温度值
  272. return : none
  273. *************************************************************/
  274. void SHT10_Calculate(u16 t, u16 rh, float *p_temperature, float *p_humidity)
  275. {
  276. const float d1 = -39.7;
  277. const float d2 = + 0.01;
  278. const float C1 = -2.0468;
  279. const float C2 = + 0.0367;
  280. const float C3 = -0.0000015955;
  281. const float T1 = + 0.01;
  282. const float T2 = + 0.00008;
  283. float RH_Lin; //RH线性值
  284. float RH_Ture; //RH真实值
  285. float temp_C;
  286. temp_C = d1 + d2 * t; //计算温度值
  287. RH_Lin = C1 + C2 * rh + C3 * rh * rh; //计算湿度值
  288. RH_Ture = (temp_C -25) * (T1 + T2 * rh) + RH_Lin; //湿度的温度补偿,计算实际的湿度值
  289. if(RH_Ture > 100) //设置湿度值上限
  290. RH_Ture = 100;
  291. if(RH_Ture < 0.1)
  292. RH_Ture = 0.1; //设置湿度值下限
  293. *p_humidity = RH_Ture;
  294. *p_temperature = temp_C;
  295. }
  296. /*************************************************************
  297. Function :SHT10_CalcuDewPoint
  298. Description:计算露点
  299. Input : h-实际的湿度;t-实际的温度
  300. return : dew_point-露点
  301. *************************************************************/
  302. float SHT10_CalcuDewPoint( float t, float h)
  303. {
  304. float logEx, dew_point;
  305. logEx = 0.66077 + 7.5 * t / ( 237.3 + t) + (log10(h) - 2);
  306. dew_point = (( 0.66077 - logEx) * 237.3) / (logEx - 8.16077);
  307. return dew_point;
  308. }
  309. 2.8 .3、main函数的编写:
  310. int main( void)
  311. {
  312. u16 humi_val, temp_val;
  313. u8 err = 0, checksum = 0;
  314. float humi_val_real = 0.0;
  315. float temp_val_real = 0.0;
  316. float dew_point = 0.0;
  317. BSP_Init();
  318. printf( "\nSHT10温室度测试程序!!!\n");
  319. SHT10_Config();
  320. while( 1)
  321. {
  322. err += SHT10_Measure(&temp_val, &checksum, TEMP); //获取温度测量值
  323. err += SHT10_Measure(&humi_val, &checksum, HUMI); //获取湿度测量值
  324. if(err != 0)
  325. SHT10_ConReset();
  326. else
  327. {
  328. SHT10_Calculate(temp_val, humi_val, &temp_val_real, &humi_val_real); //计算实际的温湿度值
  329. dew_point = SHT10_CalcuDewPoint(temp_val_real, humi_val_real); //计算露点温度
  330. }
  331. printf( "当前环境温度为:%2.1f℃,湿度为:%2.1f%%,露点温度为%2.1f℃\r\n", temp_val_real, humi_val_real, dew_point);
  332. LED1_Toggle();
  333. Delay_ms( 1000);
  334. }
  335. }
原文出处: http://ziye334.blog.163.com/blog/static/224306191201421265639956/



	
  • weixin_45185690
    weixin_45185690: 请问楼主,为什么我一直读出来的数据都是00,还有这是将数据打印在串口助手中吗?(1周前#9楼)举报回复
    1
  • weixin_42558384
    linux入土: 请问楼主为什么我读出的温度是615.6湿度是0.1%?希望楼主能帮我看下,万分感谢

[/code](11个月前#8楼)查看回复(2)举报回复

    • weixin_42558384
      linux入土 回复 ninonindayoo: 解决了,博主的代码没问题,可以直接运行,当时哪地方出问题给忘了,两个月前的事了 (8个月前 ) 举报回复
    • qq_39028641
      ninonindayoo 回复 linux入土: 请问现在解决了吗?我的情况是单步执行写命令读命令结果正常,直接在SHT10_Calculate处设置断点,每次更新全是温度是615.6湿度是0.1%,很迷。若是解决了烦请告诉我问题在哪,万分感谢。 (8个月前 ) 举报回复
    • h71509110
      han0097: 用的楼主的程序,STM32F103VET6不行啊,到等测量结束那里传感器没反应啊! (10个月前 #7楼) 举报回复
    • chenjohn_
      chenjohn_: 131.5C^ 027.6H 前面是温度后面是湿度,数据一直不变 (1年前 #6楼) 举报回复
    • chenjohn_
      chenjohn_: 数据输出是几位啊,2.1f不行吧 (1年前 #5楼) 举报回复
    • qq_34893288
      qq_34893288: //addr command r/w

    这里有一行备注 但是你前面没有代码 这是 sht1x的地址吗??程序好像没看到要写sht10 的地址的
    求解答 新手(3年前#4楼)查看回复(1)举报回复

    • u012568663
      空气中的告白 回复 qq_34893288: //addr command r/w ;这个是说明,代表一列是什么意思,这里分别是(地址 命令 读/写) (3年前 ) 举报回复
    • shengyanbo001
      shengyanbo001: 读出来的数据不对,什么问题啊, (4年前 #3楼) 查看回复(1)举报回复
      • u012568663
        空气中的告白 回复 shengyanbo001: 检查一下硬件 (3年前 ) 举报回复
    • xclfang
      xclfang: 读出来的数据怎么都是00啊 (4年前 #2楼) 查看回复(1)举报回复
      • u012568663
        空气中的告白 回复 xclfang: 不会的呀,我的读出来的数据正确,而且很稳定 (3年前 ) 举报回复
    • hongyuo117
      hongyuo117: 多谢楼主的无私贡献,查了两天问题终于出来了 (4年前 #1楼) 举报回复

    • 上一页
    • 1
    • 下一页




    SHT11(IIC协议的温湿度传感器)简介和编程方法

    09-03 阅读数 2万+

    SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片。该芯片广泛应用于暖通空调、汽车、消费电子、自动控制等领域。共主要特点如下:◆高度集成,将温度感测、湿度感测、信号变换、A/D转换和... 博文 来自: zgrjkflmkyc的专栏

    sht11温湿度传感器

    02-27 阅读数 939

    温度、湿度转化,默认温度14bit分辨率,湿度12bit分辨率 博文 来自: ziyoulangzi019的专栏

    STM32 采集SHT10传感器数据(非float)

    12-21 阅读数 2409

    本来想在网上直接load一个sht10驱动就直接能用用了,没想到太天真了。非但没有stm32L0cube这个库的程序而且大部分还是使用浮点运算的,你妹的,stm32好多都是不支持浮点运算的呀。所以只好... 博文 来自: wwwchenyc的博客

    sht10裸机程序分析(与cc2530进行通讯)

    06-20 阅读数 994

    voidmain(void){Delay_ms(1000);//让设备稳定InitUart();//串口初始化while(1){DHT11();//获取温湿度P0DIR|=0x40;//IO口需要重新... 博文 来自: wearlee的博客

    关于SHT10温湿度读取函数里面分析问题(新手,麻烦大家啦,谢谢)

    06-20

    void main(void) { Delay_ms(1000);//让设备稳定 InitUart(); //串口初始化 while(1) { DHT11(); //获取温湿度 P0DIR |= 0x 论坛

    
    

    SHT10 温湿度 传感器

    12-01 阅读数 183

    输出转换为物理量:相对湿度:湿度传感器相对湿度的温度补偿:温度: 博文 来自: String nzx=(I LOVE YOU)? 程序猿 :程序牛

    有关SHT10驱动问题

    09-27

    最近写基于LPC1768的SHT10驱动,用GPIO模拟I2C。从官方的程序移植到LPC1768上,但是每次write_cmd一个字节到SHT10设备,SHT10都没有ACK。也就是最初是的发送一个字 论坛

    AVR---SHT10---温湿度传感器--温度 0XFF---湿度---问题

    12-06 阅读数 123

    读取函数如下:/******************************************************** SHT10温湿度检测*************************... 博文 来自: String nzx=(I LOVE YOU)? 程序猿 :程序牛

    有关信号采集

    03-25

    各位大虾,我想请教有关传感器的信号采集的问题,有做过的吗?对编程实现是怎样一个过程? 论坛

    		

    DSP之信号采集

    08-15 阅读数 1万+

    信号采集类的外设包括采集模拟信号的模/数转换器和提供数字信号输入、输出功能的通用输入/输出接口。模/数转换器为DSP提供了多通道模拟/数字转换能力,通用输入、输出接口可以完成数字信号的采集,当其被设置... 博文 来自: 工作笔记

    
    

    nodemcu读取sht10温湿度值不正常原因

    06-11 阅读数 1806

    sht10模块是几年前在淘宝买的。从X宝X士凯借的图如上。当然后做项目还是要迁移到sht2x,sht3x等,标准的i2c界面会大大简化工作。 像sht10这种,要根据时序发高低电平脉冲,实在是枯燥无味... 博文 来自: 风之羽

    STM32 模块篇-温湿度传感器模块(DHT11)实验

    06-21 阅读数 2万+

    目     录5.03.1 概述35.03.1.1 性能描述45.03.1.2 传感器时序45.03.2 实验目的65.03.3 硬件设计75.03.4 软件设计75.03.4.1 软件设计说明85.... 博文 来自: teavamc的博客

    STM32-DHT11(温湿度传感器)之学习笔记

    12-16 阅读数 1414

    一、模块分析:原理图和引脚连接图:由图可知DHT11(温湿度模块)是单总线的连接,数据的输入输出由一根线完成,DQ网络标号对应的引脚是PG9就是GPIO外设接口G组的第九个引脚。二、DHT11时序图:... 博文 来自: weixin_42443025的博客

    SHT10温湿度传感器

    04-12 阅读数 275

    1、SHT1x(包括SHT10,SHT11和SHT15)属于Sensirion温湿度传感器家族中的贴片封装系列。传感器将传感元件和信号处理电路集成在一块微型电路板上,输出完全标定的数字信号。传感器具有... 博文 来自: 飘飘仙儿__的博客

    软件I2C sht3x温湿度传感器 学习过程记录

    02-21 阅读数 250

    软件I2Csht3x温湿度传感器DatasheetSHT3x-DIS官网数据手册的阅读embedded-sht例程DatasheetSHT3x-DIS这里没什么好说的,电压,协议,精度,封装之类的。直... 博文 来自: darboy

    
    
    

    Proteus中MSP430与SHT11的IIC通信问题

    05-21 阅读数 1776

    调了两天,MSP430始终接收不到数据,一直以为是代码的问题,今天无意中看到别人的一片文章,才发现问题出在上拉电阻上。DATA线的上拉电阻不能太大,10k不行,换成了1k就没问题了。mark一下,顺便... 博文 来自: 沧海一根草的专栏

    CC2530 SHT21 IIC 温湿度传感器驱动实现与速率测试(主机模式)

    09-21 阅读数 363

    转载请注明出处,谢谢!Newbit-Msming2018-6-15SHT21温湿度传感器驱动实现与速率测试(主机模式HostMaster)非主机模式:CC2530SHT21IIC温湿度传感器驱动实现与... 博文 来自: qq_21352095的博客

    
    

    STM32通过硬件I2C读写控制AM2311温湿度传感器模块打印输出数据

    11-30 阅读数 517

    程序功能说明:1、通过I2C硬件查询方式驱动AM2311。2、获取AM2311测得的温度和湿度并串口打印输出。3、使用I2C1。程序注意事项:1、AM2311在测试完数据后会进入一个休眠模式,程序需要... 博文 来自: viewtoolsz的博客

    STM32与SHT1X温湿度传感器通讯

    12-30 阅读数 777

    在这次项目开发中应用到了SHT1X温湿度传感器,该系列有SHT10、SHT11和SHT15,属于Sersirion温湿度传感器家族中的贴片封装系列。包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成... 博文 来自: 木南创智

    SHT3X温湿度传感器水合

    06-27 阅读数 1122

    最近由于项目需要做了一款高精度温湿度压力采集板,温湿度传感器采用了Sensirion公司的的SHT31,其传感器特性如下图所示:驱动还算比较顺利,但是测试的时候发现读出来的温度偏高,湿度偏小,以为是传... 博文 来自: qq435873175的博客

    
    
    

    基于AT89S52单片机的温湿度报警系统

    08-31 阅读数 1593

    这是给深圳的一个客户做的一个项目,虽说是工业项目吧,但难度也是比毕业设计高一点吧。原理图:dht11.h#ifndef__dht11_H#define__dht11_H#includetypedefu... 博文 来自: lifengxun20121019的专栏

    
    
    
    
    
    
    
    
    
    

    stm32f103系列与传感器连接问题

    03-19

    买了个压力传感器,上面绿线和红线是信号线,我的板子自带这AD模块,可是应该怎么连呢? 是直接连接到AD的输入引脚那里就好了嘛?大神求解答啊!!!! 论坛

    stm32控制sht10,将测量的温度显示到串口助手

    09-03

    #include #include "sys.h" #include "delay.h" #define noACK 0 //用于判断是否结束SHT10通讯 #def 论坛

    温湿度传感器SHT20的驱动与使用

    08-23 阅读数 1万+

    最近公司里的一个小的项目:基于冰库的温度检测,采用无线通讯的方式,将采集到的温度信息传送给基站,基站通过UDP传输给上位机。   实验平台    编译软件:IAREmbeddedWorkbenchfo... 博文 来自: duanfeiteng0814的博客

    露点、湿度换算软件

    02-02 阅读数 1276

    本软件主要实行大气露点、压力露点之间的换算露点、湿度、ppmV、ppmW、饱和水气压、水气分压,天然气露点仪数据的换算,计算功能强大。 软件下载... 博文 来自: ludianyi的博客

    
    
    
    
    
    
    

    请问计算相对湿度和露点温度程序如何编写

    12-31

    如题,不太清创他们直接的转换公式,不知有没相应的VB程序公式? 论坛

    
    
    

    C++ STM32 编程 008 用Proteus运行程序

    12-18 阅读数 438

    将生成的.ihex文件,扩展名修改为.hex。打开Proteus8.7SP3新建一个工程,并添加STM32F103R6PNPLEDBUTTONRES(单片机,三极管,LED发光二极管,按钮,电阻)五种... 博文 来自: FRAM的博客

    请教 SHT10 温湿度 计算方法

    10-23

    SHT10温湿度计算 12位精度AD 输出16进制 温度18 AE 湿度07 20 在不考虑露点,补偿之类,计算温湿度是怎么算的 sht文档上说1073=35.5%这个又是怎么计算的 论坛

    
    
    
    
    
    
    
    
    
    
    

    DirectX修复工具增强版

    02-09 阅读数 206万+

    最后更新:2019-5-26

    DirectX修复工具最新版:DirectX Repair V3.8 增强版NEW!

    版本号:V3.8.0.11638

    大小: 107MB/7z格式压缩,189MB…


    博文
    来自: VBcom的专栏



    python图片处理类之~PIL.Image模块(ios android icon图标自动生成处理)

    08-31 阅读数 11万+

    1.从pyCharm提示下载PIL包

     http://www.pythonware.com/products/pil/

     

    2.解压后,进入到目录下

    cd /Users/jianan/Dow…


    博文
    来自: 专注于cocos+unity+服务器全栈



    centos7 开启网络连接

    03-15 阅读数 3万+

    1.当我们发现无法联网时,我们运行下面命令或者ping命令 ip  addr

    结果没有显示局域网的IP地址
    2.我们去修改网卡配置文件,把网络连接打开
    cd /
    cd  /etc/sys…


    博文
    来自: sfeng95的博客



    二值神经网络(Binary Neural Network,BNN)

    03-18 阅读数 3万+

    在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果。而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层... 博文 来自: 雨石

    expat介绍文档翻译

    03-22 阅读数 7万+

    原文地址:http://www.xml.com/pub/a/1999/09/expat/index.html

    因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能…


    博文
    来自: ymj7150697的专栏



    Unity自动打包工具

    07-11 阅读数 1万+

    Unity一键打包工具,一键生成几十个平台/渠道的安装包。 博文 来自: 夜风的BLOG

    RUtils -- 建立在Rserve之上的Java与R语言通信工具集

    10-26 阅读数 6876

    注1:RUtils是我偶然发现的一个工具包,它建立在Rserve之上,可以很大程度上简化我们的程序,关于Rserve网络上有很多相关的内容,这里不对其进行介绍,比如这里:http://blog.fen... 博文 来自: 竹叶青的专栏

    搭建图片服务器《二》-linux安装nginx

    09-22 阅读数 8万+

    nginx是个好东西,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl... 博文 来自: maoyuanming0806的博客

    使用Unity实现卡拉OK歌词过渡效果

    02-12 阅读数 1686

    好长时间之前做过的一个项目 , 其中设计到用Unity模拟卡拉OK歌词过渡的效果 , 如下图所示 ↓ , 这里简单把原理部分分享一下.

    演示效果 ↓

    实现歌词动态调整功能
    实现动态读取歌…


    博文
    来自: 月儿圆



    链接(freemarker)

    10-30 阅读数 498

    http://blog.csdn.net/liaomin416100569/article/details/78349072 博文 来自: biao285869350

    Docx4j 简单操作文字图片(包含页眉页脚和主体内容)

    11-12 阅读数 1万+

    docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre... 博文 来自: 偶尔记一下

    微信支付V3微信公众号支付PHP教程(thinkPHP5公众号支付)/JSSDK的使用

    02-02 阅读数 18万+

    扫二维码关注,获取更多技术分享

    本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,…


    博文
    来自: Marswill



    Keil(MDK-ARM)系列教程(一)_新建软件工程详细过程

    05-26 阅读数 6万+

    推荐

    分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang

    推荐…


    博文
    来自: strongerHuang的专栏



    ThreadLocal的设计理念与作用

    09-25 阅读数 9万+

    Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread... 博文 来自: u011860731的专栏

    如何用一行C++代码读写数据库

    08-01 阅读数 9263

    这篇文章要表达的并非数据库相关的知识,而是如何使用DBIOWrapper。       DBIOWrapper是一个工作在Windows下、对ODBC式数据访问进行了小型封装的库。其设计目标是提供极简... 博文 来自: 哈哈 哈 哈哈,哈 哈 哈哈哈

    强连通分量及缩点tarjan算法解析

    11-16 阅读数 66万+

    强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti... 博文 来自: 九野的博客

    忘记Oracle数据库管理员密码的解决办法

    02-13 阅读数 1万+

    安装oracle 9i后,居然把刚刚更改的数据库管理员密码给忘了,又不重新安装,太麻烦了,试了好久,终于修改成功了。1、运行到C盘根目录2、输入:SET ORACLE_SID = 你的SID名称3、输... 博文 来自: llxsharp的专栏

    Cocos2d-x 2.2.3 使用NDK配置编译环境

    06-11 阅读数 2万+

    Cocos2d-x 2.2.3 使用NDK配置编译环境2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博... 博文 来自: 巫山老妖

    jquery/js实现一个网页同时调用多个倒计时(最新的)

    11-25 阅读数 54万+

    jquery/js实现一个网页同时调用多个倒计时(最新的)

    最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!

    //js



    博文
    来自: Websites



    关于SpringBoot bean无法注入的问题(与文件包位置有关)

    12-16 阅读数 27万+

    问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 博文 来自: 开发随笔

    VirtualBox COM获取对象失败

    04-17 阅读数 4万+

    错误详情

    1. 先来看看错误详情
      获取 VirtualBox COM 对象失败.应用程序将被中断.Failed to instantiate CLSID_VirtualBox …


      博文
      来自: 多点折腾少点抱怨

    Solaris11挂载光盘

    07-15 阅读数 1745

    将ISO写入光盘 cdrecord sol-11_1-repo-full.iso

    弹出光盘
    root@solaris:/media# eject cdrom
    cdrom /dev/dsk/c7t0d…


    博文
    来自: 数据之路-忆梦前程



    .NET和java的RSA互通,仅此而已

    03-09 阅读数 7万+

    RSA .net jva 互通 解决不能互通的问题 博文 来自: lubiaopan的专栏

    保护模式及其编程——8086系统寄存器和系统指令

    02-18 阅读数 1233

    摘要:为了协助处理器完成初始化和控制系统操作,80x86提供了一个标志寄存器和几个系统寄存器。Eflags用于控制任务切换、中断处理、指令跟踪和权限访问。系统寄存器用于内存管理和控制处理器操作。

    1…


    博文
    来自: 河西无名式



    IE9 table显示问题,td出现错位的解决方法

    01-21 阅读数 5461

    IE9 table显示问题

    IE9 大数据行table的显示会出现列错位

    原因是IE9的BUG

    在jsp中使用 table加载大数据量时,td会出现错位,在f…


    博文
    来自: yzp_soft的专栏



    仿饿了么

    05-10 阅读数 322

    http://blog.csdn.net/zxt0601/article/details/54235736 博文 来自: 小马哥nice的博客

    Web前端面试指导(三十):JavaScript有几种类型的值?你能画一下他们的内存图吗?

    10-07 阅读数 7718

    题目点评 数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。  两大类: 栈:原始数据类型(Und... 博文 来自: 雄领IT的专栏

    git丢掉本地的修改,还原修改之前的程序

    09-18 阅读数 2437

    今天在本地做了修改,后来又不想要这次修改的内容,想要还原到修改之前的状态,有一个比较省力的方法,直接从git服务器对应的分支获取覆盖本地的程序。 命令如下:git checkout -f 这样就... 博文 来自: leedaning的专栏

    origion绘制热图

    07-22 阅读数 6588

    有时我们需要绘制热图,用x轴、y轴表示两维数据,用颜色表示第三维 第一步:需要准备三列数据,如图1,这里我用U表示x轴数据,它的取值范围为[0-1],间隔为0.05,E表示y轴,取值范围也是[0-1]... 博文 来自: SunCherryDream的专栏

    VS2015+Qt5+OpenCV3开发环境配置

    01-08 阅读数 1万+

    本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。 1.目录结构 假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构... 博文 来自: zhhp1001的博客

                
                            

    没有更多推荐了,返回首页

    你可能感兴趣的:(sht10)