ESP-CSI:自制 WiFi 人體存在檢測系統(tǒng)
“WiFi 感測技術”是智能家居的未來嗎?還是僅僅是一種實驗室里的奇思妙想?我花了數(shù)周時間利用 ESP32 構建了一個人體感應裝置,以探究我們是否終于能夠摒棄那些昂貴的傳感器了。
簡介:“物聯(lián)網的第六感”興起之因
在智能家居和物聯(lián)網領域,我們一直在尋找理想的入侵檢測傳感器。光電傳感器價格低廉,但對靜止目標無感知能力。毫米波雷達精度高,但價格昂貴且集成難度大。攝像頭功能強大,但會引發(fā)嚴重的隱私問題。
但近來,在開源社區(qū)中出現(xiàn)了一種“第四種選擇”:WiFi 感知技術。它正逐漸受到廣泛關注。
事情始于我注意到 Espressif Systems 公司的工程師們在名為“esp-csi”的一個 GitHub 倉庫中頻繁活躍的身影。這并非只是一個小的更新;而是對在標準 ESP32 芯片上解鎖信道狀態(tài)信息(CSI)的全面推動。幾乎與此同時,社區(qū)做出了回應。我看到了諸如“espectre”這樣的項目出現(xiàn),它利用 CSI 進行頻譜分析。我還看到了研究人員發(fā)布使用深度學習進行二維室內定位的代碼。
這些說法簡直就像是科幻小說里的情節(jié)。埃斯普西菲公司的文件中甚至還包含了一個名為“esp-crab”的演示程序,在該程序中他們聲稱僅依靠無線網絡信號就能實現(xiàn)精確的手指動作追蹤。
這引起了我的好奇心。如果這種技術是真實存在的,它可能會使空間感知變得更加普及。我們不再需要價值 30 美元的雷達模塊了;只需一個價值 5 美元的微控制器就能完成任務。但它的可靠性如何?是否具有可復制性?還是說它只是一種脆弱的演示,僅在屏蔽的射頻室中才能正常工作?
為了回答這個問題,我從工作室里挑選了幾塊 Seeed Studio XIAO ESP32 板子,并決定從零開始搭建一個房間規(guī)模的傳感陣列。
理論:究竟什么是“犯罪現(xiàn)場調查”?
在開始構建之前,我們需要先弄清楚我們實際面對的是什么。我們大多數(shù)人對 RSSI(接收信號強度指示)都比較熟悉。RSSI 類似于測量聲音的“音量”;它能告訴你信號的響度如何,但除此之外就沒什么信息了。它波動幅度很大,提供的環(huán)境信息也非常有限。
信道狀態(tài)信息(CSI)則有所不同。如果說接收信號強度指示(RSSI)代表聲音的“音量”,那么信道狀態(tài)信息則代表聲音的“質感”。
在現(xiàn)代的 WiFi(正交頻分復用)技術中,數(shù)據(jù)是通過多個子載波(不同的頻率)同時傳輸?shù)?。當這些無線電波從發(fā)射器(TX)傳送到接收器(RX)時,它們會與墻壁、家具以及人體發(fā)生反射。這些反射導致波到達接收器的時間略有不同,從而形成了干擾模式。
CSI 能夠獲取每個子載波的振幅和相位信息。當人體在房間內移動時,會改變這些波的反射和散射方式。通過分析在整個頻率范圍內這些變化的“形態(tài)”,理論上我們能夠檢測出人體的存在、移動情況,甚至特定的姿勢。
第一階段: “你好,世界”與最初的挫敗感
我的探索之旅始于一個極其簡單的目標:將犯罪現(xiàn)場調查數(shù)據(jù)呈現(xiàn)在眼前。
為此任務,我選擇了 Seeed Studio 的 XIAO ESP32S3 板子。我喜歡這些板子,因為它們體積極小,運算能力強大,足以處理相關計算,并且易于融入實際應用中。
我將 csi_send 示例程序上傳到了一臺 XIAO 計算機上,將 csi_recv 程序上傳到了另一臺計算機上。為了簡化設置,我只在兩塊電路板上安裝了標準的 FPC(柔性貼片)天線,并將它們平放在我的桌面上,兩者的間距約為 50 厘米。然后,我運行了名為 csi_data_read_parse.py 的 Python 腳本,在我的筆記本電腦上顯示數(shù)據(jù)流。
結果令人沮喪。
我原本期待能看到一個清晰的正弦波,它會隨著我的手部動作而變化。然而,我看到的卻是一片凌亂的鋸齒狀線條。這張圖表看起來就像雜亂的噪聲。我把手在這些板子上揮動——沒有任何變化。我跳上跳下——圖表依舊是一片混亂的模糊景象。
我花了兩天時間,懷疑可能是固件設置有誤,或者是 XIAO 硬件不兼容所致。我調整了參數(shù),更換了 WiFi 信道,還重寫了 Python 解析器。但這一切都沒有效果。我基本上就是面對著雜亂的無線電信號噪聲。
第二階段:一切皆關乎物理學
在重新閱讀相關文檔并深入研究射頻理論之后,我意識到自己的錯誤并非出在軟件方面,而是源于物理原理。
?天線問題:大多數(shù)開發(fā)板所附帶的 FPC 天線是全向型的,但增益較低。將它們平放在桌子上時,會立即在緊挨著天線的桌面附近產生大量反射。我當時是在測量桌面,而不是整個房間。
?菲涅爾區(qū):無線電波并非以極細的直線形式傳播;它們是在兩個天線之間形成的一個類似足球形狀的區(qū)域中傳播的,這個區(qū)域被稱為菲涅爾區(qū)。由于我把設備放在了桌子上,所以該區(qū)域的下半部分被桌子擋住了。
解決辦法:
我搭建了一個合適的測試裝置。我把 XIAO 板安裝在三腳架上,將它們抬高至離地面 1.4 米的位置。至關重要的是,我斷開了 FPC 天線,并安裝了外部偶極子(桿狀)天線。
我重新啟動了這個程序。結果簡直是天壤之別。
圖表呈現(xiàn)出了一種穩(wěn)定的節(jié)奏。當我靜止不動時,線條是平緩的。而當我邁出一步時,波形便呈現(xiàn)出了一種美妙而獨特的形態(tài)。我終于能在數(shù)據(jù)中看到“我自己”了。這就是轉折點——這項技術真的奏效了。
第三階段:從數(shù)據(jù)到檢測(“警報線”)
既然我已經有了干凈的數(shù)據(jù),我就想用它來做些有用的事情。于是我切換到了 esp-radar/console_test 這個示例程序。這個固件包含了 Espressif 公司專有的算法,用于過濾噪聲并做出判斷:“有人在這兒”或者“房間是空的”。
我在客廳里把這兩根三腳架擺放在相距兩米的位置。
這場表演出乎意料地精準。它就像一條無形的觸發(fā)線。當我直接站在兩個支架之間時,串行控制臺立刻發(fā)出“有移動檢測到”的警報聲。這感覺太神奇了——一個沒有鏡頭、沒有活動部件、只有空氣的傳感器。
然而,其局限性很快就顯現(xiàn)出來了。如果我站在接收器后方兩米處,它就會忽略我;如果我坐在地上,它也會錯過我。單個設備只能形成一條“檢測線”,而非“檢測場”。要監(jiān)測一個真實的房間,我需要更廣泛的覆蓋范圍。
第四階段:構建“感知陣列”
為了解決盲點問題,我決定加大規(guī)模。我制定了一個使用 4 個 Seeed Studio XIAO ESP32 設備的多設備陣列方案。
我使用了一個針對 XIAO 生態(tài)系統(tǒng)進行了優(yōu)化的修改版代碼庫。該代碼允許多個接收器向中央節(jié)點進行數(shù)據(jù)回傳。
布局策略:
我將這些設備布置起來,形成了一個感知區(qū)域的網格狀布局:
?發(fā)射器(TX):位于房間的東北角。
?接收器 1(RX1):位于西南角(與之相對的對角位置)。它覆蓋了主要的步行通道。
?接收器 2 及 3:置于相鄰墻壁的中間位置。
這種布局確保了無論我在房間中的位置如何,我都會干擾到至少一對設備的菲涅爾波帶區(qū)域。
用戶界面:
該項目包含一個托管在主 ESP32 上的簡易網絡服務器。我在手機上打開了其 IP 地址。該界面很簡單:有一個顯示“存在”、“清除”或“移動”的狀態(tài)指示器,還有一個顯示信號變化情況的滾動圖表。
我走進房間。狀態(tài)隨即切換到了“運動”模式。
我走到那個拐角處,那里通常是視線盲區(qū)。狀態(tài)顯示仍為“存在”。
我坐在沙發(fā)上,保持了相對靜止的姿勢。系統(tǒng)停頓了一秒鐘,但狀態(tài)仍顯示為“在線”。
成功了。我成功地把整個客廳都改造成了一個傳感器系統(tǒng)。
結論:這是否已準備好投入實際應用?
在與這款“WiFi 信號陣列”共處一周之后,我對它的優(yōu)缺點有了清晰的認識。雖然其“酷炫程度”令人驚嘆,但實際情況卻并非如此簡單明了。
1. 電力消耗問題
這是最大的難題。與 Zigbee 或 LoRa 傳感器不同,這些傳感器通常 99%的時間都處于休眠狀態(tài),而 CSI 傳感器則需要 WiFi 無線電設備始終保持全功率工作狀態(tài),每秒要發(fā)送數(shù)百次數(shù)據(jù)包。
小 ESP32 設備運行時會發(fā)熱。這些設備不能用電池供電,因為幾分鐘內電池就會耗盡。你需要將 USB-C 數(shù)據(jù)線鋪設到房間的每個角落,這樣一來就破壞了“隱形”的美感,除非你把插座布置得恰到好處。
2. “校準的困境”
這個系統(tǒng)對環(huán)境非常敏感。如果我把咖啡桌挪動一下,反射的圖案就會發(fā)生變化。如果我打開窗戶,圖案也會隨之改變。
要使系統(tǒng)正常運行,需要經歷一個“校準”階段,在此期間房間必須完全空無一物。如果添加了一件新家具,通常就需要重新校準基準值。與僅能正常工作的 PIR 傳感器相比,這種關系需要進行頻繁的維護。
3. 復雜性與準確性
我的四設備組合系統(tǒng)在檢測精度方面達到了約 80% 的水平,而我的商用 24GHz 微波雷達的精度則略低一些。
諷刺的是,為了獲得更高的精度,你需要更多的設備(更多的接收端節(jié)點)。但增加更多的設備會加劇網絡擁堵,并使校準過程變得更加繁瑣。這就是所謂的“邊際效益遞減定律”。
4. 未被發(fā)掘的潛力:深度學習
我所搭建的這套系統(tǒng)運用的是基本的統(tǒng)計邏輯(如果差異值大于閾值,則為人類)。而真正的未來則在于深度學習。
理想情況下,我們會將這些 CSI 數(shù)據(jù)輸入到運行神經網絡的樹莓派或英偉達 Jetson 上。有了足夠的訓練數(shù)據(jù),人工智能就能學會“波形 A”代表“行走”,而“波形 B”代表“坐在沙發(fā)上”。然而,這會大幅增加成本和所需的技術技能,使其超出了簡單的家庭自動化DIY范疇。
本文編譯自hackster.io





