对于大气环境监测来说温湿度也是重要的指标。原本计划使用SHT15来采集温湿度数据,不过在OneNET麒麟开发板上,我们发现已经集成有SHT20温湿度传感器,于是我们就使用它了。如下图的红框处:

我们还得再核实一下究竟是怎么连接的呢?我们察看原理图,发现使用了I2C2(PB10、PB11)作为通讯接口。

接下来我们在STM32CubeMX中配置I2C2端口,具体配置如下:

配置完成后,对I2C2的具体初始化代码如下:

static void MX_I2C2_Init(void)
{hi2c2.Instance = I2C2;hi2c2.Init.ClockSpeed = 100000;hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;hi2c2.Init.OwnAddress1 = 0;hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;hi2c2.Init.OwnAddress2 = 0;hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c2) != HAL_OK){Error_Handler();}
}对GPIO的初始化配置:
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{GPIO_InitTypeDef GPIO_InitStruct;if(hi2c->Instance==I2C2){/**I2C2 GPIO 配置PB10     ------> I2C2_SCLPB11     ------> I2C2_SDA */GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);__HAL_RCC_I2C2_CLK_ENABLE();}
}

完成以上配置后,接下来我们编写SHT20的驱动程序,由于SHT20采用的是标准的I2C协议,所以我们可以方便的使用ST提供的相关库函数。

//读取测量数据
uint8_t SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, nt16 *pMeasurand)
{uint8_t checksum;uint8_t data[2];uint8_t error=0;uint16_t i;I2c_StartCondition();error |= I2c_WriteByte (I2C_ADR_W);switch(eSHT2xMeasureType){case HUMIDITY:{error |= I2c_WriteByte (TRIG_RH_MEASUREMENT_HM);break;}case TEMP :{error |= I2c_WriteByte (TRIG_T_MEASUREMENT_HM);break;}default: assert(0);}I2c_StartCondition();error |= I2c_WriteByte (I2C_ADR_R);SCL=HIGH;for(i=0; i<1000; i++){ DelayMicroSeconds(1000);if (SCL_CONF==1) break;}if(SCL_CONF==0) error |= TIME_OUT_ERROR;pMeasurand->s16.u8H = data[0] = I2c_ReadByte(ACK);pMeasurand->s16.u8L = data[1] = I2c_ReadByte(ACK);checksum=I2c_ReadByte(NO_ACK);error |= SHT2x_CheckCrc (data,2,checksum);I2c_StopCondition();return error;
}//软件复位
uint8_t SHT2x_SoftReset()
{uint8_t error=0;I2c_StartCondition();error |= I2c_WriteByte (I2C_ADR_W);error |= I2c_WriteByte (SOFT_RESET);I2c_StopCondition();DelayMicroSeconds(15000);return error;
}//计算相对湿度
float SHT2x_CalcRH(uint16_t u16sRH)
{ft humidityRH;u16sRH &= ~0x0003;humidityRH = -6.0 + 125.0/65536 * (ft)u16sRH;return humidityRH;
}//计算温度
float SHT2x_CalcTemperatureC(uint16_t u16sT)
{ft temperatureC;u16sT &= ~0x0003;temperatureC= -46.85 + 175.72/65536 *(ft)u16sT;return temperatureC;
}

编写完成编译没问题,运行看一看结果。显示当前的室温为23.3摄氏度,相对湿度为17.5%。

接下来我们试验一下,对传感器吹一口气。由于人呼出的气体含有大量水蒸气,所以湿度时都会明显上升。但是温度的变化不会太明显。

由于空气的流动,湿度会在停止吹气后开始下降,如下图所示:

至此,采集温湿度数据完成。

转载于:https://www.cnblogs.com/foxclever/p/6840878.html

OneNET麒麟座应用开发之三:获取温湿度数据相关推荐

  1. STM32+HTU21D 获取温湿度数据

                                                                  创作不易,转载请注明出处!                         ...

  2. OneNET麒麟座应用开发之四:数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传.这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求. 先看看麒麟座这块开发板, ...

  3. OneNET麒麟座应用开发之八:采集大气压力等环境参数

    采集大气压力和温度也是核算大气标准状况下的各种数据的必须参数,为此我们必须知道压力和温度才能计算标准状况下的各种参数,于此我们需要一个既能检测压力也能检测温度的元件. 1.硬件概述 MS5837压力传 ...

  4. OneNET麒麟座应用开发之六:与气体质量流量控制器通讯

    气体质量流量控制器,简称MFC,通常用于在各种检测中,计量气体的流量.在我们的大气环境数据采集站中,要让气流保持稳定,这样才能准确的获取PM25的数据. 我们采用的气体质量流量控制器具备串口通讯功能, ...

  5. OneNET麒麟座应用开发之一:初识OneNET麒麟座

    今天收到了OneNET麒麟座开发板.能得到使用的机会只能说是幸运的.首先上一张靓照: 板子使用的MCU是STM32F103RET6,带有GSM摸块和Wifi摸块可以联网.带有显示屏接口和I2C接口以及 ...

  6. OneNET麒麟座应用开发之七:控制采样电机

    气体采样采用主动抽取气体的方式保证充足而平稳的气流,所以我们采用气泵抽取气体来完成. 1.设计概述 客户对这部分要求能够设定电机的速度,但并不需要动态调节.对电机的控制有很多方式,我们采用比较简单的方 ...

  7. STM32之HTU21D温湿度传感器获取温湿度数据

    一.引脚 二.代码 iic.c文件 #include "iic.h"/* 初始化模拟IIC**/ void IIC_Init(void) {GPIO_InitTypeDef GPI ...

  8. 嵌入式设计与开发项目-DHT11温湿度传感器程序设计

    嵌入式设计与开发项目-DHT11温湿度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DHT11温湿度的头文件"dht11.h" 3.DHT11温 ...

  9. 微信小程序获取Onenet温湿度数据并控制灯亮灭

    ​ 其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...

最新文章

  1. 台3岁女童疑把玩风枪致死案疑点多 警方将调查厘清
  2. python3.7.2安装-Centos7.6,安装python3.7.2
  3. How does a relational database work
  4. iphone、Android接收System.Net.Mail发的邮件标题乱码
  5. ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中
  6. [vue] 说说你觉得认为的vue开发规范有哪些?
  7. php绘制时钟刻度,怎么用canvas写钟表刻度的时钟和分钟
  8. 基于ARM的嵌入式Linux移植真实体验(3)――操作系统
  9. Mac电脑上的Safari运行缓慢,卡的要死,该怎么解决?
  10. oncreate 测量尺寸
  11. vc使用nmake时报错
  12. 清华上交等发表Nature子刊!分片线性神经网络最新综述!
  13. 工信部ICP备案管理系统滑动验证码破解
  14. spring data jpa 出现Not a managed type
  15. Amoeba:开源的分布式数据库Porxy解决方案
  16. 扫描件如何转换成pdf及word文档?
  17. Spring系列:2021年Java春招面试经历,内容太过真实
  18. 4246. 【五校联考6day2】san
  19. [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)
  20. 计算机处理器i5和i7,i5与i7有什么区别 酷睿i5和i7区别汇总【详细介绍】

热门文章

  1. 在堆区开辟内存(动态内存的开辟)
  2. 计算机屏保后无法进入登录界面,Win10锁屏界面无法登录卡在登录状态的应对办法...
  3. 本年盈余与预算结余差异表的分析(一)
  4. Android 构建简单app 步骤
  5. RabbitMQ的Queue详解;
  6. mds部署服务器系统,Windows服务器2003年对MDS/IPS-8配置示例的iSCSI主机
  7. 修图软件 Pixelmator Pro Mac版常见问题
  8. html消除冒泡,取消冒泡.html
  9. 物联网模块ESP8266-01S实现PC端和Android APP同时连接通信
  10. Freemarker提供了3种加载模板目录的方法