Главная → Готовые проекты

Автономная метеостанция на ESP32: собираем из трёх модулей

4 сентября 2026 · Готовые проекты

Соберём законченное устройство: комнатная метеостанция, которая показывает температуру, влажность и давление на экране и работает от аккумулятора. Все три модуля мы уже разобрали по отдельности — здесь про то, как они уживаются вместе и где проект обычно спотыкается.

Блок-схема автономной метеостанции на ESP32: датчик, вывод показаний и питание
Блок-схема автономной метеостанции на ESP32: датчик, вывод показаний и питание

Что понадобится

Схема: всё на одной шине

И датчик, и дисплей общаются по I²C, поэтому подключаются к одним и тем же двум пинам параллельно. Конфликта адресов не будет: у BME280 адрес 0x76, у экрана 0x3C.

ESP32 3V3  -> VIN датчика, VCC дисплея
ESP32 GND  -> GND обоих
GPIO 22    -> SCL обоих
GPIO 21    -> SDA обоих

Аккумулятор -> выход платы защиты TP4056 -> пины 3V3/GND платы ESP32

Питание берём с платы защиты, а не с выхода BAT зарядного модуля напрямую — иначе микросхема не поймёт, когда заряд окончен: ток потребления схемы она посчитает зарядным.

Скетч

#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_BME280 bme;
Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void setup() {
  Wire.begin(21, 22);
  bme.begin(0x76);
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  oled.setTextColor(SSD1306_WHITE);
}

void loop() {
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setCursor(0, 0);
  oled.print(bme.readTemperature(), 1); oled.println(" C");
  oled.setTextSize(1);
  oled.print("Vlazhnost: "); oled.print(bme.readHumidity(), 0); oled.println(" %");
  oled.print("Davlenie: ");
  oled.print(bme.readPressure() / 133.32F, 0); oled.println(" mm rt");
  oled.display();
  delay(5000);
}

Деление на 133,32 переводит паскали в привычные миллиметры ртутного столба. Кириллицу штатный шрифт библиотеки не знает — либо подключайте шрифт с русскими буквами из U8g2, либо пишите латиницей, как здесь.

Три вещи, из-за которых проект «не работает»

Датчик показывает на два градуса больше. Причина не в датчике, а в компоновке: рядом греется плата ESP32 и стабилизатор. Разносите модули по разным углам корпуса, делайте прорези для воздуха и не опрашивайте датчик чаще, чем нужно.

Через сутки экран выгорел. Статичная надпись на OLED выжигается. Сдвигайте картинку на пару пикселей раз в минуту и убавляйте яркость — в контроллере 256 ступеней.

Аккумулятор садится за ночь. Виноват не дисплей, а радиомодуль ESP32 в активном режиме. Реальная автономность появляется только с глубоким сном: измерил, показал, уснул на минуту. При этом BME280 в паузах ест 3,6 мкА, а зарядный модуль — около 55 мкА, то есть на фоне сна ESP32 они почти не считаются.

Куда развивать

Логичное продолжение — отправка показаний в телефон: у ESP32 есть Wi-Fi, и станция может писать данные в домашний сервер или в телеграм-бота. Второй путь — вынести датчик на улицу и связать половинки по радио. Про это будет отдельный разбор в рубрике «Связь».

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Датчики

Ультразвуковой дальномер HC-SR04: обзор и подключение

Для чего он нужен HC-SR04 — ультразвуковой дальномер, с которого начинается почти каждый проект про роботов и умные вещи. Два «глаза» на…

Читать обзор →
Датчики

Датчик температуры DS18B20: обзор и подключение, включая водонепроницаемую версию

У термистора и LM35 общая беда: измерить напряжение — ещё не узнать температуру. Термистору нужны АЦП и таблица пересчёта, LM35 — АЦП…

Читать обзор →
Связь

Bluetooth-модули HC-05 и HC-06: обзор и подключение

Две платы на одном чипе Когда надо добавить в самоделку беспроводной «провод» — чтобы телефон или вторая Arduino видели плату как обычный…

Читать обзор →