Обзор
AHT20 — это высокоточный цифровой датчик температуры и влажности от Aosong (Aosong Electronics Co., Ltd.). Усовершенствованная версия AHT10, которая предлагает повышенную точность и улучшенную надежность. Датчик использует интерфейс I²C и идеально подходит для метеостанций, систем контроля климата в помещениях и промышленных применений.
AHT20 — цифровой датчик температуры и влажности с интерфейсом I²C. Он даёт более точные и стабильные измерения по сравнению с AHT10 и хорошо подходит для метеостанций, мониторинга микроклимата и IoT‑проектов.
О датчике температуры и влажности AHT20
Семейство AHT, разработанное компанией AOSONG, состоит из высокоточных цифровых датчиков температуры и влажности. AHT20 — это усовершенствованная версия, которая предлагает повышенную точность и улучшенную надежность по сравнению с AHT10.
⚡ Ключевые особенности
- Улучшенная производительность – AHT20 обеспечивает более высокую точность и улучшенную надежность по сравнению с AHT10.
- Надежный мониторинг окружающей среды – Идеально подходит для метеостанций, контроля климата в помещениях и промышленных применений.
- Компактный и эффективный – Цифровой вывод с интерфейсом I²C для бесперебойной интеграции.
🔗 Подробнее о датчике AHT20. 🔗 Ознакомьтесь с датчиком AHT10 для более доступного варианта.
Приобретите AHT20
Характеристики AHT20
Полные технические характеристики датчика температуры и влажности AHT20.
Распиновка AHT20
Распиновка AHT20 включает четыре вывода: VCC (питание), GND (земля), SDA (линия данных I2C) и SCL (тактовая линия I2C). Этот улучшенный датчик обеспечивает более точные измерения температуры и влажности по протоколу I2C.
- Адрес I2C — 0x38 (как у AHT10).
- Точность — ±0.3°C и ±2% RH.
- Подтяжка — на SDA/SCL обычно нужна (часто уже на модуле).
| № | Название | Тип | Описание | Примечания |
|---|---|---|---|---|
| 1 | VCC | Питание | Питание (3.3В–5В) | Обычно 3.3В для ESP32 |
| 2 | GND | Земля | Подключение земли | Общая земля |
| 3 | SDA | I2C Data | Линия данных I2C | Двунаправленная (нужна подтяжка) |
| 4 | SCL | I2C Clock | Тактовая линия I2C | Тактовый сигнал (нужна подтяжка) |
Подключение AHT20 к ESP32
Подключите AHT20 к ESP32 по I2C (выводы SDA и SCL). Этот улучшенный датчик обеспечивает более высокую точность и надёжность по сравнению с AHT10. На линиях I2C требуются подтягивающие резисторы (обычно 4.7kΩ).
| Вывод AHT20 | Подключение | Вывод ESP32 | Описание |
|---|---|---|---|
| VCC обязательно | → | 3.3V | Питание (3.3В или 5В) |
| GND обязательно | → | GND | Общая земля |
| SDA обязательно | → | GPIO21 | Линия данных I2C (с подтяжкой 4.7kΩ) |
| SCL обязательно | → | GPIO22 | Тактовая линия I2C (с подтяжкой 4.7kΩ) |
Устранение неполадок AHT20
Распространённые проблемы и решения, которые помогут запустить датчик.
Ошибка инициализации на ESP32
Например: AHT20 sensor initialization failed
AHT20 sensor initialization failedПроблема: датчик не стартует и выдаёт ошибку статуса.
Возможные причины: неверные пины I2C, отсутствие общей земли, неподходящее питание.
Решение: проверьте SDA/SCL (обычно GPIO21/GPIO22), питание 3.3В (или 5В для модуля) и отсутствие конфликта по адресу 0x38. Подробнее: forum.arduino.cc.
Ошибка связи в ESPHome
[E][aht10:080]: Communication ... failed!
[E][aht10:080]: Communication ... failed!Проблема: нет показаний температуры/влажности в логах.
Решение: укажите variant: AHT20, обновите ESPHome и проверьте, что I2C настроен на правильных пинах. Обсуждение: github.com.
Температура «уплывает» вверх
Обычно из‑за саморазогрева
Причины: датчик слишком близко к ESP32/стабилизатору, плохая вентиляция.
Решение: отнесите датчик от источников тепла, используйте более длинные провода и обеспечьте циркуляцию воздуха. Пример обсуждения: community.home-assistant.io.
Адрес виден, но чтение не работает
Error: Read failed
Error: Read failedВозможные причины: нет подтяжки на SDA/SCL, длинные провода, помехи или конфликт устройств.
Решение: добавьте/проверьте подтяжку (обычно 4.7kΩ), убедитесь в корректной инициализации I2C и отсутствии конфликтов адресов.
Советы по отладке
Serial монитор
Проверка логов и ошибок
Проверка напряжения
Мультиметр и целостность цепи
Дополнительные ресурсы
Примеры программирования AHT20
Готовые к использованию примеры кода для различных платформ и фреймворков
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
C++
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
#include <Wire.h>
#include <Adafruit_AHTX0.h> // Правильная библиотека для AHT20
// Создаем экземпляр датчика AHT20
Adafruit_AHTX0 aht;
void setup() {
// Инициализация Serial Monitor
Serial.begin(115200);
Serial.println("Пример датчика AHT20");
// Инициализация I2C коммуникации
if (!aht.begin()) { // Параметр не требуется, адрес 0x38 по умолчанию
Serial.println("Не удалось найти датчик AHT20! Проверьте подключение.");
while (1); // Бесконечный цикл при ошибке инициализации
}
Serial.println("Датчик AHT20 инициализирован.");
}
void loop() {
// Получение данных с датчика
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp); // Считывание показаний
// Вывод температуры и влажности
Serial.print("Температура: ");
Serial.print(temp.temperature);
Serial.println(" °C");
Serial.print("Влажность: ");
Serial.print(humidity.relative_humidity);
Serial.println(" %");
// Задержка между измерениями
delay(2000);
}
Этот Arduino-скетч взаимодействует с датчиком температуры и влажности AHT20 через I2C с использованием библиотеки Adafruit AHTX0. Датчик автоматически инициализируется с I2C адресом 0x38. Метод getEvent() заполняет объекты sensors_event_t значениями температуры и относительной влажности. Измерения выводятся в Serial Monitor каждые 2 секунды.
Требуемая библиотека
Для использования этого кода установите библиотеку Adafruit AHTX0 через Arduino Library Manager:
- Откройте Arduino IDE.
- Перейдите Sketch → Include Library → Manage Libraries.
- Найдите ‘Adafruit AHTX0’ и установите её.
Также можно скачать с официального репозитория GitHub:
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
C++
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/i2c.h"
#define I2C_MASTER_NUM I2C_NUM_0
#define I2C_MASTER_SDA_IO 21
#define I2C_MASTER_SCL_IO 22
#define I2C_MASTER_FREQ_HZ 100000 // Стандартная частота I2C
#define AHT20_ADDR 0x38 // I2C адрес AHT20
// Команды AHT20
#define AHT20_CMD_INIT 0xBE
#define AHT20_CMD_TRIGGER 0xAC
#define AHT20_CMD_SOFTRESET 0xBA
// Функция инициализации I2C
void i2c_master_init() {
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ,
};
i2c_param_config(I2C_MASTER_NUM, &conf);
i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0);
}
// Отправка команды AHT20
esp_err_t aht20_write_cmd(uint8_t cmd) {
i2c_cmd_handle_t handle = i2c_cmd_link_create();
i2c_master_start(handle);
i2c_master_write_byte(handle, (AHT20_ADDR << 1) | I2C_MASTER_WRITE, true);
i2c_master_write_byte(handle, cmd, true);
i2c_master_stop(handle);
esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, pdMS_TO_TICKS(1000));
i2c_cmd_link_delete(handle);
return ret;
}
// Чтение данных из AHT20
esp_err_t aht20_read_data(uint8_t *data, size_t length) {
i2c_cmd_handle_t handle = i2c_cmd_link_create();
i2c_master_start(handle);
i2c_master_write_byte(handle, (AHT20_ADDR << 1) | I2C_MASTER_READ, true);
i2c_master_read(handle, data, length, I2C_MASTER_LAST_NACK);
i2c_master_stop(handle);
esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, pdMS_TO_TICKS(1000));
i2c_cmd_link_delete(handle);
return ret;
}
// Инициализация AHT20
void aht20_init() {
aht20_write_cmd(AHT20_CMD_SOFTRESET);
vTaskDelay(pdMS_TO_TICKS(20)); // Ждем после сброса
aht20_write_cmd(AHT20_CMD_INIT);
vTaskDelay(pdMS_TO_TICKS(20)); // Ждем завершения инициализации
}
// Получение температуры и влажности
void aht20_get_temp_humidity(float *temperature, float *humidity) {
uint8_t data[6];
aht20_write_cmd(AHT20_CMD_TRIGGER);
vTaskDelay(pdMS_TO_TICKS(80)); // Ждем завершения измерения
if (aht20_read_data(data, 6) == ESP_OK) {
uint32_t raw_humidity = ((data[1] << 16) | (data[2] << 8) | data[3]) >> 4;
uint32_t raw_temperature = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5];
*humidity = ((float)raw_humidity / 1048576.0) * 100.0;
*temperature = ((float)raw_temperature / 1048576.0) * 200.0 - 50.0;
} else {
*humidity = -1.0;
*temperature = -1.0;
}
}
// Основная задача
void app_main() {
float temperature = 0.0, humidity = 0.0;
i2c_master_init();
aht20_init();
while (1) {
aht20_get_temp_humidity(&temperature, &humidity);
printf("Температура: %.2f °C, Влажность: %.2f %%\n", temperature, humidity);
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
Этот пример для ESP-IDF инициализирует I2C на ESP32 и настраивает датчик AHT20. Функция aht20_init() выполняет программный сброс и отправляет команды инициализации. Функция aht20_get_temp_humidity() запускает измерение, считывает 6 байт сырых данных и преобразует их в значения с плавающей точкой для температуры (°C) и влажности (%). Задача app_main() выводит показания каждые 2 секунды с помощью printf().
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
YAML
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
i2c:
- id: i2c_aht20
sda: GPIO21
scl: GPIO22
sensor:
- platform: aht10
variant: AHT20
temperature:
name: "Living Room Temperature"
unit_of_measurement: "°C"
humidity:
name: "Living Room Humidity"
unit_of_measurement: "%"
update_interval: 60s
Эта конфигурация ESPHome задаёт шину I2C на GPIO21 (SDA) и GPIO22 (SCL). Платформа aht10 используется с параметром variant: AHT20, чтобы указать тип датчика. Создаются два сенсора: температура и влажность, каждый со своим именем и обновлением каждые 60 секунд. Значения автоматически публикуются в Home Assistant.
Пример для PlatformIO
Профессиональная среда разработки
C++
Пример для PlatformIO
Профессиональная среда разработки
platformio.ini
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/Adafruit AHTX0 @ ^2.0.0
arduino-libraries/Wire
build_flags =
-DAHT20_I2C_ADDR=0x38
-DUSE_AHT20
main.cpp
#include <Wire.h>
#include "Adafruit_AHT20.h" // Используем AHT20 вместо AHT10
Adafruit_AHT20 aht20;
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // SDA=21, SCL=22 для ESP32
// Инициализация датчика AHT20
if (!aht20.begin(0x38)) { // Явно указываем адрес 0x38
Serial.println("Не удалось найти датчик AHT20! Проверьте подключение.");
while (1); // Останавливаем выполнение при ошибке
}
Serial.println("Датчик AHT20 инициализирован.");
}
void loop() {
// Получение данных о температуре и влажности
sensors_event_t humidity, temp;
aht20.getEvent(&humidity, &temp); // Получаем значения
// Вывод в монитор порта
Serial.print("Температура: ");
Serial.print(temp.temperature);
Serial.println(" °C");
Serial.print("Влажность: ");
Serial.print(humidity.relative_humidity);
Serial.println(" %");
// Пауза между измерениями
delay(2000);
}
Файл platformio.ini настраивает проект для ESP32 на фреймворке Arduino. Подключаются библиотеки Adafruit AHTX0 (подходит для AHT20) и Wire. В build_flags задаются параметры датчика. В main.cpp инициализируется I2C на GPIO21/22, проверяется обнаружение датчика и каждые 2 секунды выводятся температура и влажность.
Пример для MicroPython
Python для микроконтроллеров
Python
Пример для MicroPython
Python для микроконтроллеров
import machine
import time
from ahtx0 import AHT20 # Убедитесь, что библиотека ahtx0 установлена
# Инициализация I2C
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))
# Инициализация датчика AHT20
sensor = AHT20(i2c)
# Основной цикл
while True:
try:
# Считывание температуры и влажности
temperature = sensor.temperature
humidity = sensor.humidity
# Вывод значений
print("Температура: {:.2f} °C".format(temperature))
print("Влажность: {:.2f} %".format(humidity))
# Задержка 2 секунды
time.sleep(2)
except Exception as e:
print("Ошибка чтения датчика:", e)
time.sleep(2)
Этот скрипт MicroPython использует библиотеку для AHT20 (ahtx0) и общается с датчиком по I2C на GPIO21 (SDA) и GPIO22 (SCL). Датчик инициализируется автоматически при создании объекта AHT20. В основном цикле читаются свойства sensor.temperature и sensor.humidity, после чего значения печатаются с двумя знаками после запятой. Задержка 2 секунды между измерениями снижает нагрузку и даёт датчику время стабилизироваться. Исключения перехватываются и выводятся, чтобы упростить отладку.
Итоги AHT20
Датчик температуры и влажности **AHT20** для ESP32 — это мощный датчик окружающей среды, который обеспечивает отличную производительность и надёжность. Он поддерживает разные платформы разработки, включая Arduino, ESP-IDF, ESPHome, PlatformIO и MicroPython, поэтому хорошо подходит для IoT проектов.
Рекомендации
Для лучшей точности убедитесь, что на линиях SDA и SCL установлены подтягивающие резисторы I2C (4.7kΩ). Используйте стабильное питание 3.3В, размещайте датчик подальше от источников тепла и обеспечьте нормальную вентиляцию для корректных измерений.
Безопасность прежде всего
Перед подключением всегда проверяйте питание (3.3В или 5В — зависит от модуля). Не подвергайте датчик температурам ниже -40°C или выше 85°C и влажности выше 100% RH.
Готовы начать создавать?
Теперь, когда у вас есть вся необходимая информация, пора интегрировать AHT20 в проект на ESP32 и воплотить идеи в жизнь!
Изучите альтернативные датчики
Ищете альтернативы AHT20? Посмотрите эти похожие датчики — возможно, они лучше подойдут под задачи вашего проекта.

SHT31 / SHT31-D / GY-SHT31 / SI7021 — датчик температуры и влажности
Серия SHT31 использует технологию CMOSens® от Sensirion, чтобы обеспечивать точные, стабильные и линейные данные температуры и влажности...

Датчик температуры и влажности AHT10
AHT10 — современный, полностью откалиброванный и высокоинтегрированный датчик температуры и влажности, обеспечивающий надёжные и точные...

BMP280 — датчик атмосферного давления и температуры
BMP280 — высокоточный цифровой датчик атмосферного давления и температуры, отлично подходит для мониторинга погоды, альтиметрии...

Датчик температуры и влажности BME280
BME280 — высокоточный цифровой датчик, который измеряет температуру, влажность и атмосферное давление. Идеален для мониторинга погоды...