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

Автономная метеостанция на 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, и станция может писать данные в домашний сервер или в телеграм-бота. Второй путь — вынести датчик на улицу и связать половинки по радио. Про это будет отдельный разбор в рубрике «Связь».

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

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

Моторы и приводы

Сервоприводы SG90 и MG996R: чем отличаются и когда не хватает тока

Сервопривод — это мотор с редуктором, датчиком положения и платой, которая держит вал под заданным углом. В самоделках на Arduino и ESP32…

Читать обзор →
Дисплеи

Цветной TFT-дисплей 1.8″ на ST7735: обзор и подключение

Экран 16×2 показывает только готовые символы из своей прошивки. Этот модуль — другой жанр: 128×160 = 20 480 пикселей, и каждый закрашивается…

Читать обзор →
Дисплеи

OLED-дисплей на SSD1306: обзор, подключение, подводные камни

Маленький жёлто-синий или белый экранчик 0,96 дюйма — самый частый дисплей в самодельных приборах. Внутри у него контроллер Solomon Systech SSD1306: он…

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