DIY išmanių namų jutikliai su ESP32

Kodėl ESP32 yra beveik tobulas pasirinkimas pradedantiesiems

Jei kada nors svajojote apie išmaniuosius namus, bet atsitrenkėte į kainų sieną – suprantu jus puikiai. Komerciniai sprendimai kaip Philips Hue, Nest ar net lietuviškos rinkos alternatyvos gali greitai ištuštinti piniginę. Tačiau yra kitas kelias, ir jis prasideda nuo mažo, pigaus, bet nepaprastai galingos plokštės – ESP32.

ESP32 – tai Espressif Systems sukurtas mikrovaldiklis, kuris kainuoja maždaug 3–7 eurus, priklausomai nuo versijos ir tiekėjo. Skamba kukliai, bet šiame mažame lustelyje telpa Wi-Fi, Bluetooth, daugybė GPIO kontaktų, analoginiai-skaitmeniniai keitikliai ir netgi jutikliai lietimui. Lyginant su senuoju Arduino, kuris daugeliui buvo pirmasis žingsnis į elektroniką, ESP32 yra kaip pereiti nuo dviračio prie motociklo – ta pati logika, bet visiškai kitas greitis.

Dar vienas dalykas, dėl kurio ESP32 tapo toks populiarus tarp entuziastų – tai milžiniška bendruomenė. Jei įstrigsite, visada rasite atsakymą Reddit, GitHub ar specializuotuose forumuose. Dokumentacija gausi, projektų pavyzdžių – tūkstančiai. Tai labai svarbu, kai kalbame apie DIY projektus, nes anksčiau ar vėliau kažkas tikrai neis taip, kaip tikėjotės.

Ką jums reikės nusipirkti prieš pradedant

Prieš pasinerdami į kodą ir lituoklius, pasikalbėkime apie komponentus. Čia nereikia leisti šimtų eurų – tikrai ne. Štai bazinis sąrašas, su kuriuo galėsite sukurti kelis skirtingus jutiklius:

  • ESP32 plokštė – rekomenduoju ESP32 DevKit v1 arba ESP32-WROOM-32. AliExpress siūlo juos už 3–5 eurus, Amazon ar Mouser – brangiau, bet greičiau. Jei nenorite laukti mėnesį, ieškokite vietinių elektronikos parduotuvių.
  • DHT22 arba DHT11 – temperatūros ir drėgmės jutiklis. DHT22 yra tikslesnis, kainuoja apie 2–3 eurus. DHT11 pigesnis, bet mažiau tikslus.
  • PIR jutiklis (HC-SR501) – judesio aptikimui. Kainuoja apie 1–2 eurus ir veikia puikiai.
  • MQ-2 arba MQ-135 – dujų/oro kokybės jutiklis. Priklausomai nuo to, ką norite matuoti – dujas, dūmus ar bendrą oro kokybę.
  • Breadboard ir jumper laidai – prototipavimui. Vėliau, kai projektas bus stabilus, galite lituoti.
  • Micro USB kabelis ir maitinimo šaltinis – 5V, bent 1A. Senas telefono įkroviklis tiks puikiai.

Viso šito rinkinys kainuos apie 15–25 eurus, ir su juo galėsite eksperimentuoti ilgai. Palyginkite tai su vienu komerciniu išmaniuoju jutikliu, kuris dažnai kainuoja 30–50 eurų ir dar reikalauja mokamos prenumeratos debesų paslaugai.

Programinė aplinka: nuo Arduino IDE iki ESPHome

Čia prasideda tikras pasirinkimų miškas. Galite programuoti ESP32 keliais būdais, ir kiekvienas turi savo privalumų bei trūkumų.

Arduino IDE – klasikinis pasirinkimas. Jei jau turite Arduino patirties, perėjimas bus sklandus. Reikia tik įdiegti ESP32 plokščių paketą per Board Manager. Einate į File → Preferences, įdedate URL: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, tada per Board Manager ieškote „esp32” ir įdiegiate. Viskas.

MicroPython – jei labiau mėgstate Python sintaksę, tai jūsų kelias. Reikia įflashinti MicroPython firmware į plokštę, tada galite rašyti kodą Python kalba. Pradedantiesiems tai gali būti intuityviau, ypač jei turite Python patirties iš kitų sričių.

ESPHome – ir čia mes prieiname prie to, kas mano nuomone yra tikrasis žaidimo keitėjas. ESPHome leidžia konfigūruoti jutiklius YAML failu, be beveik jokio programavimo. Jis tiesiogiai integruojasi su Home Assistant – populiariausia atvirojo kodo namų automatizavimo platforma. Jei planuojate rimtesnę išmaniųjų namų sistemą, ESPHome + Home Assistant yra tiesiog logiškas pasirinkimas.

Mano rekomendacija: pradėkite su Arduino IDE, kad suprastumėte, kas vyksta po gaubtu. Kai suprasite pagrindus, pereikite prie ESPHome – sutaupysite daugybę laiko.

Pirmas projektas: temperatūros ir drėgmės jutiklis

Pradėkime nuo ko nors konkretaus. Temperatūros ir drėgmės jutiklis su DHT22 – tai klasikinis pirmasis projektas, kuris iš tikrųjų yra naudingas kasdieniniame gyvenime.

Prijungimas paprastas: DHT22 turi tris kontaktus (arba keturis, jei su rezistoriumi). VCC jungiamas prie 3.3V arba 5V (abu veikia), GND prie žemės, o DATA prie bet kurio GPIO kontakto – tarkime, GPIO4. Tarp VCC ir DATA reikia 10kΩ pull-up rezistoriaus, nors daugelyje modulių jis jau yra įmontuotas.

Štai paprastas Arduino IDE kodas:


#include <DHT.h>
#include <WiFi.h>

#define DHTPIN 4
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "jūsų_wifi";
const char* password = "jūsų_slaptažodis";

void setup() {
  Serial.begin(115200);
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Prisijungta!");
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if (isnan(h) || isnan(t)) {
    Serial.println("Klaida skaitant jutiklį!");
    return;
  }
  
  Serial.print("Temperatūra: ");
  Serial.print(t);
  Serial.print("°C, Drėgmė: ");
  Serial.print(h);
  Serial.println("%");
  
  delay(2000);
}

Tai tik pradžia. Realybėje norėsite siųsti šiuos duomenis kažkur – į MQTT brokerį, į Home Assistant, ar bent jau į paprastą web serverį, kurį pats ESP32 gali aptarnauti. Bet šis kodas leidžia patikrinti, ar viskas veikia, ir pamatyti duomenis Serial Monitor lange.

Vienas praktinis patarimas: DHT22 nereikėtų apklausti dažniau nei kas 2 sekundes. Jutiklis tiesiog nespėja atsinaujinti. Jei matote keistus skaičius, patikrinkite pull-up rezistorių ir maitinimo įtampą.

MQTT ir Home Assistant: kaip viską sujungti į vieną sistemą

Turėti jutiklį, kuris rodo duomenis tik Serial Monitor lange – tai tik pusė darbo. Tikroji magija prasideda, kai visi jutikliai pradeda „kalbėtis” tarpusavyje ir su centralizuota sistema.

MQTT (Message Queuing Telemetry Transport) – tai lengvas pranešimų protokolas, sukurtas specialiai IoT įrenginiams. Veikia pagal publish/subscribe modelį: jutiklis „publikuoja” duomenis į temą (topic), o kiti įrenginiai ar programos „prenumeruoja” tą temą ir gauna duomenis. Paprasčiau tariant – tai kaip radijo stotis ir klausytojai.

Jums reikės MQTT brokerio – programos, kuri tarpininkauja tarp siuntėjų ir gavėjų. Populiariausias pasirinkimas – Mosquitto, kurį galite įdiegti ant Raspberry Pi, seno kompiuterio ar net NAS įrenginio. Home Assistant turi integruotą Mosquitto priedą, jei naudojate Home Assistant OS.

ESP32 pusėje naudosite PubSubClient biblioteką. Štai kaip atrodytų jutiklio duomenų siuntimas:


#include <PubSubClient.h>
#include <WiFi.h>
#include <DHT.h>

WiFiClient espClient;
PubSubClient client(espClient);

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32_Jutiklis")) {
      Serial.println("MQTT prisijungta");
    } else {
      delay(5000);
    }
  }
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();
  
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  
  char tempStr[8];
  dtostrf(t, 1, 2, tempStr);
  client.publish("namai/miegamasis/temperatura", tempStr);
  
  delay(30000); // siųsti kas 30 sekundžių
}

Home Assistant pusėje sukonfigūravus MQTT integraciją, duomenys pradės rodytis automatiškai. Galėsite kurti automatikas – pavyzdžiui, jei temperatūra nukrenta žemiau 18°C, siųsti pranešimą į telefoną arba įjungti šildymą.

Jei nenorite rašyti kodo rankiniu būdu, ESPHome tai padaro už jus. Jūsų YAML konfigūracija atrodytų maždaug taip:


esphome:
  name: miegamasis-jutiklis

esp32:
  board: esp32dev

wifi:
  ssid: "jūsų_wifi"
  password: "slaptažodis"

sensor:
  - platform: dht
    pin: GPIO4
    model: DHT22
    temperature:
      name: "Miegamojo temperatūra"
    humidity:
      name: "Miegamojo drėgmė"
    update_interval: 30s

Tai visas kodas. ESPHome sukompiliuoja viską pats, įkelia į plokštę ir automatiškai sukuria Home Assistant objektus. Skirtumas nuo rankinio programavimo – kaip naktis ir diena.

Sudėtingesni jutikliai: oro kokybė, judesys ir durų stebėjimas

Kai jau turite veikiantį temperatūros jutiklį ir suprantate, kaip viskas jungiasi, laikas praplėsti sistemą. Čia keli projektai, kurie tikrai prideda vertės kasdieniniame gyvenime.

Oro kokybės jutiklis su MQ-135 – šis jutiklis matuoja CO2, amoniako, benzolo ir kitų dujų koncentraciją ore. Naudinga virtuvėje, miegamajame ar biure. Vienas niuansas: MQ serijos jutikliai reikalauja „šildymosi” periodo – pirmą kartą įjungus, reikia palaukti apie 24–48 valandas, kol duomenys taps patikimi. Tai analoginis jutiklis, todėl reikia naudoti ADC (analoginį-skaitmeninį keitiklį). ESP32 turi 12-bitį ADC, kas suteikia 0–4095 reikšmių diapazoną.

PIR judesio jutiklis – HC-SR501 yra vienas paprasčiausių jutiklių. Jis tiesiog duoda HIGH signalą, kai aptinka judesį, ir LOW, kai jo nėra. Galima reguliuoti jautrumą ir laiką, kurį jutiklis išlieka aktyvus po judesio aptikimo – ant paties modulio yra du potenciometrai. Puikiai tinka koridoriaus apšvietimo automatizavimui ar saugumo sistemoms.

Reed switch durų/langų jutiklis – tai magnetinis jungiklis, kuris keičia būseną, kai magnetas priartėja arba nutolsta. Klijuojate vieną dalį ant durų, kitą ant rėmo. Kainuoja centus, bet suteikia labai naudingą informaciją: ar durys atidarytos ar uždarytos. Galite gauti pranešimą į telefoną, jei durys liko atidarytos ilgiau nei 5 minutes.

Praktinis patarimas dėl PIR jutiklių: jie labai jautrūs temperatūros pokyčiams, o ne tiesiogiai judesiui. Todėl gali suveikti nuo šildymo radiatorių, saulės spindulių per langą ar net nuo didelių gyvūnų. Jei gaunate per daug klaidingų signalų, sumažinkite jautrumą potenciometru arba programiškai filtruokite trumpus impulsus.

Maitinimas baterijomis ir gilaus miego režimas

Vienas didžiausių iššūkių su ESP32 jutikliais – maitinimas. Jei jutiklis turi būti kažkur toli nuo maitinimo lizdo (pavyzdžiui, lauke, rūsyje ar ant lango), reikia galvoti apie baterijas. Ir čia yra problema: ESP32 veikdamas pilnu režimu sunaudoja apie 240mA. Su 18650 baterija (2500mAh) tai reikštų vos kelias dienas autonominio darbo.

Sprendimas – Deep Sleep (gilaus miego) režimas. Kai ESP32 „miega”, sunaudoja vos 10–150 mikroamperų. Idėja paprasta: plokštė pabunda, nuskaito jutiklį, išsiunčia duomenis, ir vėl užmiega. Visas ciklas gali trukti 2–3 sekundes, o tada plokštė miega 5–30 minučių.


#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 300 // 5 minutės

void setup() {
  // ... inicializacija, duomenų skaitymas, siuntimas ...
  
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  esp_deep_sleep_start();
}

void loop() {
  // Su Deep Sleep loop() niekada nevykdomas
}

Su šiuo metodu 18650 baterija gali išlaikyti jutiklį veikiantį kelis mėnesius. Jei pridėsite mažą saulės elementą (5V, 100–200mA), sistema gali tapti visiškai autonomiška.

Dar vienas dalykas, kurį verta žinoti: ESP32 paleidimas iš Deep Sleep užtrunka apie 1–2 sekundes, nes reikia iš naujo prisijungti prie Wi-Fi. Jei tai per lėta, galite naudoti ESP-NOW protokolą – tai Espressif sukurtas peer-to-peer protokolas, kuris veikia be Wi-Fi infrastruktūros ir leidžia siųsti duomenis per milisekundes. Vienas ESP32 gali būti „vartai” (gateway), kuris visą laiką veikia ir perduoda duomenis į namų tinklą, o kiti jutikliai siunčia duomenis jam per ESP-NOW.

Kai jutikliai tampa tikra sistema: patarimai iš praktikos

Po kelių mėnesių eksperimentavimo su ESP32 jutikliais, galiu pasidalinti keliomis pamokytomis, kurios sutaupys jums laiko ir nervų.

Pirmiausia – niekada nekietai koduokite Wi-Fi slaptažodžio į programą. Naudokite WiFiManager biblioteką, kuri leidžia konfigūruoti Wi-Fi per naršyklę pirmą kartą paleidus įrenginį. Kai pakeičiate Wi-Fi slaptažodį namuose, nereikės perprogramuoti visų jutiklių.

Antra – pridėkite OTA (Over-The-Air) atnaujinimus. ESP32 palaiko programinės įrangos atnaujinimą per Wi-Fi. Tai reiškia, kad galite atnaujinti jutiklio kodą neliesdami fizinio įrenginio. Labai naudinga, kai jutiklis yra sunkiai pasiekiamoje vietoje. ESPHome tai daro automatiškai.

Trečia – naudokite laidų žymėjimą. Skamba trivialiai, bet kai turėsite 10 jutiklių, suprasite, kodėl tai svarbu. Pažymėkite kiekvieną plokštę, kiekvienas laidus. Naudokite skirtingas spalvas: raudona – maitinimas, juoda – žemė, kitos spalvos – duomenys.

Ketvirta – stebėkite signalo stiprumą. ESP32 gali rodyti RSSI (signalo stiprumo) reikšmę. Jei jutiklis dažnai atsijungia, greičiausiai Wi-Fi signalas per silpnas. Sprendimas – Wi-Fi stiprintuvas (repeater) arba ESP32 su išorine antena (ESP32-WROVER arba plokštės su u.FL jungtimi).

Penkta – naudokite duomenų bazę duomenų saugojimui. Home Assistant automatiškai saugo visų jutiklių istoriją SQLite duomenų bazėje, bet jei norite ilgesnės istorijos ir geresnių grafikų, pažiūrėkite į InfluxDB + Grafana kombinaciją. Tai leidžia matyti temperatūros kitimą per metus, palyginti skirtingų kambarių drėgmę ir pan.

Ir paskutinis, bet ne mažiau svarbus dalykas – pradėkite paprastai. Matau daug žmonių, kurie bando iš karto sukurti tobulą sistemą su dešimtimis jutiklių, sudėtingomis automatikomis ir vizualizacijomis. Rezultatas – nusivylimas ir nebaigti projektai. Pradėkite nuo vieno jutiklio, išmokite jį valdyti, tada plėskite sistemą. Kiekvienas pridėtas jutiklis bus lengvesnis nei ankstesnis, nes jau žinosite, kaip viskas veikia.

ESP32 ir DIY išmanių namų pasaulis yra toks platus, kad galima mokytis metus ir vis tiek rasti naujų dalykų. Bet tai ir yra jo grožis – tai ne tik technologinis projektas, bet ir nuolatinis mokymasis, eksperimentavimas ir tas nepakartojamas jausmas, kai kažkas, ką sukūrėte patys, pradeda veikti. Ir kai kitą kartą gausite pranešimą į telefoną, kad namuose temperatūra nukrito žemiau komforto ribos, žinosite, kad tas pranešimas atkeliauja iš mažo lustelio, kurį patys suprogramavote ir prijungėte – ir tai yra visiškai kitoks jausmas nei spaudant mygtuką komercinėje aplikacijoje.

Daugiau

Figma vs Adobe XD 2026: UX dizaino įrankiai

Kaip išjungti Apple Intelligence, jei nepatinka