Budowa własnej stacji pogodowej to jeden z klasycznych projektów Arduino, który może dostarczyć realnie użytecznych danych o warunkach w domu i ogrodzie. W tym poradniku opisujemy, jak potencjalnie można zbudować kompletne urządzenie oparte na ESP32 z wyświetlaczem OLED, czujnikiem DHT22 oraz modułem wysyłającym powiadomienia przez Telegram.

ℹ️ Wymagane komponenty
ESP32 DevKit, czujnik DHT22 lub BME280, wyświetlacz OLED 0,96" (SSD1306), przewody dupont, zasilacz 5V.

Schemat podłączenia

Czujnik DHT22 podłączamy do pinu GPIO4 ESP32. Wyświetlacz OLED komunikuje się przez I2C (SDA=GPIO21, SCL=GPIO22). Według dokumentacji producenta DHT22, czujnik potrzebuje rezystora podciągającego 10kΩ na linii danych.

DHT22  →  ESP32
VCC    →  3.3V
GND    →  GND
DATA   →  GPIO4 (+ 10kΩ do 3.3V)

OLED SSD1306  →  ESP32
VCC           →  3.3V
GND           →  GND
SDA           →  GPIO21
SCL           →  GPIO22

Kod ESP32 – odczyt temperatury i wilgotności

#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <HTTPClient.h>

#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const char* ssid     = "TWOJA_SIEC";
const char* password = "TWOJE_HASLO";
const char* botToken = "TOKEN_TELEGRAM";
const char* chatId   = "CHAT_ID";

void setup() {
  Serial.begin(115200);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void sendTelegram(String msg) {
  HTTPClient http;
  String url = "https://api.telegram.org/bot" + String(botToken) +
               "/sendMessage?chat_id=" + String(chatId) +
               "&text=" + msg;
  http.begin(url);
  http.GET();
  http.end();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.printf("%.1f C", t);
  display.setCursor(0, 32);
  display.printf("%.0f%%", h);
  display.display();

  // Powiadomienie gdy temperatura przekroczy 28°C
  static bool alarmWyslany = false;
  if (t > 28.0 && !alarmWyslany) {
    sendTelegram("ALARM: Temperatura " + String(t) + " C!");
    alarmWyslany = true;
  }
  if (t <= 28.0) alarmWyslany = false;

  delay(30000); // odczyt co 30 sekund
}

Konfiguracja bota Telegram

Aby wysyłać powiadomienia, należy według oficjalnej dokumentacji Telegrama: 1) napisać do @BotFather i stworzyć nowego bota, 2) skopiować token, 3) dodać bota do swojego czatu i pobrać chat_id przez https://api.telegram.org/bot<token>/getUpdates.

Rozszerzenia projektu

  • Dodanie czujnika BMP280 do pomiaru ciśnienia atmosferycznego
  • Zapisywanie danych na karcie SD lub w bazie InfluxDB
  • Integracja z Home Assistant przez MQTT
  • Wyświetlanie prognozy pogody z API OpenWeatherMap
⚠️ Nota prawna: Artykuł ma charakter wyłącznie informacyjny. Redakcja iPraktyk.pl nie ponosi odpowiedzialności za działania podjęte na podstawie zawartych tu treści. Wszelkie czynności wykonujesz na własne ryzyko i odpowiedzialność. Przed wdrożeniem rozwiązań produkcyjnych skonsultuj się ze specjalistą.