Датчик температуры и влажности AHT20

Узнайте всё о датчике температуры и влажности AHT20: спецификации, распиновка, схемы подключения, документация и примеры кода для ESP32, Arduino, Raspberry

Окружающая среда I2C

Обзор

AHT20 — это высокоточный цифровой датчик температуры и влажности от Aosong (Aosong Electronics Co., Ltd.). Усовершенствованная версия AHT10, которая предлагает повышенную точность и улучшенную надежность. Датчик использует интерфейс I²C и идеально подходит для метеостанций, систем контроля климата в помещениях и промышленных применений.

AHT20 — цифровой датчик температуры и влажности с интерфейсом I²C. Он даёт более точные и стабильные измерения по сравнению с AHT10 и хорошо подходит для метеостанций, мониторинга микроклимата и IoT‑проектов.

Датчик AHT20
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы

О датчике температуры и влажности AHT20

Семейство AHT, разработанное компанией AOSONG, состоит из высокоточных цифровых датчиков температуры и влажности. AHT20 — это усовершенствованная версия, которая предлагает повышенную точность и улучшенную надежность по сравнению с AHT10.

Ключевые особенности

  • Улучшенная производительностьAHT20 обеспечивает более высокую точность и улучшенную надежность по сравнению с AHT10.
  • Надежный мониторинг окружающей среды – Идеально подходит для метеостанций, контроля климата в помещениях и промышленных применений.
  • Компактный и эффективный – Цифровой вывод с интерфейсом I²C для бесперебойной интеграции.

🔗 Подробнее о датчике AHT20. 🔗 Ознакомьтесь с датчиком AHT10 для более доступного варианта.

Где купить

Приобретите AHT20

Технические характеристики

Характеристики AHT20

Полные технические характеристики датчика температуры и влажности AHT20.

Интерфейс
I2C
Точность
±2% RH, ±0.3 °C
Диапазон
-40°C…85°C, 0–100% RH
Питание
2.0–5.5В (обычно 3.3В)
Скачать полный даташит
Конфигурация пинов

Распиновка AHT20

Распиновка AHT20 включает четыре вывода: VCC (питание), GND (земля), SDA (линия данных I2C) и SCL (тактовая линия I2C). Этот улучшенный датчик обеспечивает более точные измерения температуры и влажности по протоколу I2C.

Визуальная диаграмма распиновки
Основное
Распиновка AHT20
Всего выводов
4
Типы
Питание + 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Ω).

Схема подключения
Рекомендуемая (I2C)
Подключение AHT20 к ESP32
Подключений
4
Статус
Все обязательны
Протокол
I2C
Подключения пинов
Вывод AHT20 Подключение Вывод ESP32 Описание
VCC обязательно 3.3V Питание (3.3В или 5В)
GND обязательно GND Общая земля
SDA обязательно GPIO21 Линия данных I2C (с подтяжкой 4.7kΩ)
SCL обязательно GPIO22 Тактовая линия I2C (с подтяжкой 4.7kΩ)
📍 I2C адрес: 0x38 (как у AHT10) 🔧 Подтяжка: 4.7kΩ на SDA/SCL ⚡ Питание: 3.3В (рекомендуется) 📊 Низкое энергопотребление 🎯 Заводская калибровка 🌡️ -40°C…85°C 💧 0–100% RH 📈 ±0.3°C, ±2% RH
Помощь и поддержка

Устранение неполадок AHT20

Распространённые проблемы и решения, которые помогут запустить датчик.

Ошибка инициализации на ESP32
Например: AHT20 sensor initialization failed

Проблема: датчик не стартует и выдаёт ошибку статуса.

Возможные причины: неверные пины I2C, отсутствие общей земли, неподходящее питание.

Решение: проверьте SDA/SCL (обычно GPIO21/GPIO22), питание 3.3В (или 5В для модуля) и отсутствие конфликта по адресу 0x38. Подробнее: forum.arduino.cc.

Ошибка связи в ESPHome
[E][aht10:080]: Communication ... failed!

Проблема: нет показаний температуры/влажности в логах.

Решение: укажите variant: AHT20, обновите ESPHome и проверьте, что I2C настроен на правильных пинах. Обсуждение: github.com.

Температура «уплывает» вверх
Обычно из‑за саморазогрева

Причины: датчик слишком близко к ESP32/стабилизатору, плохая вентиляция.

Решение: отнесите датчик от источников тепла, используйте более длинные провода и обеспечьте циркуляцию воздуха. Пример обсуждения: community.home-assistant.io.

Адрес виден, но чтение не работает
Error: Read failed

Возможные причины: нет подтяжки на SDA/SCL, длинные провода, помехи или конфликт устройств.

Решение: добавьте/проверьте подтяжку (обычно 4.7kΩ), убедитесь в корректной инициализации I2C и отсутствии конфликтов адресов.

Советы по отладке

Serial монитор
Проверка логов и ошибок
Используйте Serial монитор, чтобы видеть сообщения об ошибках и проверять вывод датчика. Добавьте отладочную печать в код, чтобы отслеживать состояние датчика.
Проверка напряжения
Мультиметр и целостность цепи
Используйте мультиметр для проверки уровней напряжения и целостности соединений. Убедитесь, что питание стабильно и соответствует требованиям датчика.

Дополнительные ресурсы

Примеры кода

Примеры программирования AHT20

Готовые к использованию примеры кода для различных платформ и фреймворков

Пример для Arduino

Совместим с Arduino IDE и платами ESP32

C++
#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:

  1. Откройте Arduino IDE.
  2. Перейдите SketchInclude LibraryManage Libraries.
  3. Найдите ‘Adafruit AHTX0’ и установите её.

Также можно скачать с официального репозитория GitHub:

🔗 Библиотека Adafruit AHTX0

Пример для ESP-IDF

Официальный фреймворк Espressif для разработки IoT

C++
#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
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.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
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
ОКРУЖАЮЩАЯ СРЕДА I2C

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

Подробнее
AHT10
ОКРУЖАЮЩАЯ СРЕДА I2C

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

Подробнее
BMP280
ОКРУЖАЮЩАЯ СРЕДА I2C,SPI

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

Подробнее
BME280
ОКРУЖАЮЩАЯ СРЕДА I2C,SPI

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

Подробнее