原来ESP32竟可《一“芯”两用》既做人体检测传感器也做Wi-Fi数据传输

描述

今天将介绍ESP32如何"一芯两用",既做人体检测传感器也做Wi-Fi数据传输模块;

对于使用ESP32做Wi-Fi数据通讯,相信玩ESP32的基本上都知道怎么玩了,但是如何使用ESP32来做人体检测传感器,对我来说还是挺新鲜的事儿,对你来说是否有也一样呢?接下来我会重点来展开说说如何通过ESP32来实现,这里我用的的是ESP32C3模组;

0、前言

之前看过乐鑫演示了他们家的ESP-CSI智能人体感知检测方案,觉得很有意思,居然可以使用Wi-Fi来检测人体移动等一系列检测,其中能够检测到的状态有:有人/无人、运动/静止;

数据传输

ESP-CSI检测

于是就想着自己动手实践一下这个方案的实际效果;

最后通过修改参考代码,实现了一个基于ESP-CSI方案的ESP32C3人体检测传感器,同时接入到了HomeAssistant平台,可以通过HomeAssistant来观察整个检测的过程;

一句话: 本文基于ESP32C3实现了一个人体检测方案,让ESP32C3既做人体检测传感器也做Wi-Fi数据传输模块,并且接入到了HomeAssistant平台。

 

1、一些关于ESP-CSI基础知识介绍

CSI:Channel Sstate Information ,信道状态信息,是描述无线信道特性的重要参数,包括信号的幅度相位信号延迟等指标。在Wi-Fi 通信中,CSI 用于测量无线网络的信道状态。

通过分析和研究CSI 的变化,可以推断引起信道状态变化的物理环境变化,实现非接触式智能传感。

CSI 对环境变化非常敏感。它不仅能感知人或动物的行走、奔跑等大动作引起的变化,还能捕捉静态环境中人或动物的细微动作,如呼吸、咀嚼等。这些能力使得 CSI 在智能环境监测、人体活动监测、无线定位等应用中具有广泛的应用前景。

2、一些Wi-Fi CSI的有趣例子

网上还有很多关于CSI的有趣例子,这里罗列几个有趣的例子,就当为了提升你对CSI的兴趣吧。

通过CSI检测人的运动姿态

数据传输
  1. CSI检测人的运动姿态

人在检测

  1. 人在检测

 

通过以上的例子,让我们了解到CSI的应用方向还是挺多的,而乐鑫通过对CSI数据进行一系列的处理,最终封装为一个esp-radar库,让我们无需再进行复杂的技术分析,只需要会调用esp-radar相关的APi即可,即可完成检测到有人/无人、运动/静止这些情况。

所以利用ESP-CSI我们本质上是理解相关API的作用和使用流程;

3、ESP-CSI相关API介绍

我并没有看到乐鑫有对这个库的API做比较详细的说明,其作用我都是通过看源码注释理解进行说明,如果有不正确的欢迎留言指出,一起交流;

通过打开esp_radar.h文件,可以看到总共提供了11个API,通过API名称其功能大概也能猜出个7,8成,具体的API如下

#设置Wi-Fi radar配置,相关配置可以通过wifi_radar_config_t结构体查看
esp_err_t esp_radar_set_config(const wifi_radar_config_t *config);
#获取Wi-Fi radar配置
esp_err_t esp_radar_get_config(wifi_radar_config_t *config);
#启动Wi-Fi radar
esp_err_t esp_radar_start(void);
#停止Wi-Fi radar
esp_err_t esp_radar_stop(void);
#初始化Wi-Fi radar
esp_err_t esp_radar_init(void);
#释放Wi-Fi radar 初始化
esp_err_t esp_radar_deinit(void);
#训练Wi-Fi radar 相关配置,主要用于自主校准,校准之后可以获取相关的参数,如有无人的阈值
esp_err_t esp_radar_train_start(void);
#移植训练Wi-Fi radar后相关的配置,一般用于需要重新校准的情况,不然上一次校准的数据可能会影响本次的结果
esp_err_t esp_radar_train_remove(void);
#停止训练,可以通过入参获取训练后的两个结果 wander和jitter这两个阈值
esp_err_t esp_radar_train_stop(float *wander_threshold, float *jitter_threshold);
#获取模组的增益
esp_err_t esp_radar_get_rx_gain(uint8_t* agc_gain, int8_t *fft_gain);
#设置模组的增益
esp_err_t esp_radar_set_rx_gain(uint8_t agc_gain, int8_t fft_gain);
 

4、ESP-Radar编程实现=>人体检测连接到HomeAssistant

通过对esp-radar库api和相关工程流程的理解,接下来就是编程实现文章开头说的,功能: 基于ESP-CSI方案例程connect_rainmaker使用ESP32C3实现人体检测传感器,同时接入到了HomeAssistant平台;

4.1、工程配置;

  1. 检查SDK是否启动CSI:Menuconfig >Components config >Wi-Fi >Wi-Fi CSI (Channel State Information)
  2. 由于我们要添加把检测到的状体有人/无人、运动/静止,上报到HA平台,所以我定义了两个实体,一个是人在实体,一个是移动实体,然后通过MQTT接入到HA,所以我们需要在工程中添加mqtt模块,我们在idf_component.yml添加mqtt,如下图
数据传输

4.2 整体程序主要CSI逻辑

数据传输

image 4

4.3 通过MQTT协议链接到HomeAssistant

我们通过MQTT协议来把监听到的数据上报到HA,具体如何通过MQTT来声明设备的属性服务以及如何上报可以参考我之前写的文章

  • HomeAssistant|【入门篇】基于MQTT的零代码、少配置,设备高效接入方法
  • HomeAssistant|【高级篇】基于MQTT的零代码、少配置,设备高效接入方法
  • HomeAssistant|【实战篇】基于MQTT的零代码、少配置,设备高效接入方法

5、工程效果展示

  1. 通过ESP-RainMkaker APP 把设备配置网络
数据传输
  1. 通过在APP上校准设备,校准设备过程需要确保没有人在房间,整个校准过程60秒
数据传输
  1. 通过通过HomeAssistant显示捕捉到:有人/无人、运动/静止
数据传输
  1. 同时我们通过HA的历史记录也可以更好的观察过去一段时间的检测情况
数据传输
  1. 具体的编程实现可以参考我添加的代码ha_mqtt
数据传输

 

 

我们使用了使用了乐鑫的例程实践,直观感受到了esp32既可以做传统的数据传输模块也可以用来同时做人在和移动检测传感器,最后通过加入自己的代码,实现把检测到的状态也上报到了HA平台;工具安利最后给大家推荐我做的一个无线串口数据采集工具,感兴趣的童鞋可以点击看看一种让你的MCU日志可无线查看和实时记录跟踪的方法

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分