龙空技术网

STM32F103C8 监控室内湿度温度

大华工控上位机 116

前言:

现时我们对“用stm32f103测温”大体比较重视,同学们都想要分析一些“用stm32f103测温”的相关内容。那么小编也在网摘上收集了一些关于“用stm32f103测温””的相关文章,希望大家能喜欢,朋友们一起来学习一下吧!

DHT11是一种温度和湿度传感器,顾名思义,用于测量特定环境或密闭空间中的大气温度和湿度。该传感器通常用于监测农业、食品工业、医院、汽车、气象站等许多应用中的环境参数。

该传感器可以测量0°C到50°C的温度,精度为1°C。它通常用于控制环境,如热通风系统、恒温室等,监测温度以采取纠正措施。

湿度测量范围为20%至90%,精度为1%。湿度表示空气中存在的水蒸气含量。在许多情况下,湿度值必须保持在受控范围内,例如在茶粉的制造和储存过程中,室内必须保持作业要求的湿度,否则会影响茶的味道和气味。客厅的湿度水平也应保持在舒适的范围内,理想的舒适的湿度值在50%到65%之间。

今天,我们学习如何将流行的 DHT11传感器与 STM32配合检测环境温度和湿度。前面我们已经学习了STM32 板的基础知识以及如何使用 Arduino IDE 对它编程。

DHT11温湿度传感器

如前所述,DHT11传感器用于测量温度和湿度。该传感器配有专用的内置NTC来测量温度。它有一个8位微控制器,通过单线协议将温度和湿度值作为串行数据输出。也就是说,传感器只有一个数据管脚,通过它可以读取温度和湿度值,从而节省微控制器端的管脚。传感器也经过工厂校准,因此易于与其他微控制器对接。

DHT11 参数规格:

§ 工作电压:3.5V 至 5.5V

§ 工作电流:0.3mA(测量)60uA(待机)

§ 输出:串行数据

§ 温度范围:0°C 至 50°C

§ 湿度范围:20% 至 90%

§ 分辨率:温度和湿度均为 16 位

§ 准确度:±1°C 和 ±1%

电路连接

将DHT11 与 STM32连接的电路图如下所示。电路是使用 Fritzing 软件绘制的。

如您所见,我们使用I2C 接口模块将 LCD 模块连接到 STM32。这使连接变得简单,并进一步减少了控制器端使用的引脚数量。如下图

同样,STM32F103C8 和 DHT11 传感器之间的电路连接如下表所示。

整个电路由电脑的 USB 端口供电。现在我们的硬件已经准备好了,让我们进入编码部分。

配置Arduino IDE

我们要编写程序,从 DHT11 传感器中读取温度和湿度值并将其显示在 LCD 模块上。这里LCD显示器是通过I2C适配器连接的,因此我们首先要找到这个适配器的I2C地址来与LCD通信。

查找 I2C 串行接口模块的地址

1.在Arduino IDE安装STM32开发包

2. 示例中提供了用于扫描连接的 I2C 设备的程序(在 Arduino IDE 中:文件->示例->Wire->I2C scanner_wire)。如下所示。

3. 将代码上传到 STM32F103C8,打开串行监视器。STM32F103C8上电开机。

我们可以看到,在串口监视器中,I2C的地址为“0x27”。

安装相关库文件

导入I2C LCD库,以便STM32F103C8通过 I2C 与 LCD 显示器进行通信

接着安装DHT库

安装好DHT包后,就可以开始编写程序了。

程序

#include <Wire.h> // I2C 库#include <LiquidCrystal_I2C.h> // I2C LCD 库#include <DHT.h> //DHT库#define DHTPIN PA1 //定义与STM32F103C8的PA1相连的DHT11(OUT引脚)的引脚名称#define DHTTYPE DHT11LiquidCrystal_I2C lcd(0x27, 16, 2); //初始化lcd,I2C地址0x27,16*2 类型LCDDHT dht(DHTPIN, DHTTYPE); // 初始化dht,stm连接DHT的引脚,类型为DHT11void setup(){  lcd.begin();  dht.begin(); //开始接收温度和湿度值。  lcd.backlight();  lcd.setCursor(0,0);  lcd.print("Hello World");  lcd.setCursor(0,1);  lcd.print("DHT11 with STM32");  delay(3000);  lcd.clear();}void loop(){  float h = dht.readHumidity(); //获取湿度值  float t = dht.readTemperature(); //获取温度值  lcd.setCursor(0,0);  lcd.print("Temp: ");  lcd.print(t);  lcd.print(" C");  lcd.setCursor(0,1);  lcd.print("Humid: ");  lcd.print(h);  lcd.print(" %");}

标签: #用stm32f103测温