Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
Видеоролики, посвященные цифровому датчику относительной влажности и температуры HTU21D. Ссылки на другие видеоролики находятся ниже этой статьи.
Отображение температуры с HTU21D на ЖК-дисплее
В этом учебном пособии мы узнаем, как отображать показания температуры с датчика температуры и влажности HTU21D на ЖК-экране. Результатом станет функционирующий комплект, где температура может отображаться в градусах Цельсия, Фаренгейта и Кельвина, вместе с относительной влажностью на том же экране. Этот проект даст вам практический опыт работы с I2C-связью и основами обработки данных с датчиков. Для подробного визуального руководства обязательно посмотрите видео (в видео на 00:00).

Объяснение аппаратного обеспечения
Основные компоненты этого проекта включают датчик HTU21D и LCD-дисплей. HTU21D — это цифровой датчик влажности и температуры, который передает данные через протокол I2C. Он обеспечивает точные измерения температуры в градусах Цельсия или Фаренгейта и относительной влажности в процентах. Датчик обычно работает при напряжении 3.3V, но также может функционировать в системах с 5V. LCD-дисплей, который мы будем использовать, представляет собой LCD 16x2 с интерфейсом I2C. Такой тип дисплея требует всего две провода для передачи данных, что облегчает подключение к микроконтроллерам, таким как Arduino. Интерфейс I2C позволяет подключать несколько устройств к одной шине, упрощая проводку и уменьшая количество используемых выводов.
Детали технического паспорта
| Производитель | Адафрут |
|---|---|
| Номер детали | HTU21D-F |
| Логическое/выходное напряжение | 3.3 В (тип.) |
| Напряжение питания | 1,5 В до 3,6 В |
| Выходной ток | 0.5 мА (тип.) |
| Пиковый ток | 1,5 мА (макс.) |
| Диапазон температур | -40 до 125 °C |
| Диапазон влажности | 0 до 100 %RH |
| Упаковка | DFN-6 |
| Заметки / варианты | None |
- Обеспечьте правильный уровень напряжения, чтобы избежать повреждения датчика.
- При необходимости используйте подтягивающие резисторы на линиях SDA и SCL.
- Проверьте адрес I2C с помощью сканера, чтобы гарантировать правильную конфигурацию.
- Обращайтесь с выходом сенсора осторожно, чтобы избежать ошибок считывания.
- Держите сенсор подальше от источников тепла при проведении измерений.
Инструкции по проводке

Чтобы подключить датчик HTU21D к Arduino, подключите вывод VCC датчика к выходу 3.3V на Arduino. Затем подключите вывод GND датчика к земле Arduino. Вывод SDA, который используется для передачи данных, должен быть подключен к выводу A4 на Arduino. Точно так же подключите вывод SCL, который используется для сигнала тактирования, к выводу A5 на Arduino. Также убедитесь, что ваш ЖК-дисплей подключен правильно; I2C адрес для ЖК-дисплея в этой конфигурации обычно составляет 0x3F. Если вы используете другой тип ЖК-дисплея или другой I2C адрес, убедитесь, что вы соответствующим образом изменили код. После подключения убедитесь, что нет слабых соединений, перед тем как включить Arduino.
Примеры кода и пошаговая инструкция
В коде мы начинаем с подключения необходимых библиотек для датчика HTU21D и ЖК-дисплея:
#include
#include "Adafruit_HTU21DF.h"
#include
Это настраивает окружение для использования как сенсора, так и дисплея. Библиотека `Adafruit_HTU21DF` управляет функциональностью сенсора, в то время как библиотека `LiquidCrystal_I2C` управляет ЖК-дисплеем. Далее мы создаем экземпляр для сенсора и ЖК-дисплея:
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
LiquidCrystal_I2C lcd(0x3F, 16, 2);
Здесь,htuявляется объектом для сенсора HTU21D, иlcdобъект для LCD-дисплея. Адрес I2C для LCD установлен на 0x3F, который вам может потребоваться проверить в зависимости от вашей конфигурации.
Вsetup()функция, мы инициализируем ЖК-дисплей и проверяем, работает ли датчик:
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Sensor missing");
while (1);
}
lcd.print("HTU21D Ready");
}
Код инициализирует ЖК-дисплей и проверяет наличие датчика. Если датчик не обнаружен, на экране появится надпись "Датчик отсутствует", и программа остановится.
В конце, вloop()функция, мы непрерывно считываем значения температуры и влажности и отображаем их:
void loop() {
lcd.clear();
lcdDisplay(0, 0, "Celsius: ", 10, 0, getHTU('C'), 'd');
lcdDisplay(0, 1, "Humidity: ", 10, 1, getHTU('H'), '%');
delay(5000);
}
В этом отрывке мы очищаем ЖК-дисплей, а затем вызываемlcdDisplay()функция для отображения температуры в Цельсиях и влажности.getHTU()функция получает температуру или влажность в зависимости от переданного символа.
Демонстрация / Что ожидать
Когда установка завершена и код загружен на Arduino, ЖК-дисплей должен отображать текущую температуру в Цельсиях и относительную влажность. Если все подключено правильно, вы будете видеть обновление значений каждые несколько секунд. Обратите внимание на распространенные ошибки, такие как перепутанные соединения или неправильные адреса I2C, которые могут привести к сбоям в коммуникации с сенсорами (в видео на 05:00).
Временные метки видео
- 00:00Введение
- 01:30- Инструкции по проводке
- 03:15- Объяснение кода
- 04:50- Демонстрация
- 05:40- Заключение
Этот учебник является частью: Цифровой датчик относительной влажности и температуры HTU21D
- Урок 35-1: Использование датчика температуры HTU21D
- Урок 35-2: Использование датчика температуры HTU21D - собственный код
- Урок 35: Использование датчика температуры HTU21D с Arduino
- Урок 36: Использование датчика температуры HTU21D с LCD Arduino пошаговый курс
- Использование двух датчиков влажности и температуры HTU21DF с Arduino
- Отображение температуры с HTU21D в виде столбчатой диаграммы на ЖК-дисплее
- Как использовать датчик влажности и температуры HTU21DF с Arduino (базовый код)
- Как использовать датчик влажности и температуры HTU21DF с Arduino (пользовательский код)
/*
* Display Temperature from HTU21DF on LCD1602-I2C or LCD2004
* Updated by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
* Watch video instructions for this sketch:
**************************************************
*
This is an example for the HTU21D-F Humidity & Temp Sensor
Designed specifically to work with the HTU21D-F sensor from Adafruit
----> https://www.adafruit.com/products/1899
These displays use I2C to communicate; 2 pins are required to
interface
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Wire.h>
#include "Adafruit_HTU21DF.h"
// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)
Adafruit_HTU21DF htu = Adafruit_HTU21DF();
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602 with I2C
void setup() {
lcd.begin();
lcd.backlight();
if (!htu.begin()) {
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("sensor missing");
while (1);
}else{
// initialize the LCD
lcd.print("Robojax HTUD1DF");
lcd.setCursor(0,1);
lcd.print("Demo");
}
delay(2000);
}
void loop() {
lcd.clear();// clear previous values from screen
lcdDisplay(
// to print Celsius:
0, // character 0
0, // line 0
"Celsius: ",
// to print Celsius
10, // character 10
0, // line 0
getHTU('C'),
'd'
);
lcdDisplay(
// to print Fahrenheit:
0, // character 0
1, // line 1
"Fahrenheit: ",
// to print Fahrenheit
10, // character 9
1, // line 0
getHTU('F'),
'd'
);
delay(5000);
lcdDisplay(
// to print Kelvin:
0, // character 0
0, // line 0
"Kelvin: ",
// to print Celsius
9, // character 10
0, // line 0
getHTU('K'),
'k'
);
lcdDisplay(
// to print humidity text
0, // character 0
1, // line 1
"Humidity: ",
// to print humidity
10, // character 9
1, // line 1
getHTU('H'),
'%'
);
delay(5000);
}
/*
* @brief returns temperature or relative humidity
* @param "type" is character
* C = Celsius
* K = Kelvin
* F = Fahrenheit
* H = Humidity
* @return returns one of the values above
* Usage: to get Fahrenheit type: getHTU('F')
* to print it on serial monitor Serial.println(getHTU('F'));
* Written by Ahmad Shamshiri on July 13, 2019
* in Ajax, Ontario, Canada
* www.Robojax.com
*/
float getHTU(char type)
{
float value;
float temp = htu.readTemperature();
float rel_hum = htu.readHumidity();
if(type =='F')
{
value = temp *9/5 + 32;//convert to Fahrenheit
}else if(type =='K')
{
value = temp + 273.15;//convert to Kelvin
}else if(type =='H')
{
value = rel_hum;//return relative humidity
}else{
value = temp;// return Celsius
}
return value;
}//
/*
* lcdDisplay(int tc, int tr, String title, int vc, int vr, float value)
* displays value and title on LCD1602
* How to use:
* If you want to display: "Voltage: 13.56mV" starting from the first character
* on the second row.
* use:
* lcdDisplay(0, 1, "Voltage: ", 13.56,'d')
*
* 'd' is degree symbol
* tc is character number (0)
* tr is row in the lcd (1)
* title is the text (Voltage:)
* vc value for character
* vr value for row or line
* value is the value (13.56)
*/
void lcdDisplay(int tc, int tr, String title, int vc, int vr, float value,char symbol)
{
// Robojax.com LCD1602 for HTU21D Demo
lcd.setCursor (tc,tr); //
lcd.print(title);
lcd.setCursor (vc,vr); //
lcd.print(value);
if(symbol == 'd')
{
lcd.print((char)223);
}else if(symbol =='%')
{
lcd.print("%");
}else if(symbol =='k')
{
lcd.print("K");
}
// Robojax.com LCD1602 for HTU21D Demo
}
Вещи, которые могут вам понадобиться
-
АмазонкаКупите модуль HTU21D на Amazon.amzn.to
-
eBayКупите HTU21D на eBayebay.us
-
АлиЭкспрессПриобретите HTU21D или SHT21 на AliExpress.s.click.aliexpress.com
Ресурсы и ссылки
-
ВнешнийБиблиотека Adafruit HTU21D (GitHub)github.com
Файлы📁
Технический паспорт (pdf)
-
HTU21D_даташит_температуры_и_влажности
HTU21D_temerature_humidity_datasheet.pdf0.96 MB