ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

思路决定出路:ESP32 客流量统计,查找我的手机,车流量统计

2026/9/12 7:58:52 拓冰建站 浏览量
思路决定出路:ESP32 客流量统计,查找我的手机,车流量统计

 看到一个思路:利用手机蓝牙信号的采集判断客流量

用ESP32采集一下蓝牙信号的Mac地址,统计总数,时间段,重复频率等等,基本可以准确的判断一个地方客流量,这比找个人去数人头来的靠谱得多,也不用装个摄像头折腾一个人性物体识别(当然视频识别有更广泛的意义,例如性别和年龄段)。

虽然esp32折腾了很久,但是蓝牙模块很少直接用,注意调库不算用。

出于好奇就折腾了一番,原本是好奇这个蓝牙信号采集到底能收集到那些信息,最后却折腾到另外一个事情上了:蓝牙信号强度。

利用一个ESP32模块去采集另外一个模块的蓝牙信号强度。

这是一米五距离的强度

这是0.5米内的信号强度

当然这里采集双方都是esp32模块,注意信号强度是通过负值来体现的。 -59>-70 也确实体现了信号更强。

这个思路的拓展就是可以通过信号强度来大概判断设备的位置:

举例,我手机不知道放哪里了,又找不到第二个手机拨打一下,于是就可以通过这个设备查找手机蓝牙,然后依照蓝牙设备的信号强度判断手机的距离:

#include <Arduino.h>
#include <TFT_eSPI.h>
#include "xfont.h"
#include <BluetoothSerial.h>
#include <BTScan.h>TFT_eSPI tft;
BluetoothSerial BtSerial;int scanTime = 5; // In secondsvoid setup()
{Serial.begin(115200);Serial.println("Scanning...");tft.begin();tft.setRotation(1);tft.fillScreen(TFT_BLACK);tft.setTextColor(TFT_GREEN);DrawStr2(tft, 10, 50, "开始扫描。。。", TFT_GREEN);// BtSerial.BtSerial.begin("ESP32蓝牙");if (BtSerial.available()){Serial.print("蓝牙已经启动");}}
#define BT_DISCOVER_TIME	4000
void loop()
{BTScanResults *pResults = BtSerial.discover(BT_DISCOVER_TIME);pResults->getCount();int bcnt = pResults->getCount();if(bcnt>0)tft.fillScreen(TFT_BLACK);for (int i = 0; i < bcnt; i++){BTAdvertisedDevice *dev = pResults->getDevice(i);String r = String(dev->getRSSI());String n = String(dev->getName().c_str());// if(n=="乌龙大法师")continue;String display = "设备:" + n + " 强度:" + r;DrawStr2(tft, 2, 2 + i * 18, display, TFT_GREEN);}BtSerial.discoverClear();delay(20);
}

上面这段代码使用了自定义中文字库:

https://github.com/StarCompute/tftziku

扩展的思路就是可以用esp32 来做一个手机防丢设备,只要手机和esp模块信号丢失就可以蜂鸣报警,甚至可以不搜身的方式判断别人是否携带了我的手机。

如果做个APP也可以在手机反向查找esp32和其他蓝牙模块在哪里,触发一定条件后报警。

我靠,在写上面内容的时候,突然一下意识到 这可以做车辆计数啊,压根不用什么视频拍摄后用yolo来分析车辆和进行跟踪,要知道为了统计准确还需要划定区域。而现在你只要折腾一块esp32站到天桥上,等车辆经过采集其蓝牙设备信息就可以统计出车辆流量啊!

人类啊,你真可笑。