HTU21D传感器模块介绍
HTU21D 温度和传感器模块采用紧凑型用户友好型尺寸,采用来自瑞士 MEAS 的 HTU21D 芯片。该芯片实际上是提供各种功能的温度和湿度传感器,并且与微控制器一起使用非常简单。该传感器能够测量 -40 至 125°C 范围内的温度读数,精度为 ±0.3°C。同样,HTU21D 芯片还提供湿度传感器,其工作湿度范围为 0-100%,典型精度为 2%。
GY -213V-HTU21D 传感器模块具有 3.3V 稳压器和电平转换器。因此,与 Arduino、ESP32、STM32 等微控制器一起使用非常方便。该传感器非常适合与微控制器一起用于温度和湿度测量,例如恒温器、气象站等。此外,由于其低功耗(测量传感器数据时小于 0.5mA,睡眠模式时小于 0.14µA)非常适合在使用电池的设备中使用。
HTU21D 传感器模块如下图所示,它封装了 HTU21D 传感器芯片和用于 I2C 通信的内置 4.7k 欧姆上拉电阻。它是一个 3.3V 传感器,使用内联逻辑电平转换器或 10k 电阻来限制 5V 信号。
I2C接口
HTU21D 传感器模块使用 I2C 通信协议将传感器数据传输到微控制器。传感器模块具有 SCL(串行时钟)和 SDA(串行数据)引脚,可与 Arduino 或支持相同接口的其他传感器的 I2C 接口连接。
然而,HTU21D 传感器模块带有一个固定的 I2C 地址,即 0x40。为了与同一总线上的多个 HTU21D 传感器进行通信,需要一个多路复用器。
要在同一总线上使用多个 I2C 设备,HTU21D 传感器模块上的 4.7k 欧姆电阻被禁用。
HTU21D 传感器模块引出线
下图为市售的两种 HTU21D 传感器模块的引脚图。两者均由四个引脚组成。
下面列出了 HTU21D 传感器模块的引脚排列及其简要说明。
HTU21D模块管脚 | 描述 |
车辆识别号 | 这是为传感器模块供电的引脚。HTU21传感器模块连接3.3V,GY-213V-HTU21D传感器模块连接Arduino的3.3或5V引脚。 |
地线 | 这是用于在设备之间提供公共接地的接地引脚。 |
SCL | 这是产生时钟信号的串行时钟引脚。 |
SDA | 这是用于发送和接收数据的串行数据引脚 |
规格
HTU21D温湿度传感器规格如下表所示。
电源 | 3.3-5.5V(适用于GY-213V-HTU21D传感器模块) 1.5-3.6V(适用于HTU21传感器模块) |
湿度范围 | 0 – 100 %相对湿度 |
湿度精度 | 5% 至 95% RH 范围内的 ±2% |
温度范围 | -40˚C 至 +125˚C |
温度精度 | ±0.3˚C 在 25°C |
响应时间 | 5秒 |
测量时间 | 50毫秒 |
将 HTU21D 模块与 Arduino 接口
在本节中,让我们向您展示如何将 HTU21D 传感器模块连接到 Arduino。
下面列出了 HTU21D 传感器模块的引脚排列及其简要说明。
HTU21D模块管脚 | 描述 |
车辆识别号 | 这是为传感器模块供电的引脚。HTU21传感器模块连接3.3V,GY-213V-HTU21D传感器模块连接Arduino的3.3或5V引脚。 |
地线 | 这是用于在设备之间提供公共接地的接地引脚。 |
SCL | 这是产生时钟信号的串行时钟引脚。 |
SDA | 这是用于发送和接收数据的串行数据引脚 |
规格
HTU21D温湿度传感器规格如下表所示。
电源 | 3.3-5.5V(适用于GY-213V-HTU21D传感器模块) 1.5-3.6V(适用于HTU21传感器模块) |
湿度范围 | 0 – 100 %相对湿度 |
湿度精度 | 5% 至 95% RH 范围内的 ±2% |
温度范围 | -40˚C 至 +125˚C |
温度精度 | ±0.3˚C 在 25°C |
响应时间 | 5秒 |
测量时间 | 50毫秒 |
将 HTU21D 模块与 Arduino 接口
在本节中,让我们向您展示如何将 HTU21D 传感器模块连接到 Arduino。
您将需要以下组件
- Arduino
- HTU21D 传感器模块
- 跳线
HTU21D 与 Arduino 板的连接非常简单。HTU21D模块的VCC端接Arduino的3.3V,地接地(common ground),传感器的SCL接Arduino的SCL脚(A5),传感器的SDA接Arduino的SDA脚(A4) .
Arduino 中 SDA 的 I2C 引脚是 A4,SCL 是 A5。两个设备之间的连接可以在下表中看到。
阿杜诺 | HTU21D模块 |
3.3V | 输入电压 |
A4 | SDA |
A5 | SCL |
地线 | 地线 |
按照下面的 Arduino 模块示意图并相应地连接它们。
安装 HTU21D Arduino 库
我们将使用 Arduino IDE 对我们的 Arduino 开发板进行编程。因此,您应该拥有最新版本的 Arduino IDE。
由于我们将 HTU21D 传感器模块与 Arduino 连接,因此,我们必须安装库以访问传感器数据。这个项目需要两个库:
- Adafruit HTU21D
- Adafruit 总线
我们将使用 Arduino IDE 中的库管理器来安装最新版本的库。打开您的 Arduino IDE 并转到 Sketch > Include Libraries > Manage Libraries。 在搜索栏中输入 HTU21D 并安装最新版本。
在搜索栏中输入 Adafruit BusIO 并安装它。
Arduino 代码——在 Arduino 串行监视器上获取 HTU21D 读数
此草图每半秒显示一次 Arduino 串行监视器上的当前温度和湿度读数。
#include <Wire.h> #include "Adafruit_HTU21DF.h" Adafruit_HTU21DF htu = Adafruit_HTU21DF(); void setup() { Serial.begin(115200); if (!htu.begin()) { Serial.println("Check circuit. HTU21D not found!"); while (1); } } void loop() { float temp = htu.readTemperature(); float hum = htu.readHumidity(); Serial.print("Temperature(°C): "); Serial.print(temp); Serial.print("\t\t"); Serial.print("Humidity(%): "); Serial.println(hum); delay(500); }
守则如何运作?
现在,让我们了解代码的每个部分是如何工作的。
代码首先包含代码正常运行所需的所有必要库。Wire.h 将允许我们通过 I2C 协议进行通信。Adafruit_HTU21DF.h 库将使我们能够初始化和读取 HTU21D 传感器。
#include <Wire.h> #include "Adafruit_HTU21DF.h"
接下来我们创建名为“htu”的 Adafruit_HTU21DF 对象。
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
setup()
在 setup() 函数中,我们以 115200 的波特率开始串行通信,然后初始化 HTU21D 传感器。如果传感器初始化不成功,相关消息将打印在串口监视器上。
void setup() { Serial.begin(115200); if (!htu.begin()) { Serial.println("Check circuit. HTU21D not found!"); while (1); } }
loop()
在 loop() 函数内,Arduino 首先每半秒获取一次 HTU21D 传感器读数,并将它们存储在各自的浮点变量中,“temp”代表温度,“hum”代表湿度。通过 htu.readTemperature() 获取温度读数。使用 htu.readHumidity() 函数访问湿度读数。这些读数打印在 ESP-IDF 终端中。
void loop() { float temp = htu.readTemperature(); float hum = htu.readHumidity(); Serial.print("Temperature(°C): "); Serial.print(temp); Serial.print("\t\t"); Serial.print("Humidity(%): "); Serial.println(hum); delay(500); }
示范
在 Arduino IDE 中,单击工具 > 电路板并选择 Arduino。
现在,单击工具 > 端口并选择您正在使用的端口。现在,通过单击上传按钮上传代码。
在您的 Arduino 开发板上上传以下代码后,按下 ENABLE 按钮,如下所示:
在您的 Arduino IDE 中,打开串行监视器并将波特率设置为 115200。串行监视器将开始显示温度和湿度读数以及单位。每半秒后将显示新读数。
在 OLED 显示屏上显示 HTU21D 传感器值
在本节中,我们将了解如何使用 Arduino IDE 和 Arduino 在 0.96 SSD1306 OLED 显示器上显示 HTU21D 传感器读数。
在 Arduino IDE 中安装 SSD1306 OLED 库
要在我们的项目中使用 OLED 显示屏,我们必须在 Arduino IDE 中安装 Adafruit SSD 1306 库。请按照以下步骤成功安装它。
打开 Arduino IDE 并单击 Sketch > Library > Manage Libraries。将打开以下窗口。
在搜索选项卡中键入“SSD1306”并安装 Adafruit SSD1306 OLED 库。
原理图——带 Arduino 和 HTU21D 的 OLED
您将需要以下组件
- Arduino
- HTU21D 传感器模块
- SSD1306 有机发光二极管
- 面包板
- 跳线
下表显示了应连接在一起的三个设备的端子。
有机发光显示器 | 阿杜诺 | HTU21D 传感器模块 |
虚拟控制中心 | 3.3V | 车辆识别号 |
地线 | 地线 | 地线 |
SCL | A5 | SCL |
SDA | A4 | SDA |
如下图所示组装电路:
正如您在上面看到的,我们已经将所有 VCC 端子连接到 Arduino 的 3.3V 引脚。SCL端子与A5相连,SDA端子与A4相连。理由也很普遍。
Arduino Sketch 在 OLED 上显示 HTU21D 读数
把下面的代码复制到你的Arduino IDE中,组装好上面的电路图后上传到Arduino。
#include <Wire.h> #include "Adafruit_HTU21DF.h" #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_HTU21DF htu = Adafruit_HTU21DF(); Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1); void setup() { Serial.begin(115200); if (!htu.begin()) { Serial.println("Check circuit. HTU21D not found!"); while (1); } display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // init done display.display(); delay(100); display.clearDisplay(); display.display(); display.setTextColor(WHITE); } void loop() { float temp = htu.readTemperature(); float hum = htu.readHumidity(); Serial.print("Temperature(°C): "); Serial.print(temp); Serial.print("\t\t"); Serial.print("Humidity(%): "); Serial.println(hum); display.setCursor(0,0); display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.print("Temperature: "); display.setTextSize(2); display.setCursor(0,10); display.print(temp); display.print(" "); display.setTextSize(1); display.cp437(true); display.write(167); display.setTextSize(2); display.print("C"); // display humidity display.setTextSize(1); display.setCursor(0, 35); display.print("Humidity: "); display.setTextSize(2); display.setCursor(0, 45); display.print(hum); display.print(" %"); display.display(); delay(500); }
守则如何运作?
代码的最大部分与我们之前讨论的相同,除了 OLED 显示部分。因此,我们这里只对OLED显示部分进行说明。
我们将首先包含 HTU21D 传感器以及我们之前刚刚安装的 OLED 显示器所需的所有库。
#include <Wire.h> #include "Adafruit_HTU21DF.h" #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
现在,我们将创建另一个名为“display”的对象,它将处理 OLED 显示器。此外,通过将参数传递给 Adafruit_SSD1306() 函数来定义 OLED 显示屏的大小。
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
通过调用显示对象的 begin() 方法来初始化 OLED 显示。
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
接下来,我们将通过调用 clearDisplay() 函数来清除 OLED 屏幕。此外,我们使用 setTextColor() 函数设置文本的颜色,并将 WHITE 作为参数传递。如果我们有一个黑暗的背景,我们将以白色显示我们的文本,如果我们有一个明亮的背景,那么我们将以黑色显示文本。
display.clearDisplay(); display.display(); display.setTextColor(WHITE);
在 OLED 上显示读数
在 loop() 函数中,我们获取 HTU21D 传感器读数并将其打印在 OLED 显示屏上。
我们将串口监视器上的温湿度值一一显示在OLED上。此代码块在 OLED 上显示 HTU21D 传感器值并每半秒更新一次值。
display.setCursor(0,0); display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.print("Temperature: "); display.setTextSize(2); display.setCursor(0,10); display.print(temp); display.print(" "); display.setTextSize(1); display.cp437(true); display.write(167); display.setTextSize(2); display.print("C"); // display humidity display.setTextSize(1); display.setCursor(0, 35); display.print("Humidity: "); display.setTextSize(2); display.setCursor(0, 45); display.print(hum); display.print(" %"); display.display(); delay(500);
在上面的代码中,setTextSize() 函数用于设置字体的大小。我们对“温度”和“湿度”等简单文本使用小字体,并使用大字体显示实际温度和湿度读数。我们将使用 setCursor() 函数来表示文本应该开始的 x 轴和 y 轴位置。最后,print() 函数将文本写入定义的位置。
本文来源:IC先生网www.mrchip.cn,请勿转载。