Gondoltál már arra, hogy a WiFi routered nem csak internetet sugároz, hanem egy láthatatlan, háromdimenziós hálót is kifeszít a lakásodban? Mi lenne, ha ezt a hálót mozgásérzékelőként, sőt, légzésfigyelőként használhatnánk, anélkül, hogy kamerákat szerelnénk fel?
A mai bejegyzésben a WiFi Sensing világába merülünk el, konkrétan a CSI (Channel State Information) és az olcsó, de nagy tudású ESP32 mikrokontroller kapcsolatát vizsgáljuk meg. Egy egyszerű példán keresztül bemutatom, hogyan jelezhető, ha valaki belép a szobába.
Mi a baj a hagyományos érzékelőkkel?
A legtöbb okosotthon rendszer PIR (passzív infravörös) szenzorokat használ. Ezek olcsók, de vannak korlátaik:
- Rálátás szükséges: Ha a fotel takarásában vagy, nem lát.
- Csak mozgásra reagál: Ha mozdulatlanul olvasol, a lámpa lekapcsol.
- Hőmérsékletfüggő: Nyári kánikulában pontatlanabb lehet.
A WiFi alapú érzékelés ezzel szemben „átlát” a vékonyabb falakon, bútorokon, és a legapróbb mozgást (mellkas emelkedése légzéskor) is képes detektálni.
A technológia lelke: Mi az a CSI?
A legtöbb fejlesztő ismeri az RSSI-t (Received Signal Strength Indicator). Ez egyetlen számérték, ami megmondja, milyen „hangos” a jel (pl. -65 dBm). Ez azonban durva adat, tele zajjal.
A CSI (Channel State Information) ezzel szemben a WiFi jel fizikai rétegének (PHY) mélyebb analízise. A modern WiFi (802.11n/ac/ax) OFDM technológiát használ, azaz a jelet sok kis segédvivőre (subcarrier) bontja.
Analógia: Képzeld el az RSSI-t úgy, mintha egy sötét szobában mérnéd a teljes hangerőt. A CSI viszont olyan, mintha látnád az equalizeren a frekvenciákat külön-külön.
A CSI minden egyes segédvivőhöz (subcarrier) egy komplex számot rendel, amely tartalmazza:
- Amplitúdót: Mennyire gyengült a jel azon a frekvencián.
- Fázist: Mennyit késett/tolódott a jel.
A többutas terjedés (Multipath Effect)
Amikor a WiFi jel elindul az Adótól (Tx), visszaverődik a falakról, bútorokról és az emberekről. A Vevőhöz (Rx) több úton, különböző időpontokban érkezik meg a jel.
Ha egy ember belép a szobába, a teste megváltoztatja ezeket a visszaverődéseket. Mivel az emberi test nagyrészt víz, kiválóan szórja a rádióhullámokat. Ez a változás azonnal megjelenik a CSI adatmátrixban, még akkor is, ha az RSSI alig változik.
A hardver: Az ESP32 szerepe
Régebben a CSI adatok kinyeréséhez speciális Intel 5300-as hálózati kártyákra és Linux hack-re volt szükség. Ma már egy pár ezer forintos ESP32 is képes erre.
- ESP32 mint Vevő (Rx): Promiscuous módban hallgatózik, és a beérkező csomagok mellé csatolt CSI metaadatokat kimenti.
- ESP32 mint Adó (Tx): Folyamatosan „pingeli” a hálózatot vagy szór broadcast csomagokat, hogy fenntartsa a forgalmat, amit mérni lehet.
Az Espressif hivatalosan is támogatja ezt az esp-csi komponenssel az ESP-IDF keretrendszerben.
A gyakorlati példa: Belépés érzékelése
Hogyan építsünk fel egy rendszert, ami jelzi, ha István belép a laborba?
1. Architektúra
- Adó (Tx): Egy ESP32 a szoba egyik sarkában, ami másodpercenként 100-szor küld egy üres adatcsomagot.
- Vevő (Rx): Egy másik ESP32 a szoba átellenes pontján. Ez fogadja a jelet, kinyeri a CSI adatokat (egy 64 vagy 128 bájtos vektort csomagonként), és UDP-n vagy Soros porton továbbítja egy szervernek/PC-nek.
- Feldolgozó (PC/Raspberry Pi): Itt fut a Python script (és az AI modell).
2. Az adatfolyam (A „Pipeline”)
A nyers CSI adat zajos. AI mérnökként itt kezdődik az igazi munka:
- Adatgyűjtés: Megkapjuk a komplex számok mátrixát (Idő x Subcarrierek).
- Tisztítás:
- Amplitúdó kinyerése: $A = \sqrt{Re^2 + Im^2}$.
- Outlier szűrés: Hampel filter a hirtelen kiugró hibák ellen.
- Zajszűrés: Mozgó átlag vagy Butterworth aluláteresztő szűrő a nagyfrekvenciás zaj eltávolítására.
- Jellemző kinyerés (Feature Extraction):
- Ha a szoba üres, a jelek varianciája (szórása) alacsony. A görbék „simák”.
- Ha valaki belép, a dinamikus mozgás miatt a variancia megugrik.
3. Az algoritmus (A döntéshozatal)
Egy egyszerű belépés-érzékeléshez nem feltétlenül kell Deep Learning, elég a statisztika:
Python kód:
# Pszeudókód az elv szemléltetésére
csi_data = get_latest_csi_batch() # pl. 100 csomag
variance = calculate_variance_across_subcarriers(csi_data)
threshold = 5.0 # Kísérleti úton meghatározott küszöb
if variance > threshold:
print("RIASZTÁS: Valaki belépett a zónába!")
else:
print("A szoba üres.")
Komolyabb alkalmazásoknál (pl. emberi tevékenység felismerése – HAR) itt jönne képbe egy LSTM vagy CNN hálózat, amit a megtisztított CSI képeken tanítunk be.
A WiFi CSI alapú érzékelés az ESP32-vel demokratizálta a rádiófrekvenciás érzékelést. Bár nem helyettesíti mindenhol a kamerákat, olyan helyeken nyújt megoldást, ahol a magánszféra védelme (pl. fürdőszoba, hálószoba) kritikus, de a biztonság (pl. idősgondozás, esésérzékelés) elengedhetetlen.
AI fejlesztőként a CSI egy izgalmas új adatforrás: egy zajos, kaotikus idősornak tűnik, de a megfelelő modellel a fizikai tér pontos lenyomatát rejti.
