STM32F103C8 监控室内湿度温度

STM32F103C8 监控室内湿度温度_第1张图片

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

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

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

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

DHT11温湿度传感器

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

STM32F103C8 监控室内湿度温度_第2张图片

DHT11 参数规格:

§ 工作电压:3.5V 至 5.5V

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

§ 输出:串行数据

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

§ 湿度范围:20% 至 90%

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

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

STM32F103C8 监控室内湿度温度_第3张图片

电路连接

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

STM32F103C8 监控室内湿度温度_第4张图片

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

STM32F103C8 监控室内湿度温度_第5张图片

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

STM32F103C8 监控室内湿度温度_第6张图片

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

配置Arduino IDE

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

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

1.在Arduino IDE安装STM32开发包

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

STM32F103C8 监控室内湿度温度_第7张图片

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

STM32F103C8 监控室内湿度温度_第8张图片

STM32F103C8 监控室内湿度温度_第9张图片

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

安装相关库文件

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

STM32F103C8 监控室内湿度温度_第10张图片

接着安装DHT库

STM32F103C8 监控室内湿度温度_第11张图片

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

程序

#include  // I2C 库
#include  // I2C LCD 库
#include  //DHT库
#define DHTPIN PA1 //定义与STM32F103C8的PA1相连的DHT11(OUT引脚)的引脚名称
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2); //初始化lcd,I2C地址0x27,16*2 类型LCD
DHT dht(DHTPIN, DHTTYPE); // 初始化dht,stm连接DHT的引脚,类型为DHT11
void 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(" %");
}

你可能感兴趣的:(单片机,stm32,物联网,嵌入式硬件)