基于单片机和WiFi探针的公交客流检测系统设计
2020-10-18黄炎禹陈沁仪穆文豪胡凡域
孙 涛, 黄炎禹, 户 国, 陈沁仪, 穆文豪, 胡凡域
(上海工程技术大学 城市轨道交通学院, 上海 201620)
当前,城市公共交通大客流这一特点对公交系统的合理规划、实时调度、智能管理、数据统计等提出新的需求.基于人工统计、图像识别、光电门、红外感应自动过程控制(APC)的统计方式在不同程度上存在不精确、建设成本高、使用局限等问题,难以满足当前对客流统计的高层次要求.在公交客流统计方面,仅上车的一次购票并不能记录各个区间的完整客流数据,因此需要一种更符合时代发展且高效、低成本的客流统计方式[1].
WiFi探针是用WiFi传感器获取空气中无线电波,统计分析周围WiFi设备,继而得到用户手机MAC地址的技术.WiFi探针具有体积小、成本低等优势,国内外学者对WiFi探针的应用研究多集中于利用WiFi探针探测公共场所人流量并结合分析与算法估计用户行为,如通过对WiFi信道状态信息分析区分消费者观望促销或径直购买等不同行为.探针探测的数据较为丰富,使用者可充分挖掘场景信息,利用WiFi扫描列表与移动图模型得到用户对时间与空间的聚类,从不同维度构建K-means算法模型[2].
本文基于WiFi探针与单片机开发客流检测系统,利用乘客手机终端的无线网接收装置的独立设备编号(MAC地址)独立性,并结合相应算法实现对公交车上下客数的精确测量.
1 系统设计
本系统硬件部分主要基于STM32单片机开发板,配合GPS模块、TZ-DT06 WiFi探针模块、串口通信模块使用.系统借助GPS模块对GPS数据协议高效解析,进而确定车辆位置,使用串口通信配合WiFi探针模块实时解读手机MAC帧,将解析的MAC地址进行对比去重等处理,STM32单片机将处理完的客流数据通过串口通信模块传输至上位机与LDC12864显示器,从而得到各线路实时客流数据[2].系统各模块工作示意图如图1所示.
图1 系统各模块工作示意图Fig.1 Schematic diagram of each module of system
1.1 STM32F103单片机
STM32F103是意法半导体推出的基于ARM公司的Cortex-M3架构的32位处理器,具有丰富的外围接口和中断响应系统,可实现实时控制[3].
1.2 GPS模块
系统采用U-BLOX NEO-6M模组,体积小巧、性能优异,可通过串口进行参数设置,并保存在EEPROM,使用方便.默认使用波特率为9 600 bit/s.NMEA 0183是目前GPS导航设备统一的RTCM标准协议[3].该系统使用GPS模块的TX和RX引脚与STM32单片机通信,通过nmealib库解码可得相应的坐标和速度信息[4].
1.3 探针模块
系统主要调用parseMACBuffer解析函数对MAC地址进行解析.编写WiFi探针驱动函数,提取约50个字符串的MAC地址并检验其正确性,去重与存储地址后转换为相应的客流量[5].
1.4 显示和输出模块
LCD12864是一种具有4位/8位并行、2线或3线串行多种接口方式的液晶显示屏,其内部含有点阵图形液晶显示模块,通过串口与单片机进行数据传送达到实时显示,硬件电路结构和显示程序都较为简洁.本系统使用LCD12864液晶显示屏输出两站间车内乘客数和各站上下客数,通过多级菜单栏显示不同界面,并设计按钮开关进行控制[6].
2 算法核心
2.1 探针算法与数据结构
IEEE 802.11是当前无线局域网通用标准,定义了媒体访问控制层(MAC 层)和物理层[5],MAC层负责无线媒介的管理与控制,数据帧格式如图2所示.本系统使用TZ-DT06模块抓取Frame源MAC地址、目的MAC地址、Frame大类、Frame小类、信道、信号强度等数据,源地址必须为单播地址,目的地址为MAC服务数据单元(MSDU)将要送达的地址,可为单播地址或组地址.该探针模块可计算距离,由于RSSI 信号和距离有一定关系,需要根据环境设置不同参数.
图2 802.11 MAC层数据帧格式Fig.2 802.11 MAC layer data frame format
数据链路层是靠近底层的通信协议,使用Bit表示信息,其最基本的服务是将源自网络层来的数据传输到相邻节点的目标网络层[5].
系统在抓取乘客MAC地址后通过探针模块TXD引脚与外部MCU的RXD引脚通信,经过串口接收与过滤,使用parseMACBuffer函数对信号较弱、从路由器发送到终端、伪MAC地址等数据进行清洗,其余MAC地址进入缓存状态,产生探针数据表,该数据表可实时更新,具体采集到的数据格式如图3所示.
图3 系统对MAC地址的具体采集内容Fig.3 Specific collection content of MAC address by system
程序代码为
void parseMACBuffer(void)
{
uint8_t i;
for(i=0;i { if(MAC_GetData[i].MAC_isGetData==true && MAC_GetData[i].MAC_isUsefull==false) { ∥数据清洗工作:信号太弱删除,从路由器发到终端的删除,伪mac地址删除,只接受数据帧memcpy(MAC_GetData[i].MAC_1,MAC_GetData[i].MAC_Buffer,MAC_1_Buffer_Length); *(MAC_GetData[i].MAC_1+MAC_1_Buffer_Length) = ’ ’;∥在末位加一个空 MAC_GetData[i].MAC_isUsefull=true;∥解析完后置位 if(test_jeixi_xx) printf("
缓存成功解析:提取MAC<%s>放进缓存[%d]
",MAC_GetData[i].MAC_1,i);∥成功解析 } } } 本系统使用的WiFi探针为TZ-DT06模块,若乘客手机中WiFi选项没有关闭,WiFi探针就能探测到乘客手机发射出的信号进而做客流定位. 根据模块数据手册可知,探测范围半径在30 m以内时,使用该模块探测效果较好,在空旷地点,探测范围可延伸至50 m.在系统应用中,查阅资料得到上海公交车车长一般大于6 m,小于8 m,车宽小于2.2 m,因此系统选用的WiFi探针模块的探测范围可满足实际需求. MAC地址的采集过程需要一定的时间,WiFi共有13个信道,由于手机信号分布于不同的信道,需要探针遍历所有信道,每个信道扫描时间约为250 ms,经过计算可得一次遍历所有信道的时间为3 s.公交车在市区中行驶速度不超过30 km/h,可得在公交车最高时速下进行两次连续探测的距离间隔为25 m,该距离远小于系统设定的100 m探测间隔,可避免将路人数据记录存储的错误. 编写parseMACBuffer函数对MAC地址数据进行删选,实际探测中发现信号强度为-90以上,不属于车内乘客的MAC地址信号,因此需要对伪MAC地址、MAC信号强度-90以上的数据进行删除,系统只接受探测数据帧为有效数据. 模块板载的ESP-M2天线支持标准IEEE802.11 b/g/n/e/i协议,该模块的频率范围为2.4~2.5 GHz,接收灵敏度较高,核心处理器为ESP8285,基本满足本系统设计需求. WiFi探针对MAC地址探测与数据采集是系统的核心部分,主要函数有MAC地址字符串对比、MAC地址字符串校验、数据存取等模块.系统通过GPS模块实现各站点的精确定位,以便WiFi探针准确探测MAC地址,采集的数据经过比对与校验函数处理后,即可输出每位乘客的上车站点与下车站点.算法流程如图4所示. 图4 检测系统工作流程示意图Fig.4 Schematic diagram of work flow for detection system 每隔一定距离,若重复探测到同一MAC地址,则相应的累加器工作,相应的可能值+1.若在两站点间同一乘客MAC地址探测可能值大于4,则认为该乘客在车上;若探测值少于2,则认为该乘客已下车,则相应的缓存会被清除以保证数据的可信度.本系统推算每位乘客的MAC地址出现与消失的站点程序代码为 if(find_number!=MAC_SaveData_count)∥说明找到重复的位置,则累加器工作{ MAC_SaveData[find_number].Appear_count++; ∥出现次数+1 if(MAC_SaveData[find_number].Appear_count==99)MAC_SaveData[find_number].Appear_count=98; MAC_GetData[useful_number].MAC_isGetData=false; MAC_GetData[useful_number].MAC_isUsefull=false;∥清除该缓存,之后就不会被再次使用 MAC_SaveData[find_number].Last= Station_Num;∥更新该地址最后出现的地方if(test_many_times_save) printf("
发现重复地址:累加器工作else if(empty_number != MAC_SaveData_count)∥说明无重复帧有空挡,则放入空挡汇总 由于搜索范围大于乘车区域,因此可通过单片机与探针对信息进行有效收集、处理以及筛选,筛选出具有价值的信息将被传输到计算机呈现给用户[7],算法具体实现如图5所示.假设有站点1、站点2、站点3,站点1至站点2之间设为路程点1,站点2至站点3之间设为路程点2,路程点中每隔100 m获取手机MAC地址并进行对比. 图5 公交车客流量检测示意图Fig.5 Schematic diagram of bus passenger flow detection 系统可获取的原始数据有公交车实时位置信息(GPS传输)、公交车线路各站点上下客数等.通过数据处理输出OD矩阵可用于观测各站点的拥挤程度,作为公交公司在各时段增减班次等调整的基础数据,实现公交资源利用的最大化[9]. 交通起止点调查又称OD交通量调查,OD交通量是指起终点间的交通出行量[8].本检测系统借助交通领域较为通用的OD矩阵进行数据可视化. 在实际探测时,来回探测同一条公交线数据后发现,单向线路需要区分起始点与终止点数据.每次检测前,系统自动判断每次检测的MAC地址是否与之前存储的MAC地址一致,若不一致则认为是新的MAC地址,若符合判断乘客上车的标准,则向存储加入新MAC地址.当公交车靠站时,系统自动记录客流并通过串口收发至宿主机,如图6所示.由图可见,探针数据表、串口收发的数据为某乘客在站点1上车,在站点2下车,将其记录到客流,汇总检测数据得到客流OD矩阵见表1. 图6 实际传输的数据Fig.6 Actual data transferred 表1 站间到发客流表(OD矩阵)Table 1 Station to passenger flow table(OD matrix) 汇总OD矩阵得到各站点上下客数,对行数据求和得到各站点上车乘客数,对列数据求和得到各站点下车乘客数. 为提升乘客乘车体验,增加人车交互,在系统LCD12864显示屏上设置多级菜单栏用于增加系统界面的可视化[6],乘客通过显示屏获得的信息主要有客流数据、当前车辆位置与当前时间信息,菜单栏设计如图7所示.系统通过控制GPIO端口的高低电平使LED闪烁,可知MCU的工作状态,系统收集客流数据的同时将数据反馈回乘客,提升乘客的乘车体验. 图7 多级菜单栏设计Fig.7 Design of multi-level menu bar 本文通过采用WiFi探针探测手机MAC地址的方式识别乘客,对公交车到站时各站点上下客数以及各时刻车厢内人数变化情况进行监控.该系统基于理想情况探测数据,但现实路况复杂,可能将附近车辆乘客的MAC地址存储到客流表,且系统使用WiFi探针技术,易忽略老人与小孩等特殊人群,造成一定的误差,后序将继续完善系统,开发新模块,通过多重检测实现精准探测客流量.2.2 WiFi探针实际应用
2.3 算法设计
2.4 算法实现
3 数据统计处理与可视化
3.1 数据统计处理
3.2 数据可视化
4 结 语