今天將介紹ESP32如何"一芯兩用",既做人體檢測傳感器也做Wi-Fi數(shù)據(jù)傳輸模塊;
對于使用ESP32做Wi-Fi數(shù)據(jù)通訊,相信玩ESP32的基本上都知道怎么玩了,但是如何使用ESP32來做人體檢測傳感器,對我來說還是挺新鮮的事兒,對你來說是否有也一樣呢?接下來我會重點來展開說說如何通過ESP32來實現(xiàn),這里我用的的是ESP32C3模組;
0、前言
之前看過樂鑫演示了他們家的ESP-CSI智能人體感知檢測方案,覺得很有意思,居然可以使用Wi-Fi來檢測人體移動等一系列檢測,其中能夠檢測到的狀態(tài)有:有人/無人、運動/靜止;
ESP-CSI檢測
于是就想著自己動手實踐一下這個方案的實際效果;
最后通過修改參考代碼,實現(xiàn)了一個基于ESP-CSI方案的ESP32C3人體檢測傳感器,同時接入到了HomeAssistant平臺,可以通過HomeAssistant來觀察整個檢測的過程;
“
一句話:本文基于ESP32C3實現(xiàn)了一個人體檢測方案,讓ESP32C3既做人體檢測傳感器也做Wi-Fi數(shù)據(jù)傳輸模塊,并且接入到了HomeAssistant平臺。
1、一些關(guān)于ESP-CSI基礎(chǔ)知識介紹
CSI:Channel Sstate Information,信道狀態(tài)信息,是描述無線信道特性的重要參數(shù),包括信號的幅度、相位、信號延遲等指標。在Wi-Fi通信中,CSI用于測量無線網(wǎng)絡(luò)的信道狀態(tài)。
通過分析和研究CSI的變化,可以推斷引起信道狀態(tài)變化的物理環(huán)境變化,實現(xiàn)非接觸式智能傳感。
CSI對環(huán)境變化非常敏感。它不僅能感知人或動物的行走、奔跑等大動作引起的變化,還能捕捉靜態(tài)環(huán)境中人或動物的細微動作,如呼吸、咀嚼等。這些能力使得 CSI 在智能環(huán)境監(jiān)測、人體活動監(jiān)測、無線定位等應(yīng)用中具有廣泛的應(yīng)用前景。
2、一些Wi-Fi CSI的有趣例子
網(wǎng)上還有很多關(guān)于CSI的有趣例子,這里羅列幾個有趣的例子,就當(dāng)為了提升你對CSI的興趣吧。
通過CSI檢測人的運動姿態(tài)
- CSI檢測人的運動姿態(tài)
人在檢測
- 人在檢測
通過以上的例子,讓我們了解到CSI的應(yīng)用方向還是挺多的,而樂鑫通過對CSI數(shù)據(jù)進行一系列的處理,最終封裝為一個esp-radar庫,讓我們無需再進行復(fù)雜的技術(shù)分析,只需要會調(diào)用esp-radar相關(guān)的APi即可,即可完成檢測到有人/無人、運動/靜止這些情況。
所以利用ESP-CSI我們本質(zhì)上是理解相關(guān)API的作用和使用流程;
3、ESP-CSI相關(guān)API介紹
我并沒有看到樂鑫有對這個庫的API做比較詳細的說明,其作用我都是通過看源碼注釋理解進行說明,如果有不正確的歡迎留言指出,一起交流;
通過打開esp_radar.h文件,可以看到總共提供了11個API,通過API名稱其功能大概也能猜出個7,8成,具體的API如下
#設(shè)置Wi-Fi radar配置,相關(guān)配置可以通過wifi_radar_config_t結(jié)構(gòu)體查看
esp_err_tesp_radar_set_config(constwifi_radar_config_t*config);
#獲取Wi-Fi radar配置
esp_err_tesp_radar_get_config(wifi_radar_config_t*config);
#啟動Wi-Fi radar
esp_err_tesp_radar_start(void);
#停止Wi-Fi radar
esp_err_tesp_radar_stop(void);
#初始化Wi-Fi radar
esp_err_tesp_radar_init(void);
#釋放Wi-Fi radar 初始化
esp_err_tesp_radar_deinit(void);
#訓(xùn)練Wi-Fi radar 相關(guān)配置,主要用于自主校準,校準之后可以獲取相關(guān)的參數(shù),如有無人的閾值
esp_err_tesp_radar_train_start(void);
#移植訓(xùn)練Wi-Fi radar后相關(guān)的配置,一般用于需要重新校準的情況,不然上一次校準的數(shù)據(jù)可能會影響本次的結(jié)果
esp_err_tesp_radar_train_remove(void);
#停止訓(xùn)練,可以通過入?yún)@取訓(xùn)練后的兩個結(jié)果 wander和jitter這兩個閾值
esp_err_tesp_radar_train_stop(float*wander_threshold,float*jitter_threshold);
#獲取模組的增益
esp_err_tesp_radar_get_rx_gain(uint8_t* agc_gain,int8_t*fft_gain);
#設(shè)置模組的增益
esp_err_tesp_radar_set_rx_gain(uint8_tagc_gain,int8_tfft_gain);
4、ESP-Radar編程實現(xiàn)=>人體檢測連接到HomeAssistant
通過對esp-radar庫api和相關(guān)工程流程的理解,接下來就是編程實現(xiàn)文章開頭說的,功能: 基于ESP-CSI方案例程connect_rainmaker,使用ESP32C3實現(xiàn)人體檢測傳感器,同時接入到了HomeAssistant平臺;
4.1、工程配置;
- 檢查SDK是否啟動CSI:Menuconfig>Components config>Wi-Fi>Wi-Fi CSI (Channel State Information)
- 由于我們要添加把檢測到的狀體有人/無人、運動/靜止,上報到HA平臺,所以我定義了兩個實體,一個是人在實體,一個是移動實體,然后通過MQTT接入到HA,所以我們需要在工程中添加mqtt模塊,我們在idf_component.yml添加mqtt,如下圖
4.2 整體程序主要CSI邏輯
image 4
4.3 通過MQTT協(xié)議鏈接到HomeAssistant
我們通過MQTT協(xié)議來把監(jiān)聽到的數(shù)據(jù)上報到HA,具體如何通過MQTT來聲明設(shè)備的屬性服務(wù)以及如何上報可以參考我之前寫的文章
- HomeAssistant|【入門篇】基于MQTT的零代碼、少配置,設(shè)備高效接入方法
- HomeAssistant|【高級篇】基于MQTT的零代碼、少配置,設(shè)備高效接入方法
- HomeAssistant|【實戰(zhàn)篇】基于MQTT的零代碼、少配置,設(shè)備高效接入方法
5、工程效果展示
- 通過ESP-RainMkaker APP 把設(shè)備配置網(wǎng)絡(luò)
- 通過在APP上校準設(shè)備,校準設(shè)備過程需要確保沒有人在房間,整個校準過程60秒
- 通過通過HomeAssistant顯示捕捉到:有人/無人、運動/靜止
- 同時我們通過HA的歷史記錄也可以更好的觀察過去一段時間的檢測情況
- 具體的編程實現(xiàn)可以參考我添加的代碼ha_mqtt
我們使用了使用了樂鑫的例程實踐,直觀感受到了esp32既可以做傳統(tǒng)的數(shù)據(jù)傳輸模塊也可以用來同時做人在和移動檢測傳感器,最后通過加入自己的代碼,實現(xiàn)把檢測到的狀態(tài)也上報到了HA平臺;工具安利最后給大家推薦我做的一個無線串口數(shù)據(jù)采集工具,感興趣的童鞋可以點擊看看一種讓你的MCU日志可無線查看和實時記錄跟蹤的方法
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753061 -
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
1880瀏覽量
64554 -
ESP32
+關(guān)注
關(guān)注
18文章
971瀏覽量
17201
發(fā)布評論請先 登錄
相關(guān)推薦
評論