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

Что понадобится
- Плата ESP32 (подойдёт любая на 3,3 В);
- датчик BME280 — температура, влажность, давление;
- OLED-дисплей 0,96″ на SSD1306;
- модуль TP4056 с защитой и литиевая банка 18650;
- четыре провода и корпус.
Схема: всё на одной шине
И датчик, и дисплей общаются по 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, и станция может писать данные в домашний сервер или в телеграм-бота. Второй путь — вынести датчик на улицу и связать половинки по радио. Про это будет отдельный разбор в рубрике «Связь».
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.