RisalDash RisalDash

Loyiha · Ob-havo · Koʻcha

Chindan oʻzingizniki boʻlgan toʻliq meteostansiya

Haqiqiy meteostansiya — bitta ichida ikkita yigʻilma: oson uy yarmi — BME280 + yorugʻlik — va yomgʻir oʻlchagich, anemometr va UV bilan koʻcha machtasi. Bu qoʻllanmada ikkalasi bitta ESP32’da, jonli «Ochiq / Bulutli / Yomgʻir» statusi, boʻron va issiqlik alertlari va chip oʻzi beradigan dashboard bilan — ob-havo bulutisiz, maʼlumotlaringiz oʻzingizniki.

LoyihaOb-havoBME280AnemometrESP32
ESP32 meteostansiya loyihasi: shamol, yomgʻir, UV, yorugʻlik, BME280 va boʻron alertlari

Sensorlar — nima nimani oʻlchaydi

SensorOʻlchaydiInterfeysIzoh
BME280harorat · namlik · bosimI²Cyadro — bosim trendi yomgʻirni bashorat qiladi
Agʻdarma chelakchayogʻin (mm)impulshar agʻdarilish = belgilangan hajm
Anemometr kosachalarishamol / shiddatimpuls (interrupt)gerkon, aylanishiga bir marta
Flyugeryoʻnalishanaloghar rumbga rezistor zinasi
GY-ML8511UV-indeksanalogquyosh taʼsiri
LDR / BH1750yorugʻlik (lx)analog / I²Ckun/tun mantigʻini boshqaradi

BME280 har qanday I²C sensor kabi ulanadi — SDA/SCL va quvvat. Impulsli sensorlar (yomgʻir, shamol) — interrupt GPIO’larga; flyuger, UV va LDR — ADC pinlarga.

BME280 ESP32’ga I²C orqali ulangan
Uy yarmi — 4 ta sim. BoardLab’da yigʻilgan.

Shamolni sanash — loop emas, interrupt

Anemometr aylanishiga bir marta gerkonni yopadi. Loop’da soʻrasangiz, dashboard nafas olishi bilan hisob yoʻqoladi — shuning uchun interrupt’da sanab, soniyada bir konvertatsiya qilamiz:

// Anemometer: a reed switch pulses once per rotation -> count on an interrupt.
volatile uint32_t pulses = 0;
void IRAM_ATTR onPulse() { pulses++; }
// setup: pinMode(WIND_PIN, INPUT_PULLUP); attachInterrupt(WIND_PIN, onPulse, FALLING);
// each second: wind = pulses * KMH_PER_HZ; pulses = 0;   (KMH_PER_HZ from the cup datasheet)

Dashboard — machtani bitta preset yopadi

dash.sensor("weather", …) toʻliq anemometr + flyuger + chelakcha toʻplamiga toʻgʻri birlik va diapazonlar bilan ochiladi; qolgani — shkala, beyj va jurnal:

dash.layout("Weather", RICON_WATER);
dash.sensor("weather", &wind, &gust, &dir, &rain); // anemometer · vane · rain preset
dash.gauge("UV index", &uv, 0, 12);
dash.badge("Conditions", &sky).labels("Clear", "Cloudy", "Rain");
dash.led("Weather alert", &alarmOut);              // red LED + buzzer outside
evlog = &dash.log("Alerts", 5);

dash.layout("Ambient", RICON_THERMOMETER);
dash.sensor("bme280", &temp, &hum, &pres).chart(); // T / RH / hPa with history
dash.metric("Light", &lux, "lx");                  // LDR or BH1750
dash.beginAP("RisalDash-Weather", "12345678");

Status va alertlar — oz mantiq, koʻp foyda

«Yomgʻir yogʻyaptimi?» — bu shunchaki tiklayotgan yogʻin hisoblagichi. «Bulutlimi?» — chegaradan past yorugʻlik. Boʻron shiddat yoki jazirama alert-LED’ni yoqadi (oʻsha pinga zummer ulanadi) va jurnalga yozadi:

// Conditions: raining if the bucket is ticking, else clear vs dim by daylight.
bool raining = rain - rainPrev > 0.01f;
rainPrev = rain;
sky = raining ? 2 : (lux < 8000 ? 1 : 0);

// Alerts: a storm gust or extreme heat trips the LED/buzzer + a log line.
bool trip = gust > 60 || temp > 40;
if (trip && !alarmOut && evlog)
  evlog->print(gust > 60 ? "STORM - gusts over 60 km/h" : "HEAT - over 40 C");
alarmOut = trip;

Kutubxonadagi namuna (examples/04_Templates/WeatherStation) hammasini temirsiz yuritadi: shiddatli shamol, oʻtayotgan jalalar, virtual quyoshga ergashgan UV va yorugʻlik. Bugunoq «Rain» beyji va boʻron alerti ishlashini koʻring, keyin fake’larni real drayverlarga sensorma-sensor almashtiring — fake-sensor workflow.

Oʻstirish

Deep sleep va LiFePO4 qoʻshing — oylab ishlaydigan quyosh machtasi; oʻz oʻlchovlaringiz yoniga jonli Open-Meteo prognozini torting (kutubxonaning RisalWeather.h, kalitsiz); Home Assistant uchun MQTT ga publish qiling. Stol ekrani uchun displey qoʻllanmasidagi istalgan ekran oʻsha oʻzgaruvchilardan ishlaydi.

Butun stansiya bugun fake’larda ishlaydi — machta sensorma-sensor kelsin.