
本帖最后由 点点&木木 于 2019-4-13 10:01 编辑 - C/ I( e; k% H$ v 使用Skyhook和STMicro构建WiFi定位系统。 ![]() 硬件组件 STMicroelectronics STM32 Nucleo-64板 L152RE × 1 STMicroelectronics X-NUCLEO-IDW01M1 SPWF01SA扩展板 × 1 介绍 通过这4个简单步骤,仅使用WiFi信号可构建下一代物联网定位系统! : {7 e/ l2 K- C+ ]* O( k/ b 组装STMicro Nucleo硬件。 编写可立即使用的固件。 注册免费的Skyhook Wireless帐户。 配置固件设置。 使用此系统,您可以在自己的社区或城市周围散步,骑行或驾车来收集结果,并了解基于WiFi的定位如何解决您的物联网资产跟踪挑战。 但在我们进入具体细节之前,让我们来看一些背景材料。 背景 下一代物联网资产需要更小,更便宜和更强大的管理设备。作为这种演变的一部分,渗透城市区域的WiFi信号现在可用于提供当前一代资产管理设备中采用的GPS/ GNSS定位技术的低功率替代方案。随着新兴的LPWAN技术,下一代物联网智能城市设备可以实现开辟一整套新的用例。 GPS可以降低整体功耗,从而获得更准确的位置。然而,对于许多应用而言,为了实现长期受欢迎的电池寿命,可以接受不太精确的位置,大约10米。 GPS模块可能需要几分钟来获取固定其位置所需的信号和数据。GPS的无线电接收器在整个时间内开启,消耗能量。如果定位频繁,则模块的平均电流消耗可能很大,并且通常导致电池寿命短或更大的电池要求。 与嗅探现有WiFi信号的系统相比。WiFi定位系统通过被动地扫描环境以用于大多数WiFi接入点(AP)发射的周期性信标分组来工作。这些信标可以自由捕获,并提供足够的信息来识别每个AP。利用手中的AP信标数据的集合,IoT设备可以将该信息转发到基于云位置查找服务器,以使用已知AP位置的数据库来执行三角测量计算。WiFi位置查找提供商(如Skyhook Wireless和Google)使用各种技术来构建和维护其AP数据库。该项目将使用Skyhook“ELG”服务。 - j" _- l1 J) ~% ` 当完成所有操作时,对于与GPS模块(10的mA)大约相同数量级的功耗,WiFi模块可花费一秒钟来执行其扫描。很明显我们为什么要这样做:增加电池寿命,从而产生更小,更紧凑和便宜的设备。 - o- R4 [$ L+ f0 `' {# l+ p 完成项目的步骤 该项目将向您展示如何使用STMicro组件,轻松组装物联网设备:STM32L1MCU和SPWF01 Wifi模块技术,使用预先构建且随时可用的固件加载,收集Wifi AP数据以及支持蜂窝的移动设备设备,实时将结果提交给Skyhook进行位置查找。 " |1 M3 _1 @+ m9 ^: l9 R' h 位置查找结果将返回到设备,并以KML或CSV格式提供。可以使用Google Earth等免费工具在地图上轻松绘制KML数据。Skyhook服务是一个简单的注册,免费服务用于评估目的。驾车或骑车到附近,看看只有WiFi才能获得什么样的位置! 您可以使用下面详细讨论的4或5个步骤在您所在的区域执行WiFi定位。 组装硬件。Nucleo-STM32L152RE + X-NUCLEO-ID1M01扩展板,约40美元。 编程下载的固件二进制文件 注册Skyhook Wireless @ my.skyhookwireless.com的免费帐户,并开始一个“ELG”项目示例。 [可选]设置移动设备热点。 使用Skyhook项目的AES密钥,用户ID以及移动设备热点的WiFi凭据(SSID,密钥,安全类型)配置固件。 由于该项目已经使用了WiFi模块,我们也使用它通过移动设备的主机点联系Skyhook。这当然不是真正的物联网设备 - 而是使用LPWAN(我们将在另一个项目中实现)。我们可以在周转期间捕获AP信标数据,然后将数据提交给Skyhook,但我们宁愿实时提交扫描结果(如真实物联网设备)以利用幕后功能像位置平滑和过滤。 [更新:Skyhook的ELG服务目前无国籍。因此,将AP扫描数据批处理到Skyhook将返回相同的结果]。 第1步 - 组装硬件 ![]() WPS评估硬件设置 如图所示,将X-NUCLEO-IDW01M1连接到NUCLEO-L152RE。无需其他配置。使用USB mini电缆连接到PC /笔记本电脑/平板电脑,然后继续执行步骤2。 第2步 - 编程固件 将“WPS固件映像”文件(WPS_EVAL_STM32L1_SPWF01SA_v1.bin)下载到您的PC,可从该项目的附件部分获得。使用STM32-NUCLEO,您可以将此文件拖放到文件系统中显示的“NODE_L152RE”大容量存储设备中。这就是我们在这里需要做的一切。 第3步 - 注册Skyhook Wireless帐户 前往Skyhook的用户门户网站并创建一个帐户。在这里,我们要创建一个新的ELG项目,并记录配置固件所需的两个参数:'ELGKey'和'Partner ID'。 # [3 X3 r$ K& |# E; [ ~+ g ![]() Skyhook用户门户登录/帐户创建页面 " _+ \* J( u# j/ ~+ l& e4 J 进入内部后,从仪表板中选择“新建项目”磁贴,然后选择“精确位置”。 ![]() Skyhook仪表板选择新的精确位置项目 提示输入平台时,选择“ELG”,如图所示。 ![]() Skyhook ELG平台选择 # H. }% |+ f7 X+ B" r) j) X 选择项目名称,单击以完成设置。您的新项目的仪表板将如下所示。可以将“ELG密钥”和“合作伙伴ID”复制并粘贴到终端仿真器(如Tera Term)中,以便在步骤5中配置固件。现在将其记录在其他位置。 ![]() Skyhook ELG项目页面 第4步 - 设置您的移动设备热点 由NUCLEO硬件上运行的固件收集的WiFI AP数据需要转到Skyhook才能获得位置修复。最简单的方法是将现有的移动设备配置为WiFi热点。注意!固件旨在在提交结果时忽略移动设备的SSID。 设置移动设备热点的方法因型号和制造商而异。此项目是使用三星Galaxy S8使用其默认热点设置(启用WPA)执行的。手机生成的默认AP SSID和密钥应该没问题。记录这些步骤5。 步骤5 - 配置固件 确保您掌握了以下信息,可能是在一个打开的文本文件中: Skyhook ELG Key,例如1BA3D7F013B321137CCD7DB7CE46A4F4 Skyook合作伙伴ID,例如78221 热点SSID,例如SM-G951U4721 热点密码,例如kmss242j1 让您的终端程序运行并以115200波特率连接到NUCLEO-L152RE的COM端口。重置电路板,如果之前没有配置任何内容,您应该看到以下内容。 Starting wifi positioning evaluation platform Cannot start: please set wifi settings with 'mta' command then reboot. 按Enter键以查看命令提示符'0000:Contiki>' 使用'mta'命令设置如下所示的参数。 0000: Contiki> mta set wifi passkey kmss242j1 ( `% [" ?& W, ]; @6 x# t p% c, f OK / R5 Y1 v. d0 C% D; O: I 0000: Contiki> mta set wifi sectype 2 OK 9 j- d4 o: _, j& g, A# s 0000: Contiki> mta set device secret 1BA3D7F013B321137CCD7DB7CE46A4F4 $ U# L Z& ?0 s3 T& I3 D OK 0000: Contiki> mta set device account_id 78221 1 O7 s' @! D6 X, B4 { OK 0000: Contiki> mta save OK 0000: Contiki> mta get Wifi ssid: [SM-G951U4721] Wifi sectype: 2 0 T: ]" ]! ]% b( Q" B Wifi passkey: [kmss242j1] 4 S g1 x# O% b/ i/ P6 P Device secret: [1BA3D7F013B321137CCD7DB7CE46A4F4] # t) ?5 K7 Q3 P$ m# l Device account_id: [78221] Device device_id: [] $ P4 r) s# ]' _5 h+ _2 a OTA update server: [] 0000: Contiki> reboot( Z9 e% c5 Q0 U/ @' J0 e" g/ K Rebooting the node in four seconds... Waiting for Provision ready... . w ^; R# a2 t, }$ n) a 0000: Contiki> ' S, U6 v2 j, u }! p$ z; [ Starting wifi positioning evaluation platform ( e/ \( n# }+ c9 ]' L3 { M3 `* @ Starting wifi module. ( {2 }9 }# q# v4 H, h u$ P4 s Connecting to AP: SM-G951U4721 0 T5 o5 [1 X9 N4 o: n Connection result: 0 Get wifi MAC. 9 W8 _- g O H0 o' `8 | Scan process stopped, waiting for start command. . K/ a. n9 }' ^ 0000: Contiki> skyhook start / y; {1 b1 P s. x9 L0 h0 v/ T3 K 0000: Contiki> Starting 1 J t2 w8 E( | p) W& M5 L2 e* k! p scan loop. --- scan cycle 1 --- >> Running WiFi Scan (0)... >> Got 6 scan results % |5 I. W! \6 w4 m g5 p! x" J >> Running WiFi Scan (1)... >> Got 5 scan results $ `# X$ J5 u7 {, K >> Running WiFi Scan (2)... ; t' m. a8 W. I0 w2 w- D0 m >> Got 7 scan results : E. L7 P8 f9 k/ ~) r Connecting to elg.skyhook.com (0/3) Result: 0 - ~* J+ J& r) j: ?: r2 p8 h2 W Sending location request 90 bytes Wrote: 90 bytes. / L4 m1 f# p5 g: d; M R Socket closed: 0 / I; g0 \& V) w& e% o Read location response [0] 118 bytes --------------------- 5 X+ d8 u6 Y5 n1 L) ]! p5 w latitude: 51.08321099 longitude: -114.15788799 7 l# p7 d5 M; G0 ~1 x+ M2 X, H3 q street: address: 49 Street NW ) u I: \8 @0 {2 p: a$ ~3 p Adding location entry 1 (size=1)/ Y7 t" i: _2 b: G1 ^! Z8 | K) O- I7 h+ T3 B4 @! q 一旦设置好,就需要使用'mta save'保存。然后键入“reboot”重新启动设备以开始连接热点。连接后,您可以键入“skyhook start”以开始获取AP信标信息并每10秒请求一次位置查找。注意:您可以使用本地家庭或办公室WiFi的凭据来设置快速演示。它应该返回靠近您所在位置的位置! 6 L% B% c) r! L j 固件设计细节 在IoT设备上运行的固件会严重影响位置结果的质量,因为位置查找结果仅与它所基于的数据一样好。 为了在每个采样周期内获得最佳的Wifi AP数据集,固件应用程序将执行3次连续的AP扫描(每次扫描大约需要一秒钟),并填充按RSSI排序的唯一AP SSID列表。 根据最强信号(RSSI)的前5个AP被提交给Skyhook的ELG服务。[更新:随机选择的AP可能会返回比仅选择最佳RSSI更好的结果。] 这是提供下面讨论的实验结果的系统。在提交检测到的AP所需的带宽(空中时间)与位置查找结果质量之间存在折衷。由于TX时间增加,更多AP等同于更高的准确度但更高的电池消耗。对于第一次评估,任意选择“5”的值。 WiFi应用程序将扫描AP并大约每10秒钟与Skyhook的ELG服务器执行位置查找请求。 . [3 L7 C/ m. p: G! b7 a6 C7 q实验结果 位置查找结果数据将打印到控制台,并保留在内部512元素缓冲区中。缓冲区可以格式化为CSV或KML,并使用'skyhook print<csv |打印到控制台 kml>'命令。KML数据适合直接粘贴到空的“.kml”文件中,然后可以将其加载到Google中。 测试数据是在非常寒冷的城市(加拿大卡尔加里)周围驾驶而产生的。如图所示,Nucleo板在我通过后窗暴露的热身车内。我有一个平板电脑连接到电路板,为它供电,并使用Tera Term捕获kml数据。我的手机设置为移动热点,留在杯架中。 ![]() 汽车WiFi定位测试实验装置 下面显示的是整体驱动器。起点位于图像的左侧,结束于图像底部区域的“78”点。在无法获得WiFi信号的区域周围有一些空隙,例如在Nose Hill公园和Deerfoot旁边。无论如何,整体路线很明显。驱动器的终点发生在俯瞰市中心的当地道路上。您会注意到一个简短的异常现象,无论出于何种原因,WiFi系统似乎选择了河对岸的几个点(我没有去市中心)。 ![]() WiFi定位试驾在加拿大卡尔加里的部分地区 布伦特伍德(单户住宅)内的放大区域显示出良好,准确的跟踪,因为我以50公里/小时的速度沿着Northmount Drive行驶。 ![]() 良好的WiFi位置修复在郊区 + t0 l% K% F, H( P4 H- [" T 沿着32nd Ave和Barlow向下的另一个放大区域,然后是16号西侧(1号高速公路),所有道路都是较大的通道。你可以看到我在灯光处停下的地方,因为积分很多,然后随着积分的扩大我加速了。 ![]() 良好的WiFi定位在商业/工业领域 结论 总的来说,我们看到在密集的郊区和商业区的跟踪非常好。沿着公园,更宽的路权和高速公路,系统通常无法进行准确的定位或生产。 大部分位置定位估计在实际位置的50米范围内,在某些情况下,在10米或更短的范围内。在计算这些定位时会有很多东西。设置限制5 AP将对获得的结果产生负面影响,例如,与10 AP的数据相比。还应注意,许多AP产生两个唯一的SSID(例如“访客”),其可以快速阻塞具有冗余信息的扫描列表。需要研究电池使用(播出时间)与获得最佳结果的AP数量之间的权衡。 看到这个系统在较小的道路/密集区域,工业园区,商场内部建筑物以及当然市中心工作,这将是非常有趣的!我会留给你的。 WiFi定位确实表现良好,再加上一些板载处理和少量传感器融合,可以实现低功耗,低成本的物联网资产跟踪解决方案。 注意:如果您希望查看添加到固件的功能或报告问题,请转到GitHub上的WPS固件项目存储库并提交您的请求或问题。 9 r/ k# ]+ x* ~2 s 代码 SkyhookWireless/ 嵌入式客户端---
![]() |