Датчики CJMCU BME680 и AHT20+BMP280 на Arduino

Датчики CJMCU BME680 и AHT20+BMP280 на Arduino: обзор, подключение и примеры кода

📅 Дата публикации: 12 мая 2026 ⏱️ Время чтения: ~10 минут

Перед прошивкой моей ESP32-C3 под управление Matter через ESP-IDF захотелось проверить правильность сборки принципиальной схемы на макетной плате, а также понять минимальный функционал возможностей тех или иных компонентов. Поэтому была создана мини-серия статей для Arduino на два датчика CJMCU BME680 и AHT20+BMP280, светодиодное кольцо CJMCU-2812B, а также на сенсорную кнопку TTP223.

Данная часть 1/3 посвящена двум датчикам — их техническим характеристикам, подключению к ESP32-C3 и примерам кода для Arduino IDE.

1. Датчик CJMCU BME680

Модуль CJMCU BME680

BME680 — это цифровой датчик «4 в 1» от Bosch. Он объединяет в себе измерение температуры, влажности, барометрического давления и качества воздуха (VOC).

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

ПараметрЗначение
Напряжение питания3.3 В
ИнтерфейсыI2C и SPI
Диапазон температур-40 … +85 °C (±1.0 °C)
Диапазон влажности0 … 100% (±3%)
Диапазон давления300 … 1100 кПа (±0.6 кПа)
Газовый сенсорОксид металла (MOX), ЛОС, ~320°C нагрева
I2C Адрес0x76 (по умолчанию) или 0x77
💡 Примечание по подключению: На модулях CJMCU подтягивающие резисторы (Pull-up) для шины I2C уже установлены на плате. Дополнительно подтягивать линии SDA/SCL не нужно — модуль готов к работе «из коробки».

📊 Шкала качества воздуха IAQ (индекс качества воздуха)

IAQСтатусОписание
0 ~ 50✅ ХорошоКачество воздуха удовлетворительное, опасности практически нет
51 ~ 100⚠️ УмеренныйНекоторые загрязнители могут представлять угрозу для чувствительных людей
101 ~ 150⚠️ Вредно для чувствительных группНекоторые люди могут испытывать проблемы со здоровьем
151 ~ 200⚠️ Вредно для здоровьяВоздействие на здоровье может начаться у всех
201 ~ 300🛑 Очень вредноПредупреждение об опасности
301 ~ 500🛑 ОпасныйОсобо опасное состояние для здоровья

🔌 Подключение к ESP32-C3 (I2C)

CJMCU-680ESP32-C3 (Zero)
VCC (3.3V)3.3V
GNDGND
SDA (I2C Data)GPIO8 (SDA)
SCL (I2C Clock)GPIO9 (SCL)
SDOGND
CSVCC (3.3V)
💡 Пояснение по подключению:
  • SDO → GND — фиксирует I2C адрес датчика на 0x76 (по умолчанию). Если подключить SDO к питанию (VCC), адрес сменится на 0x77.
  • CS → VCC — переводит датчик в режим I2C (хотя на данном модуле он выбран по умолчанию, для гарантии корректной работы рекомендуется подтянуть CS к питанию).
Схема подключения BME680

Установка библиотек:

  1. Откройте Arduino IDE → Скетч → Включить библиотеку → Управление библиотеками
  2. В строке поиска введите Adafruit BME680
  3. Найдите библиотеку Adafruit BME680 Library (автор Adafruit) и нажмите Установить
  4. Вместе с ней автоматически установится зависимость — Adafruit Unified Sensor

💻 Пример кода для BME680

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>

#define BME_SDA 8
#define BME_SCL 9

Adafruit_BME680 bme;

void setup() {
  Serial.begin(115200);
  delay(3000); // Задержка для стабилизации USB на ESP32-C3

  Wire.begin(BME_SDA, BME_SCL);
  if (!bme.begin(0x76)) {
    Serial.println("BME680 не найден!");
    while (1);
  }

  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320°C на 150 мс
}

void loop() {
  if (!bme.performReading()) {
    Serial.println("Ошибка чтения BME680!");
    return;
  }

  Serial.print("Температура = ");
  Serial.print(bme.temperature);
  Serial.println(" *C");

  Serial.print("Давление = ");
  Serial.print(bme.pressure * 0.00750062);
  Serial.println(" mm Hg");

  Serial.print("Влажность = ");
  Serial.print(bme.humidity);
  Serial.println(" %");

  Serial.print("Газ (ЛОС) = ");
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(" КОhms");

  Serial.println("---");
  delay(10000);
}
Вывод данных BME680 в Serial Monitor
Пример вывода данных с датчика BME680 в мониторе порта
💡 Примечание: Газовый датчик требует прогрева (~5 минут) перед выдачей стабильных значений. Первые минуты сопротивление будет очень высоким.

2. Датчик AHT20+BMP280

Модуль AHT20+BMP280

Комбинированный модуль на базе датчика влажности/температуры AHT20 и высокоточного датчика давления и температуры BMP280.

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

ПараметрЗначение
Напряжение питания3.3V
ИнтерфейсI2C
Датчик AHT20 (Влажность)0 … 100% RH (±2% точность)
Датчик AHT20 (Температура)-40 … +85°C (±0.5°C точность)
Датчик BMP280 (Давление)300 … 1100 hPa (±1 hPa точность)
Датчик BMP280 (Температура)-40 … +85°C (±0.3°C точность)
I2C адресаAHT20: 0x38, BMP280: 0x77 или 0x76

🔌 Подключение к ESP32-C3

AHT20+BMP280ESP32-C3 (Zero)
VCC3.3V
GNDGND
SDAGPIO8 (SDA)
SCLGPIO9 (SCL)
Схема подключения AHT20+BMP280

Установка библиотек:

  1. Откройте Arduino IDE → Скетч → Включить библиотеку → Управление библиотеками
  2. Установите Adafruit BMP280 Library (автор Adafruit)
  3. Установите Adafruit AHTX0 (автор Adafruit)

💻 Пример кода (средняя температура)

#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_AHTX0.h>

#define I2C_SDA 8
#define I2C_SCL 9

Adafruit_BMP280 bmp;
Adafruit_AHTX0 aht;

void setup() {
  Serial.begin(115200);
  delay(3000);
  Wire.begin(I2C_SDA, I2C_SCL);
  bmp.begin(0x77);
  aht.begin();
}

void loop() {
  float bmpTemp = bmp.readTemperature();
  float pressurePa = bmp.readPressure();

  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);
  float ahtTemp = temp.temperature;

  float avgTemp = (bmpTemp + ahtTemp) / 2.0;
  float pressureMmHg = pressurePa * 0.00750062;

  Serial.println("=== ТЕЛЕМЕТРИЯ ===");
  Serial.print("AHT20: ");
  Serial.print(ahtTemp, 1);
  Serial.println(" °C");

  Serial.print("BMP280: ");
  Serial.print(bmpTemp, 1);
  Serial.println(" °C");

  Serial.print("Средняя: ");
  Serial.print(avgTemp, 1);
  Serial.println(" °C");

  Serial.print("Давление: ");
  Serial.print(pressureMmHg, 1);
  Serial.println(" mmHg");

  Serial.println();
  delay(1000);
}
Вывод данных AHT20+BMP280 в Serial Monitor
Пример вывода данных с датчика AHT20+BMP280 в мониторе порта
💡 Примечание: В коде вычисляется средняя температура между показаниями AHT20 и BMP280 для повышения точности (так как BMP280 точнее). Давление выводится в мм рт. ст. для удобства.
Мы используем cookie-файлы. Это нужно для лучшей работы сайта. Продолжая пользоваться сайтом, вы соглашаетесь с этим.