博客
关于我
ESP32 应用实践:基于混杂接收模式的人流量检测
阅读量:274 次
发布时间:2019-02-28

本文共 4809 字,大约阅读时间需要 16 分钟。

ESP32 人流量检测系统设计与实现

前言

ESP32 是一款低功耗、高集成度、性能稳定的 Wi-Fi 和蓝牙双模芯片,广泛应用于物联网开发。它采用 2.4 GHz Wi-Fi 加蓝牙双模技术,基于 TSMC 40nm 制程,具备低功耗、高性能和安全可靠的特点。ESP32 芯片集成双核 160 MHz MCU、浮点运算单元 (FPU)、硬件安全加速器、多种传感器以及丰富的外围接口,为物联网应用提供了强大的处理能力和扩展性。其外围器件不超过 10 个,能够实现高效的数据处理、可靠的安全性能以及多协议通信功能。ESP32 还支持混杂模式嗅探空中报文,适用于多种无线监控场景。

目的

本文旨在利用 ESP32 的混杂接收模式,捕获空中数据流,解析并分析无线设备发送的 Probe Request 帧,计算周围区域的人流量。通过 MQTT 协议将数据发送至 OneNet 物联网平台,实现人流量的实时监控和云端数据处理。这一方案不仅能够提供科学的数据分析,还能便捷地实现数据的可视化展示,满足多行业的安保和监控需求。

ESP32 及开发环境搭建

硬件准备

  • ESP32 芯片:选择 ESP32 系列产品,如 ESP32-WROOM-32。
  • 路由器/AP:配置网络,可连接外网。
  • PC:推荐使用 Ubuntu 系统。
  • 串口线:用于程序烧录和调试。
  • OneNet 平台准备

    注册并登录账号,创建产品

    登录 OneNet 平台后,进入开发者中心,创建新的物联网产品。技术参数配置如下:

    • 操作系统:选择“其他”,填写“freertos”。
    • 网络运营商:选择“移动”。
    • 设备接入方式:选择“公开协议”。 -联网方式:选择“Wi-Fi”。
    • 模组选择:选择“其他”。
    • 设备接入协议:选择“MQTT”。

    产品创建完成后,会生成产品 ID 和设备 ID,需在后续程序中填充这些信息。

    创建设备并创建应用

  • 创建设备:在产品详情页,点击“添加设备”,设置鉴权信息,创建完成后获取设备 ID。
  • 创建应用:点击“创建应用”,选择“独立应用”,配置数据流名称,如“Pedestrian-flow”。
  • 应用处理

    在 OneNet 平台上,选择“折线图”类型,设置坐标轴,完成应用框架配置。目前数据流尚未上报,需等待设备端数据上报后选择数据流。

    设备端环境搭建

    ESP-IDF SDK 和 Demo 获取

    git clone https://github.com/espressif/esp-iot-solution
    cd esp-iot-solution
    git submodule update --init --recursive

    本 Demo 位于 esp-iot-solution/examples/check_pedestrian 目录。

    编译器获取

    根据平台选择:

    • Windows:参考 esp-iot-solution/submodule/esp-idf/docs/get-started/windows-setup.rst 搭建编译环境。
    • Linux:参考 esp-iot-solution/submodule/esp-idf/docs/get-started/linux-setup.rst 搭建编译环境。

    Demo 参数修改

    main/include/onenet.h 中填充 OneNet 参数:

    #define ONENET_DEVICE_ID    "*****"
    #define ONENET_PROJECT_ID "*****"
    #define ONENET_AUTH_INFO "*****"
    #define ONENET_DATA_STREAM "******"

    导出路径

    export IDF_PATH=~/somepath/esp-iot-solution/submodule/esp-idf
    export PATH=/opt/xtensa-esp32-elf/bin/:$PATH

    配置菜单

    make menuconfig

    在“Serial flasher config”中设置默认串口;在“Demo Configuration”中设置 Wi-Fi SSID 和密码。

    编译与运行

    make flash monitor

    编译完成后,程序会自动烧录并运行。按 control+] 退出监控界面。

    结果展示

    设备端日志示例

    ... (启动信息)
    I (136) wifi: wifi firmware version: 59e5fab
    I (136) wifi: config NVS flash: enabled
    I (136) wifi: config nano formating: disabled
    I (136) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
    I (146) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
    I (186) wifi: Init dynamic tx buffer num: 32
    I (186) wifi: Init data frame dynamic rx buffer num: 32
    I (186) wifi: Init management frame dynamic rx buffer num: 32
    I (186) wifi: wifi driver task: 3ffbfa0c, prio:23, stack:4096
    I (196) wifi: Init static rx buffer num: 10
    I (196) wifi: Init dynamic rx buffer num: 32
    I (196) wifi: wifi power manager task: 0x3ffc5d8c prio: 21 stack: 2560
    I (206) phy_init: failed to load RF calibration data (0x1102), falling back to full calibration
    I (546) phy: phy_version: 366.0, ba9923d, Oct 31 2017, 18:06:17, 0, 2
    I (546) wifi: mode : sta (24:0a:c4:04:5a:fc)
    I (546) SNIFFER: Connecting to AP...
    I (2236) wifi: n:12 0, o:1 0, ap:255 255, sta:12 0, prof:1
    I (2246) wifi: state: init -> auth (b0)
    I (2246) wifi: state: auth -> assoc (0)
    I (2246) wifi: state: assoc -> run (10)
    I (2256) wifi: connected with BL_841R, channel 12
    I (5086) event: sta ip: 192.168.111.111, mask: 255.255.255.0, gw: 192.168.111.1
    I (5086) SNIFFER: Connected.
    ... (继续人流量检测日志)

    OneNet 平台结果展示

    在 OneNet 平台上,设备在线状态显示正常,点击设备对应的应用,选择数据流“Pedestrian-flow”,即可查看人流量变化曲线图。注意:默认数据上报周期为 10 分钟,需等待 10 分钟后才能看到曲线。

    Demo 中分析与说明

    Probe Request 包分析

    Probe Request 包属于 802.11 无线局域网协议,基本帧结构如下:

    - 标识符
    - 协议版本
    - 输入地址
    - 传输地址
    - 命令字段
    - 信息字段
    - MAC 地址
    - 信号强度
    - 时间戳

    通过 Wireshark 等抓包工具,可以捕获实际的 Probe Request 包,观察其中的信号强度和 MAC 地址等信息。

    Demo 中部分逻辑说明

  • Probe Request 判定

    在程序中首先检查数据包头是否为 Probe Request:

    if (sniffer_payload->header[0] != 0x40) {
    return;
    }
  • MAC 地址选择过滤

    过滤掉来自特定 ESP32 芯片的设备 MAC 地址:

    for (int i = 0; i < 32; ++i) {
    if (!memcmp(sniffer_payload->source_mac, esp_module_mac[i], 3)) {
    return;
    }
    }
  • 重复设备过滤

    剔除同一设备发送的重复 Probe Request:

    for (station_info = g_station_list->next; station_info; station_info = station_info->next) {
    if (!memcmp(station_info->bssid, sniffer_payload->source_mac, sizeof(station_info->bssid))) {
    return;
    }
    }
  • 链表存储设备信息

    创建设备信息链表,存储每个设备的信息:

    if (!station_info) {
    station_info = malloc(sizeof(station_info_t));
    station_info->next = g_station_list->next;
    g_station_list->next = station_info;
    }
  • MQTT 数据发布

    ESP32 发布 MQTT 消息,将人流量数据发送至 OneNet 平台:

    uint16_t val = s_device_info_num / 10;
    char buf[128];
    memset(buf, 0, sizeof(buf));
    sprintf(&buf[3], "{\"%s\":%d}", ONENET_DATA_STREAM, val);
    uint16_t len = strlen(&buf[3]);
    buf[0] = data_type_simple_json_without_time;
    buf[1] = len >> 8;
    buf[2] = len & 0xFF;
    mqtt_publish(client, "$dp", buf, len + 3, 0, 0);
  • 人流量计算

  • 信号强度划分区域

    RSSI 值与距离成反比,通过测量不同区域的 RSSI 值,确定各区域的划分标准。

  • 人流量统计

    以 10 分钟为一个统计周期,统计该周期内所有设备的出现次数,计算人流量。

  • 链表清空与重置

    在 10 分钟后,清空设备链表,开始新的监控周期。

  • 总结

    通过 ESP32 的混杂模式嗅探空中报文,结合 MQTT 协议实现人流量数据的实时监控与云端展示。该方案充分利用 ESP32 的多功能性和低功耗特点,适用于多种无线监控场景。未来可通过优化信号划分算法和多区域监控,提升检测精度和可靠性。

    转载地址:http://kxxd.baihongyu.com/

    你可能感兴趣的文章
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    nginx+php的搭建
    查看>>
    nginx+tomcat+memcached
    查看>>
    nginx+Tomcat性能监控
    查看>>
    nginx+uwsgi+django
    查看>>
    Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
    查看>>
    nginx-vts + prometheus 监控nginx
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    Nginx之二:nginx.conf简单配置(参数详解)
    查看>>
    Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
    查看>>
    Nginx代理初探
    查看>>
    nginx代理地图服务--离线部署地图服务(地图数据篇.4)
    查看>>
    Nginx代理外网映射
    查看>>
    Nginx代理模式下 log-format 获取客户端真实IP
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    Nginx反向代理与正向代理配置
    查看>>
    Nginx反向代理是什么意思?如何配置Nginx反向代理?
    查看>>
    nginx反向代理解决跨域问题,使本地调试更方便
    查看>>
    nginx启动脚本
    查看>>