Domowa stacja pogodowa na ESP32 to zestaw czujników meteorologicznych podłączonych do mikrokontrolera z Wi-Fi, który mierzy temperaturę, wilgotność, ciśnienie atmosferyczne, prędkość wiatru i opady, a następnie wysyła odczyty do serwera MQTT, Home Assistant lub na wyświetlacz OLED. Kompletny zestaw części kosztuje 250-450 zł, a złożenie działającego prototypu na płytce stykowej zajmuje jedno popołudnie. Ten poradnik prowadzi przez cały projekt: od doboru czujników, przez schemat połączeń i zasilanie, po kod, integrację z Home Assistant i kalibrację.
|
Parametr projektu |
Wartość |
|---|---|
|
Poziom trudności |
Średni (wymaga lutowania i podstaw programowania) |
|
Czas montażu |
4-6 h prototyp, 1 dzień wersja finalna |
|
Orientacyjny koszt |
250-450 zł |
|
Mikrokontroler |
ESP32-WROOM-32 |
|
Mierzone wielkości |
Temperatura, wilgotność, ciśnienie, prędkość wiatru, opad |
|
Zasilanie |
5 V USB lub 18650 + panel słoneczny 6 V |
|
Transmisja danych |
Wi-Fi → MQTT → Home Assistant |
Co dokładnie chcemy mierzyć? Lista pomiarów i wymagana dokładność
Zanim kupisz jakikolwiek podzespół, ustal listę mierzonych wielkości. To ona decyduje o budżecie, liczbie pinów i sposobie zasilania. Amatorska stacja pogodowa mierzy zwykle pięć podstawowych parametrów.
|
Wielkość |
Jednostka |
Realna dokładność DIY |
Czujnik |
|---|---|---|---|
|
Temperatura powietrza |
°C |
±0,5 °C |
BME280 |
|
Wilgotność względna |
% RH |
±3 % RH |
BME280 |
|
Ciśnienie atmosferyczne |
hPa |
±1 hPa |
BME280 |
|
Temperatura zewnętrzna / gruntu |
°C |
±0,5 °C |
DS18B20 w sondzie wodoszczelnej |
|
Prędkość wiatru |
km/h |
±5 % |
Anemometr kubełkowy z kontaktronem |
|
Opad atmosferyczny |
mm |
0,2794 mm/przechył |
Deszczomierz korytkowy |
Dwie wielkości warto dopisać do listy życzeń już na starcie, bo dokłada się je bez zmiany konstrukcji: kierunek wiatru (wiatromierz z przełącznikiem rezystancyjnym, odczyt przez ADC) oraz nasłonecznienie (fotorezystor lub moduł BH1750). Jeżeli planujesz sterować czymkolwiek na podstawie pogody - podlewaniem, roletami, wentylacją - dołóż do projektu przekaźnik i potraktuj stację jako czujnik wejściowy większego systemu. Dokładnie tak działa układ opisany we wpisie o inteligentnym nawadnianiu ogrodu z Arduino, który można wysterować danymi z własnej stacji zamiast prognozą z internetu.
Kluczowa decyzja projektowa: czy stacja ma pracować bez przerwy, czy budzić się co kilka minut. Ciągła praca upraszcza pomiar wiatru i opadu (liczysz impulsy non stop), ale wyklucza zasilanie z małego akumulatora. Praca cykliczna z deep sleep wydłuża czas pracy na baterii do kilku tygodni, ale wymaga licznika impulsów na pinie RTC. W tym projekcie zakładamy pracę ciągłą - jest prostsza, a przy zasilaniu z panelu słonecznego wystarczająco oszczędna.
2. ESP32 czy Arduino? Dlaczego do stacji pogodowej lepszy jest ESP32?
ESP32 wygrywa z klasycznym Arduino UNO w stacji pogodowej z jednego powodu: ma wbudowane Wi-Fi. Stacja bez transmisji danych to termometr z wyświetlaczem, a Arduino UNO wymaga dokupienia modułu ESP8266 lub Ethernet Shield, co podnosi koszt i komplikuje kod.
|
Cecha |
ESP32-WROOM-32 |
Arduino UNO R3 |
|---|---|---|
|
Rdzeń |
2× 240 MHz, 32-bit |
1× 16 MHz, 8-bit |
|
RAM |
520 kB |
2 kB |
|
Wi-Fi / Bluetooth |
Tak / Tak |
Nie / Nie |
|
Napięcie logiki |
3,3 V |
5 V |
|
ADC |
12-bit |
10-bit |
|
Deep sleep |
~10 µA (goły moduł) |
~35 µA (z bibliotekami) |
|
Liczba GPIO |
34 (część input-only) |
20 |
Dwie różnice bezpośrednio wpływają na montaż. Po pierwsze, ESP32 pracuje na 3,3 V - czujniki 5 V wymagają konwertera poziomów, dlatego w projekcie używamy wyłącznie modułów 3,3 V. Po drugie, piny GPIO34-GPIO39 są wejściami bez rezystorów podciągających, więc nie nadają się do podłączenia kontaktronu bez zewnętrznego pull-upa. Unikaj też pinów strapujących (GPIO0, GPIO2, GPIO12, GPIO15) - stan wysoki lub niski w chwili startu blokuje uruchomienie płytki.
Jeżeli dopiero zaczynasz z mikrokontrolerami, zajrzyj wcześniej do przewodnika „Czy Arduino jest trudne?" - środowisko i logika programu są identyczne, zmienia się tylko płytka. Gotowe zestawy startowe i płytki rozwojowe znajdziesz w kategorii Arduino.
3. Czujniki do stacji pogodowej: BME280, DS18B20, anemometr i deszczomierz
Dobór czujników to najważniejsza decyzja w całym projekcie - od niej zależy, czy Twoje odczyty będą zgodne z oficjalnymi danymi z pobliskiej stacji IMGW, czy rozjadą się o kilka stopni.
BME280 - temperatura, wilgotność i ciśnienie w jednym module
BME280 firmy Bosch mierzy trzy wielkości jednocześnie i komunikuje się po I²C pod adresem 0x76 lub 0x77. Deklarowana dokładność to ±1,0 °C dla temperatury (±0,5 °C w zakresie 0-65 °C), ±3 % RH dla wilgotności i ±1 hPa dla ciśnienia. Zakres pomiarowy ciśnienia 300-1100 hPa pokrywa cały realny zakres pogodowy w Polsce.
Uwaga na wersje: moduły opisane jako BMP280 nie mierzą wilgotności. Rozpoznasz je po liczbie wyprowadzeń na kostce i po tym, że biblioteka zwraca zero na kanale wilgotności.
DS18B20 - niezależny pomiar temperatury zewnętrznej
DS18B20 pracuje na magistrali 1-Wire, mierzy w zakresie od −55 °C do +125 °C z dokładnością ±0,5 °C i występuje w wersji zatopionej w stalowej sondzie na przewodzie. Ta wersja jest odporna na wilgoć, więc sprawdza się jako czujnik temperatury gruntu, wody w oczku lub powietrza pod dachem. Magistrala wymaga rezystora podciągającego 4,7 kΩ między linią danych a 3,3 V - bez niego odczyty to same wartości −127 °C. Jeżeli nie masz pewności, jak dobrać wartość i moc rezystora, pomoże poradnik obliczania rezystorów.
Po co drugi czujnik temperatury, skoro BME280 już ją mierzy? Bo BME280 siedzi w obudowie razem z ESP32 i grzeje się od układu - różnica potrafi sięgnąć 2 °C. DS18B20 na przewodzie, wyprowadzony poza obudowę, daje punkt odniesienia do kalibracji.
Anemometr kubełkowy - pomiar prędkości wiatru
Typowy amatorski anemometr to trzy kubełki na osi z magnesem i kontaktronem. Każdy pełny obrót zwiera kontakt na ułamek sekundy. W popularnych modelach (WH-SP-WS01 i pochodne) jeden obrót na sekundę odpowiada prędkości 2,4 km/h - ale zawsze sprawdź współczynnik w karcie katalogowej swojego egzemplarza, bo różni się między producentami.
Kontaktron drga przy zwarciu, dlatego liczenie impulsów wymaga filtrowania. Najprostsze rozwiązanie to programowy debounce (ignorowanie impulsów krótszych niż 10 ms), a najpewniejsze - dodatkowo filtr RC z rezystorem 10 kΩ i kondensatorem 100 nF przy pinie wejściowym.
Deszczomierz korytkowy - pomiar opadu
Deszczomierz korytkowy zbiera wodę w wywrotnej łyżeczce. Po napełnieniu łyżeczka przechyla się, wylewa wodę i zwiera kontaktron. Jeden przechył to zwykle 0,2794 mm opadu (standard Davis) lub 0,3 mm w tańszych modelach. Suma dobowa opadu to po prostu liczba przechyłów pomnożona przez tę stałą.
Wyświetlacz OLED - lokalny podgląd bez telefonu
Wyświetlacz OLED SSD1306 128×64 dzieli magistralę I²C z BME280 (adres 0x3C) i nie zabiera dodatkowych pinów. Na czterech wierszach zmieści się temperatura, wilgotność, ciśnienie i prędkość wiatru. To element opcjonalny - jeśli stacja stoi na maszcie w ogrodzie, nikt na ten ekran nie patrzy. Sensowniejsze jest umieszczenie OLED-a w osobnej obudowie wewnątrz domu, jako terminala odbierającego dane po MQTT.
Lista części (BOM)
|
Element |
Ilość |
Uwagi |
|---|---|---|
|
Płytka ESP32-WROOM-32 DevKit |
1 |
Wersja z 30 lub 38 pinami |
|
Czujnik BME280 (moduł I²C, 3,3 V) |
1 |
Nie mylić z BMP280 |
|
Czujnik DS18B20 w sondzie wodoszczelnej |
1 |
Przewód 1-3 m |
|
Rezystor 4,7 kΩ |
1 |
Pull-up magistrali 1-Wire |
|
Rezystory 10 kΩ |
2 |
Filtr RC wejść impulsowych |
|
Kondensatory 100 nF |
2 |
Filtr RC wejść impulsowych |
|
Kondensator elektrolityczny 470 µF / 10 V |
1 |
Bufor przy szczytach poboru Wi-Fi |
|
Anemometr kubełkowy z kontaktronem |
1 |
Sprawdź stałą przeliczeniową |
|
Deszczomierz korytkowy |
1 |
0,2794 mm/przechył |
|
Wyświetlacz OLED SSD1306 128×64 I²C |
1 |
Opcjonalny |
|
Obudowa hermetyczna IP65 |
1 |
Min. 120×80×50 mm |
|
Osłona radiacyjna (talerzyki) |
1 |
Do druku 3D lub gotowa |
|
Dławnice kablowe M12 |
3 |
Przepusty na przewody czujników |
|
Zasilacz 5 V / 2 A lub panel 6 V + TP4056 + ogniwo 18650 |
1 |
Zależnie od lokalizacji |
|
Dioda Schottky'ego 1N5819 |
1 |
Zabezpieczenie przed prądem wstecznym z panelu |
|
Przewód wielożyłowy, koszulki termokurczliwe |
- |
Do połączeń zewnętrznych |
Wszystkie moduły pomiarowe znajdziesz w kategorii czujniki, płytki i moduły rozszerzeń w dziale moduły elektroniczne, a materiał na okablowanie zewnętrzne w kategorii przewody.
4. Schemat połączeń i zasilanie stacji pogodowej
Połączenia są proste, bo trzy z czterech czujników korzystają z magistral cyfrowych. Poniższa tabela to kompletna mapa pinów.
|
Sygnał |
Pin ESP32 |
Uwagi |
|---|---|---|
|
SDA (BME280, OLED) |
GPIO21 |
Wspólna magistrala I²C |
|
SCL (BME280, OLED) |
GPIO22 |
Wspólna magistrala I²C |
|
DQ (DS18B20) |
GPIO4 |
Pull-up 4,7 kΩ do 3,3 V |
|
Anemometr |
GPIO27 |
Przerwanie zboczem opadającym, pull-up wewnętrzny |
|
Deszczomierz |
GPIO26 |
Przerwanie zboczem opadającym, pull-up wewnętrzny |
|
Zasilanie modułów |
3V3 |
Nie podłączaj czujników do 5 V |
|
Masa wspólna |
GND |
Jedna masa dla wszystkich modułów |
Kontaktrony anemometru i deszczomierza podłącz jedną nogą do pinu GPIO, drugą do masy. Wewnętrzny pull-up utrzymuje stan wysoki, a zwarcie kontaktu generuje zbocze opadające, które wyzwala przerwanie.
Zasilanie to najczęstsze źródło problemów w tym projekcie. ESP32 w szczycie transmisji Wi-Fi pobiera 250-500 mA przez kilkanaście milisekund. Słaby zasilacz albo cienki przewód USB powodują chwilowy spadek napięcia i restart płytki (brownout detector was triggered w monitorze portu szeregowego). Trzy zasady:
-
Zasilacz o wydajności minimum 1 A, najlepiej 2 A.
-
Kondensator 470 µF między 3V3 a GND, jak najbliżej modułu ESP32.
-
Przewód zasilający możliwie krótki i o przekroju min. 0,35 mm².
W wersji solarnej układ wygląda tak: panel 6 V / 2 W → dioda Schottky'ego → moduł ładowania TP4056 z zabezpieczeniem → ogniwo 18650 → wejście 5 V płytki ESP32. Dioda blokuje rozładowywanie ogniwa przez panel po zmroku i musi mieć niski spadek napięcia - dlatego Schottky, a nie zwykła prostownicza. Odpowiednie elementy znajdziesz w kategorii dioda półprzewodnikowa.
Do połączeń między obudową a czujnikami zewnętrznymi używaj złącz rozłącznych zamiast lutowania na stałe. Po pierwszej zimie będziesz chciał wyjąć anemometr do przeglądu bez rozbierania całej stacji.
5. Kod stacji pogodowej: Arduino IDE czy PlatformIO?
Arduino IDE wystarczy do pierwszego uruchomienia i jest szybsze w konfiguracji. PlatformIO (wtyczka do VS Code) lepiej sprawdza się w docelowym projekcie: trzyma zależności w pliku platformio.ini, wersjonuje biblioteki i nie gubi konfiguracji przy aktualizacji.
Potrzebne biblioteki: Adafruit BME280 Library z Adafruit Unified Sensor, OneWire, DallasTemperature, PubSubClient oraz Adafruit SSD1306, jeśli używasz wyświetlacza.
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define PIN_DS18B20 4
#define PIN_ANEMOMETR 27
#define PIN_DESZCZOMIERZ 26
// Stałe przeliczeniowe - sprawdź w karcie katalogowej swojego czujnika
const float KM_H_NA_OBROT = 2.4; // km/h przy 1 obr./s
const float MM_NA_PRZECHYL = 0.2794; // mm opadu na jeden przechył
const uint32_t OKRES_MS = 60000; // publikacja co 60 s
const char* SSID_WIFI = "TwojaSiec";
const char* HASLO_WIFI = "TwojeHaslo";
const char* BROKER_MQTT = "192.168.1.10";
Adafruit_BME280 bme;
OneWire oneWire(PIN_DS18B20);
DallasTemperature ds(&oneWire);
WiFiClient espClient;
PubSubClient mqtt(espClient);
volatile uint32_t impulsyWiatru = 0;
volatile uint32_t przechylyDeszczu = 0;
volatile uint32_t ostatniWiatr = 0;
volatile uint32_t ostatniDeszcz = 0;
uint32_t poprzedniaPublikacja = 0;
void IRAM_ATTR isrWiatr() {
uint32_t t = millis();
if (t - ostatniWiatr > 10) { impulsyWiatru++; ostatniWiatr = t; }
}
void IRAM_ATTR isrDeszcz() {
uint32_t t = millis();
if (t - ostatniDeszcz > 200) { przechylyDeszczu++; ostatniDeszcz = t; }
}
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
if (!bme.begin(0x76)) Serial.println("Brak BME280 pod adresem 0x76");
ds.begin();
pinMode(PIN_ANEMOMETR, INPUT_PULLUP);
pinMode(PIN_DESZCZOMIERZ, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_ANEMOMETR), isrWiatr, FALLING);
attachInterrupt(digitalPinToInterrupt(PIN_DESZCZOMIERZ), isrDeszcz, FALLING);
WiFi.begin(SSID_WIFI, HASLO_WIFI);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
mqtt.setServer(BROKER_MQTT, 1883);
}
void publikuj(const char* temat, float wartosc, uint8_t miejsca) {
char buf[16];
dtostrf(wartosc, 0, miejsca, buf);
mqtt.publish(temat, buf, true); // retained = ostatnia wartość po restarcie
}
void loop() {
if (!mqtt.connected()) mqtt.connect("stacja-pogodowa");
mqtt.loop();
if (millis() - poprzedniaPublikacja < OKRES_MS) return;
poprzedniaPublikacja = millis();
noInterrupts();
uint32_t obroty = impulsyWiatru; impulsyWiatru = 0;
uint32_t przechyly = przechylyDeszczu; przechylyDeszczu = 0;
interrupts();
float wiatr = (obroty / (OKRES_MS / 1000.0)) * KM_H_NA_OBROT;
float opad = przechyly * MM_NA_PRZECHYL;
ds.requestTemperatures();
float tZewn = ds.getTempCByIndex(0);
publikuj("stacja/ogrod/temperatura", bme.readTemperature(), 1);
publikuj("stacja/ogrod/wilgotnosc", bme.readHumidity(), 0);
publikuj("stacja/ogrod/cisnienie", bme.readPressure() / 100.0F, 1);
publikuj("stacja/ogrod/temperatura_zewn", tZewn, 1);
publikuj("stacja/ogrod/wiatr", wiatr, 1);
publikuj("stacja/ogrod/opad", opad, 2);
}
Trzy szczegóły, które decydują o stabilności programu. Funkcje obsługi przerwań mają atrybut IRAM_ATTR, bo na ESP32 muszą być wykonywane z pamięci RAM. Odczyt liczników odbywa się przy wyłączonych przerwaniach (noInterrupts()), żeby impuls nadchodzący w trakcie kopiowania nie zginął. Wiadomości publikowane są jako retained, dzięki czemu Home Assistant po restarcie od razu widzi ostatnią znaną wartość zamiast pustej encji.
6. Wysyłanie danych do MQTT i Home Assistant
MQTT to lekki protokół publikacji i subskrypcji: stacja publikuje odczyty na tematach (topikach), a dowolna liczba odbiorców je subskrybuje. Broker (najczęściej Mosquitto działający na Raspberry Pi lub w dodatku Home Assistant) pośredniczy w wymianie.
Przyjmij hierarchię tematów dom/lokalizacja/wielkosc - czytelną i łatwą do rozbudowy:
stacja/ogrod/temperatura → 21.4 stacja/ogrod/wilgotnosc → 68 stacja/ogrod/cisnienie → 1013.2 stacja/ogrod/wiatr → 12.6 stacja/ogrod/opad → 0.56
Najwygodniejsza integracja z Home Assistant to MQTT Discovery: stacja sama zgłasza swoje encje, więc nie musisz nic dopisywać w configuration.yaml. Wystarczy raz, w setup(), opublikować konfigurację na temacie homeassistant/sensor/stacja_temp/config:
{
"name": "Temperatura ogród",
"state_topic": "stacja/ogrod/temperatura",
"unit_of_measurement": "°C",
"device_class": "temperature",
"unique_id": "stacja_ogrod_temp"
}
Analogiczne komunikaty dla humidity, pressure i pozostałych wielkości sprawiają, że po restarcie Home Assistant pokazuje komplet czujników z poprawnymi ikonami i historią. Jeżeli wolisz konfigurację ręczną, ten sam efekt uzyskasz wpisem mqtt: sensor: z polami state_topic i unit_of_measurement.
Alternatywy bez własnego brokera: ThingSpeak (darmowy limit jednego wpisu na 15 s, gotowe wykresy), Blynk (aplikacja mobilna) albo InfluxDB z Grafaną, jeśli zależy Ci na długoterminowej analizie i ładnych wykresach.
7. Obudowa odporna na deszcz i prawidłowy montaż
Elektronika stacji pogodowej stoi na zewnątrz przez cały rok, więc obudowa jest równie ważna jak czujniki. Potrzebujesz obudowy hermetycznej o klasie szczelności minimum IP65, wykonanej z ABS lub poliwęglanu z filtrem UV - tanie pudełka z nieuodpornionego tworzywa po dwóch sezonach kruszeją i pękają. Gotowe obudowy w rozmiarze od 120×80×50 mm mieszczą płytkę ESP32 z modułem zasilania i zapasem miejsca na okablowanie.
Cztery zasady montażu, które najbardziej wpływają na jakość danych:
-
Przepusty od spodu. Przewody czujników wprowadzaj przez dławnice w dolnej ściance, nigdy w górnej. Woda spływa po kablu i wnika do środka od góry.
-
Osłona radiacyjna dla BME280. Czujnik temperatury w słońcu pokazuje wartości zawyżone nawet o 10 °C. Osłona radiacyjna (zestaw białych talerzyków, do kupienia lub wydrukowania na drukarce 3D) zapewnia cyrkulację powietrza i cień. Bez niej cały projekt traci sens pomiarowy.
-
Wysokość i otoczenie. Standard meteorologiczny to 2 m nad gruntem, z dala od ścian budynków i utwardzonych powierzchni. Anemometr powinien stać jak najwyżej i minimum 10 m od przeszkód - na działce to zwykle kompromis, byle nie za kalenicą dachu.
-
Deszczomierz w poziomie. Wypoziomuj go libellą i ustaw w miejscu bez okapów i gałęzi nad głowicą. Przechylony deszczomierz systematycznie zaniża lub zawyża sumę opadu.
Woreczek z żelem krzemionkowym wrzucony do obudowy pochłania wilgoć skraplającą się przy dobowych wahaniach temperatury. Wymieniaj go raz na sezon.
8. Kalibracja stacji pogodowej
Świeżo złożona stacja pokazuje wartości „mniej więcej" poprawne. Kalibracja zamienia je w dane, które można porównywać z oficjalnymi pomiarami.
-
Temperatura. Umieść stację obok wzorcowego termometru (lub sondy DS18B20 wyprowadzonej poza obudowę) w cieniu, odczekaj 30 minut i porównaj odczyty. Różnica wynikająca z samonagrzewania układu jest stała - wprowadź ją jako offset w kodzie: float t = bme.readTemperature() - 1.2;.
-
Wilgotność. Test solny daje punkt odniesienia bez żadnego przyrządu. Nasycony roztwór soli kuchennej w zamkniętym pojemniku utrzymuje wilgotność 75,3 % RH w temperaturze 25 °C. Włóż czujnik do pojemnika (nie do samego roztworu), odczekaj 8-12 godzin i sprawdź odczyt. Odchyłka to Twój offset.
-
Ciśnienie. Czujnik mierzy ciśnienie w miejscu instalacji, a serwisy pogodowe podają ciśnienie zredukowane do poziomu morza. Przeliczenie:
p0 = p × (1 − 0,0065 × h / (T + 0,0065 × h + 273,15))^(−5,257)
gdzie p to ciśnienie zmierzone w hPa, h - wysokość n.p.m. w metrach, T - temperatura w °C. Bez tej korekty odczyt na wysokości 300 m n.p.m. będzie niższy od komunikatów IMGW o około 35 hPa i będzie wyglądał jak awaria czujnika.
-
Anemometr. Najprościej: przejedź samochodem ze stałą prędkością 30 km/h w bezwietrzny dzień, trzymając anemometr w wyciągniętej ręce poza strefą zawirowań, i porównaj odczyt z prędkościomierzem. Skoryguj stałą KM_H_NA_OBROT proporcjonalnie.
-
Deszczomierz. Odmierz strzykawką 50 ml wody i wlewaj ją powoli, przez kilka minut, do lejka. Policz przechyły. Objętość opadu przelicz ze wzoru: opad [mm] = objętość [ml] × 10 / powierzchnia lejka [cm²]. Wynik podzielony przez liczbę przechyłów to rzeczywista stała MM_NA_PRZECHYL.
Kalibrację temperatury i wilgotności powtarzaj raz w roku, najlepiej wiosną. Deszczomierz czyść z liści i owadów co kilka tygodni w sezonie.
Najczęstsze problemy i ich przyczyny
|
Objaw |
Prawdopodobna przyczyna |
|---|---|
|
ESP32 restartuje się cyklicznie |
Za słaby zasilacz lub brak kondensatora buforowego |
|
BME280 nie odpowiada |
Zły adres I²C (spróbuj 0x77) lub zamienione SDA/SCL |
|
DS18B20 pokazuje −127 °C |
Brak rezystora pull-up 4,7 kΩ lub przerwa w przewodzie |
|
Prędkość wiatru zawyżona kilkukrotnie |
Brak filtrowania drgań styku kontaktronu |
|
Temperatura zawyżona w słoneczne dni |
Brak osłony radiacyjnej |
|
Skokowe spadki wilgotności do 0 % |
Skroplona woda na czujniku, zawilgocona obudowa |
Najczęściej zadawane pytania
Ile kosztuje zbudowanie stacji pogodowej na ESP32?
Wersja podstawowa (ESP32 + BME280 + obudowa + zasilacz) mieści się w 120-150 zł. Komplet z anemometrem, deszczomierzem, wyświetlaczem OLED i zasilaniem solarnym to koszt rzędu 350-450 zł.
Czy stacja pogodowa na ESP32 działa bez internetu?
Tak. ESP32 może pracować w trybie punktu dostępowego i serwować stronę z odczytami w sieci lokalnej albo wyświetlać dane wyłącznie na module OLED. Internet jest potrzebny tylko do wysyłania danych do usług chmurowych.
Jak długo stacja wytrzyma na akumulatorze 18650?
Przy pracy ciągłej z aktywnym Wi-Fi ogniwo 3000 mAh wystarczy na 2-4 dni. Z deep sleep i wybudzaniem co 10 minut ten sam akumulator pracuje 3-6 tygodni, a z panelem słonecznym 6 V / 2 W - bezterminowo poza okresem grudzień-styczeń.
Czy mogę użyć DHT22 zamiast BME280?
Możesz, ale stracisz pomiar ciśnienia, a dokładność wilgotności spadnie z ±3 % do ±2-5 % przy znacznie wolniejszym czasie odpowiedzi. Różnica w cenie jest dziś niewielka, więc BME280 jest lepszym wyborem.
Co zrobić, żeby dane z mojej stacji trafiły do Windy lub innej sieci pogodowej?
Serwisy takie jak Windy, Weather Underground czy Awekas przyjmują dane przez proste zapytania HTTP GET z kluczem stacji. Wystarczy dopisać do pętli głównej wywołanie HTTPClient wysyłające odczyty pod podany przez serwis adres, zwykle nie częściej niż co 5 minut.
Jak mierzyć kierunek wiatru?
Standardowy wiatromierz zawiera osiem kontaktronów z rezystorami o różnych wartościach. Napięcie z dzielnika odczytujesz wejściem ADC ESP32 i porównujesz z tabelą wartości z karty katalogowej, otrzymując jeden z 16 kierunków.
Podsumowanie
Domowa stacja pogodowa na ESP32 jest projektem, w którym najtrudniejsza nie jest elektronika, tylko szczegóły montażowe: osłona radiacyjna, stabilne zasilanie, szczelne przepusty i rzetelna kalibracja. Kod z tego poradnika działa na dowolnej płytce ESP32-WROOM-32 i można go rozbudowywać moduł po module - najpierw BME280 na płytce stykowej, potem czujniki impulsowe, na końcu obudowa i zasilanie solarne.
Kompletując części, zajrzyj do kategorii czujniki i Arduino, a przy okazji sprawdź narzędzia do lutowania - czyste, mechanicznie pewne połączenia to warunek, żeby stacja przetrwała pierwszą zimę bez interwencji.