Обзор
AGS10 — это компактный и эффективный MEMS-датчик качества воздуха, специально разработанный для обнаружения летучих органических соединений (ЛОС/VOC). Благодаря современной технологии производства полупроводников, он обеспечивает высокую стабильность и чувствительность в течение длительного времени. Использование протокола I2C делает его идеальным выбором для современных систем мониторинга параметров окружающей среды на базе ESP32 и Arduino.
AGS10 — это цифровой датчик газа TVOC с интерфейсом I2C. Он калибруется на заводе и оснащен встроенным алгоритмом компенсации температуры и влажности, что позволяет получать точные данные о концентрации газов без сложной дополнительной обработки. Компактный размер корпуса (SMD или модульное исполнение) позволяет интегрировать его в портативные устройства и бытовую технику.
Приобретите AGS10
Характеристики AGS10
Распиновка AGS10
Питание (строго 3.0В ±0.1В)
Общий провод (земля)
I2C Последовательные данные
I2C Последовательное тактирование
| Пин | Название | Тип | Описание |
|---|---|---|---|
| 1 | VCC | Power | Питание (3.0 В) |
| 2 | GND | Ground | Общий |
| 3 | SDA | I/O | Данные I2C |
| 4 | SCL | Input | Такты I2C |
Подключение AGS10 к ESP32
| Вывод AGS10 | К пину ESP32 | Описание |
|---|---|---|
| VCC | 3.3V / 3V | Питание модуля |
| GND | GND | Общий минус |
| SDA | GPIO 21 | Шина данных I2C |
| SCL | GPIO 22 | Шина тактирования I2C |
- 📍 Частота шины — AGS10 чувствителен к скорости. Установите частоту I2C на 15 кГц или ниже.
- 🔧 Подтяжка (Pull-up) — Для работы требуются резисторы на линиях SDA и SCL (обычно 4.7-10 кОм).
- ⚡ Стабильность — Используйте конденсатор 0.1 мкФ между VCC и GND для фильтрации помех.
Устранение неполадок AGS10
Ошибка CRC на ESP32/ESP8266
Проблемы с частотой I2C шины
Ошибка CRC на ESP32/ESP8266
Проблемы с частотой I2C шины
Проблема: Сообщение в логах The crc check failed или невозможность прочитать данные.
Причина: AGS10 — это медленное I2C устройство. Он требует частоту 30 кГц или даже 15 кГц. По умолчанию контроллеры часто используют 100 кГц или 400 кГц.
Решение: Явно установите частоту в настройках Wire (Wire.setClock(15000)) или в YAML файле ESPHome (frequency: 15kHz).
Показания зависли на одном значении
Датчику требуется прогрев
Показания зависли на одном значении
Датчику требуется прогрев
Проблема: Сенсор выдает одно и то же число в течение нескольких минут после включения.
Причина: MEMS газовым датчикам необходимо время разогрева для стабилизации химических реакций на поверхности сенсора.
Решение: Подождите не менее 2 минут после подачи питания перед считыванием рабочих данных. Для получения максимально точных показаний при первом включении может потребоваться до 24-48 часов "обжига".
Примеры программирования AGS10
Arduino / ESP32
Базовое чтение данных TVOC
C++
Arduino / ESP32
Базовое чтение данных TVOC
#include <Wire.h>
#include <Adafruit_AGS10.h>
Adafruit_AGS10 ags10;
void setup() {
Serial.begin(115200);
// Важно: настраиваем I2C на низкую частоту для стабильности AGS10
Wire.begin();
Wire.setClock(15000);
if (!ags10.begin()) {
Serial.println("Датчик AGS10 не найден!");
while (1) delay(10);
}
}
void loop() {
// Чтение концентрации TVOC в ppb
uint32_t tvoc = ags10.readTVOC();
if (tvoc == 0) {
Serial.println("Датчик прогревается...");
} else {
Serial.print("Качество воздуха (TVOC): ");
Serial.print(tvoc);
Serial.println(" ppb");
}
delay(1000); // Опрос раз в секунду
}
В этом примере мы используем библиотеку Adafruit AGS10. Ключевым моментом является команда Wire.setClock(15000), которая переводит шину I2C в режим пониженной скорости, обеспечивая надежную работу контроллера внутри сенсора.
ESPHome
Интеграция в Home Assistant
YAML
ESPHome
Интеграция в Home Assistant
# Настройка глобальной шины I2C
i2c:
sda: GPIO21
scl: GPIO22
frequency: 15kHz # Обязательно для AGS10
sensor:
- platform: ags10
tvoc:
name: "Качество воздуха (ЛОС)"
unit_of_measurement: "ppb"
update_interval: 30s
Для ESPHome достаточно указать платформу ags10. Датчик автоматически появится в Home Assistant с правильными единицами измерения (ppb — частей на миллиард).
MicroPython
Прямое считывание из регистров
Python
MicroPython
Прямое считывание из регистров
from machine import I2C, Pin
import time
# Инициализация I2C (частота 15кГц)
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=15000)
AGS10_ADDR = 0x2A
def get_tvoc():
try:
# Чтение 5 байт (Data + CRC)
# Регистр данных TVOC обычно 0x00
i2c.writeto(AGS10_ADDR, b'\x00')
time.sleep(0.1)
res = i2c.readfrom(AGS10_ADDR, 5)
# Данные находятся в 2, 3 и 4 байтах
tvoc = (res[1] << 16) | (res[2] << 8) | res[3]
return tvoc
except:
return None
while True:
value = get_tvoc()
print(f"TVOC: {value} ppb")
time.sleep(2)
Итоги AGS10
Датчик AGS10 является бюджетным и надежным решением для мониторинга летучих органических соединений. Благодаря наличии готовых библиотек и интеграций, он отлично подходит как для DIY-проектов, так и для серийных устройств контроля микроклимата.
Рекомендации
Не используйте датчик в помещении с высокой концентрацией силиконовых паров, так как это может необратимо "отравить" чувствительный слой сенсора.
Калибровка
Датчик имеет функцию авто-калибровки нуля. Для её корректной работы устройство должно регулярно (раз в несколько суток) оказываться в условиях чистого свежего воздуха.
Готовы интегрировать?
Используйте примеры кода выше для быстрого старта. AGS10 — один из самых простых в подключении датчиков для мониторинга ЛОС.
Похожие датчики
Ищете альтернативы для измерения параметров воздуха? Обратите внимание на эти популярные сенсоры.
CCS811 Датчик TVOC
Популярный цифровой сенсор летучих органических соединений и эквивалента CO2.
<a href="/sensors/mh-z19/" class="group flex flex-col bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl overflow-hidden hover:shadow-lg transition-all duration-300 hover:-translate-y-1 !no-underline">
<div class="aspect-[4/3] bg-slate-50 dark:bg-slate-800/50 p-6 flex items-center justify-center border-b border-slate-100 dark:border-slate-800 relative">
<img src="/img/A3pw2a3HeM-772.png" alt="MH-Z19" class="w-24 h-24 object-contain group-hover:scale-110 transition-transform duration-500 !my-0 !shadow-none" loading="lazy" />
</div>
<div class="p-5 flex flex-col flex-1 text-center items-center">
<h3 class="font-bold text-slate-900 dark:text-slate-100 text-lg mb-2 line-clamp-2 title-link !my-0">MH-Z19 Датчик CO2</h3>
<div class="flex flex-wrap gap-2 mb-3 justify-center">
<span class="px-2 py-0.5 rounded text-[10px] font-bold tracking-wider uppercase bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/40 dark:text-fuchsia-300">Воздух</span>
<span class="px-2 py-0.5 rounded text-[10px] font-bold tracking-wider uppercase bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300">UART</span>
</div>
<p class="text-xs text-slate-500 dark:text-slate-400 line-clamp-3 mb-4 flex-1 !my-0 leading-relaxed">Инфракрасный (NDIR) датчик для точного измерения концентрации углекислого газа.</p>
<div class="text-xs font-semibold text-indigo-600 dark:text-indigo-400 flex items-center gap-1 group-hover:gap-2 transition-all mt-auto">
Подробнее <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" /></svg>
</div>
</div>
</a>
<a href="/sensors/mics-4514/" class="group flex flex-col bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-2xl overflow-hidden hover:shadow-lg transition-all duration-300 hover:-translate-y-1 !no-underline">
<div class="aspect-[4/3] bg-slate-50 dark:bg-slate-800/50 p-6 flex items-center justify-center border-b border-slate-100 dark:border-slate-800 relative">
<img src="/img/dOhEgerMyD-288.png" alt="MiCS-4514" class="w-24 h-24 object-contain group-hover:scale-110 transition-transform duration-500 !my-0 !shadow-none" loading="lazy" />
</div>
<div class="p-5 flex flex-col flex-1 text-center items-center">
<h3 class="font-bold text-slate-900 dark:text-slate-100 text-lg mb-2 line-clamp-2 title-link !my-0">MiCS-4514 Газовый сенсор</h3>
<div class="flex flex-wrap gap-2 mb-3 justify-center">
<span class="px-2 py-0.5 rounded text-[10px] font-bold tracking-wider uppercase bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/40 dark:text-fuchsia-300">Воздух</span>
<span class="px-2 py-0.5 rounded text-[10px] font-bold tracking-wider uppercase bg-orange-100 text-orange-700 dark:bg-orange-900/40 dark:text-orange-300">Аналог</span>
</div>
<p class="text-xs text-slate-500 dark:text-slate-400 line-clamp-3 mb-4 flex-1 !my-0 leading-relaxed">Сдвоенный датчик для обнаружения угарного газа (CO) и диоксида азота (NO2).</p>
<div class="text-xs font-semibold text-indigo-600 dark:text-indigo-400 flex items-center gap-1 group-hover:gap-2 transition-all mt-auto">
Подробнее <svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3" /></svg>
</div>
</div>
</a>