Láss át a hullámokon: Emberérzékelés WiFi CSI és ESP32 segítségével

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:

  1. Amplitúdót: Mennyire gyengült a jel azon a frekvencián.
  2. 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:

  1. Adatgyűjtés: Megkapjuk a komplex számok mátrixát (Idő x Subcarrierek).
  2. 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.
  3. 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.