
本帖最后由 点点&木木 于 2019-4-13 10:01 编辑 + Z- C+ w1 J) }2 [. L! U: u 使用Skyhook和STMicro构建WiFi定位系统。 ![]() " W7 |; W0 B& \3 h; Z, p 硬件组件 STMicroelectronics STM32 Nucleo-64板 L152RE × 1 STMicroelectronics X-NUCLEO-IDW01M1 SPWF01SA扩展板 × 1 - A B' o6 A. U$ Q Z% H介绍 通过这4个简单步骤,仅使用WiFi信号可构建下一代物联网定位系统! 组装STMicro Nucleo硬件。 编写可立即使用的固件。 注册免费的Skyhook Wireless帐户。 配置固件设置。 % j4 w9 D/ C0 T$ f: P. k8 ` 使用此系统,您可以在自己的社区或城市周围散步,骑行或驾车来收集结果,并了解基于WiFi的定位如何解决您的物联网资产跟踪挑战。 但在我们进入具体细节之前,让我们来看一些背景材料。 背景 下一代物联网资产需要更小,更便宜和更强大的管理设备。作为这种演变的一部分,渗透城市区域的WiFi信号现在可用于提供当前一代资产管理设备中采用的GPS/ GNSS定位技术的低功率替代方案。随着新兴的LPWAN技术,下一代物联网智能城市设备可以实现开辟一整套新的用例。 9 D+ {( O5 s, s$ V GPS可以降低整体功耗,从而获得更准确的位置。然而,对于许多应用而言,为了实现长期受欢迎的电池寿命,可以接受不太精确的位置,大约10米。 GPS模块可能需要几分钟来获取固定其位置所需的信号和数据。GPS的无线电接收器在整个时间内开启,消耗能量。如果定位频繁,则模块的平均电流消耗可能很大,并且通常导致电池寿命短或更大的电池要求。 与嗅探现有WiFi信号的系统相比。WiFi定位系统通过被动地扫描环境以用于大多数WiFi接入点(AP)发射的周期性信标分组来工作。这些信标可以自由捕获,并提供足够的信息来识别每个AP。利用手中的AP信标数据的集合,IoT设备可以将该信息转发到基于云位置查找服务器,以使用已知AP位置的数据库来执行三角测量计算。WiFi位置查找提供商(如Skyhook Wireless和Google)使用各种技术来构建和维护其AP数据库。该项目将使用Skyhook“ELG”服务。 # C) S, J' X" x; N( W7 m# m 当完成所有操作时,对于与GPS模块(10的mA)大约相同数量级的功耗,WiFi模块可花费一秒钟来执行其扫描。很明显我们为什么要这样做:增加电池寿命,从而产生更小,更紧凑和便宜的设备。 6 }. ?" R6 t W# ~7 a' z( O" ?5 ] 完成项目的步骤 该项目将向您展示如何使用STMicro组件,轻松组装物联网设备:STM32L1MCU和SPWF01 Wifi模块技术,使用预先构建且随时可用的固件加载,收集Wifi AP数据以及支持蜂窝的移动设备设备,实时将结果提交给Skyhook进行位置查找。 " B- P- T. i1 ` 位置查找结果将返回到设备,并以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评估硬件设置 " j8 W; R [5 x 如图所示,将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'。 % K V3 s: R% P! C' G ![]() Skyhook用户门户登录/帐户创建页面 # q) C: l! I/ m8 _! ]; [" D P1 C; g0 A1 @ 进入内部后,从仪表板中选择“新建项目”磁贴,然后选择“精确位置”。 ![]() Skyhook仪表板选择新的精确位置项目 0 O# e+ i3 \ i& Y# t提示输入平台时,选择“ELG”,如图所示。 ![]() Skyhook ELG平台选择 - ^1 ^* @5 l1 ~+ ]9 T5 V- A 选择项目名称,单击以完成设置。您的新项目的仪表板将如下所示。可以将“ELG密钥”和“合作伙伴ID”复制并粘贴到终端仿真器(如Tera Term)中,以便在步骤5中配置固件。现在将其记录在其他位置。 ![]() Skyhook ELG项目页面 2 A" v- s; @( k+ c/ U3 F1 x7 q第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'命令设置如下所示的参数。 9 r3 j! w0 N* m0 F* ? 0000: Contiki> mta set wifi ssid SM-G951U4721 OK 0000: Contiki> mta set wifi passkey kmss242j1 OK 0000: Contiki> mta set wifi sectype 2 7 d& W" l4 E2 H7 B3 `1 E+ G3 b* E. K OK ' x* r9 `5 M3 L0 p$ C) b 0000: Contiki> mta set device secret 1BA3D7F013B321137CCD7DB7CE46A4F4 OK 0000: Contiki> mta set device account_id 78221 % {3 O9 b; b1 N n OK / U& g! k) a- Q, ]8 M5 X: G( q5 G 0000: Contiki> mta save OK % e9 ^0 M$ s1 v4 P, `6 T 0000: Contiki> mta get # W6 ~' y1 ^# h% a' M. d5 H" X7 G Wifi ssid: [SM-G951U4721] ) k) S l6 ?0 N" T( l Wifi sectype: 2 Wifi passkey: [kmss242j1] Device secret: [1BA3D7F013B321137CCD7DB7CE46A4F4] Device account_id: [78221] Device device_id: [] OTA update server: [] 0000: Contiki> reboot Rebooting the node in four seconds... , f i8 f* m* E0 D+ [( o4 n Waiting for Provision ready... ( |& G5 n* W9 l% k: a 0000: Contiki> Starting wifi positioning evaluation platform $ X0 L' ^0 v. w Starting wifi module. - {, B0 d! C- i8 C# w8 V0 s Connecting to AP: SM-G951U4721 Connection result: 0 8 v# C: J9 d$ T Get wifi MAC. Scan process stopped, waiting for start command. 0000: Contiki> skyhook start 0000: Contiki> Starting : p4 n3 t/ d( r- o2 J$ T a scan loop. $ ]$ {/ E5 T- Z --- scan cycle 1 --- $ J0 Z: n9 W, q- E$ D >> Running WiFi Scan (0)... $ Z# t7 \: Y- ?% T >> Got 6 scan results ( _7 d7 ~6 Z) W i7 N( ? >> Running WiFi Scan (1)... * J C' L* R5 ]4 H! V >> Got 5 scan results >> Running WiFi Scan (2)... >> Got 7 scan results Connecting to elg.skyhook.com (0/3) & [- G* m+ q% |- P5 k Result: 0 / b5 q; V8 q7 s$ r$ b4 q2 v Sending location request 90 bytes ( N; D6 I2 D- C Wrote: 90 bytes. 8 }5 t% G7 T4 _4 {. | Socket closed: 0 ! e4 o* {# |. X+ w. R- x Read location response [0] 118 bytes --------------------- latitude: 51.08321099 longitude: -114.15788799 street: " h& ^' G5 i N/ {# g% n address: 49 Street NW Adding location entry 1 (size=1) 一旦设置好,就需要使用'mta save'保存。然后键入“reboot”重新启动设备以开始连接热点。连接后,您可以键入“skyhook start”以开始获取AP信标信息并每10秒请求一次位置查找。注意:您可以使用本地家庭或办公室WiFi的凭据来设置快速演示。它应该返回靠近您所在位置的位置! 固件设计细节 在IoT设备上运行的固件会严重影响位置结果的质量,因为位置查找结果仅与它所基于的数据一样好。 为了在每个采样周期内获得最佳的Wifi AP数据集,固件应用程序将执行3次连续的AP扫描(每次扫描大约需要一秒钟),并填充按RSSI排序的唯一AP SSID列表。 根据最强信号(RSSI)的前5个AP被提交给Skyhook的ELG服务。[更新:随机选择的AP可能会返回比仅选择最佳RSSI更好的结果。] 这是提供下面讨论的实验结果的系统。在提交检测到的AP所需的带宽(空中时间)与位置查找结果质量之间存在折衷。由于TX时间增加,更多AP等同于更高的准确度但更高的电池消耗。对于第一次评估,任意选择“5”的值。 WiFi应用程序将扫描AP并大约每10秒钟与Skyhook的ELG服务器执行位置查找请求。 0 A4 T" {$ E A3 i" _0 ]实验结果 位置查找结果数据将打印到控制台,并保留在内部512元素缓冲区中。缓冲区可以格式化为CSV或KML,并使用'skyhook print<csv |打印到控制台 kml>'命令。KML数据适合直接粘贴到空的“.kml”文件中,然后可以将其加载到Google中。 测试数据是在非常寒冷的城市(加拿大卡尔加里)周围驾驶而产生的。如图所示,Nucleo板在我通过后窗暴露的热身车内。我有一个平板电脑连接到电路板,为它供电,并使用Tera Term捕获kml数据。我的手机设置为移动热点,留在杯架中。 ![]() 汽车WiFi定位测试实验装置 ! W: m% x" ?6 s3 D5 I; P 下面显示的是整体驱动器。起点位于图像的左侧,结束于图像底部区域的“78”点。在无法获得WiFi信号的区域周围有一些空隙,例如在Nose Hill公园和Deerfoot旁边。无论如何,整体路线很明显。驱动器的终点发生在俯瞰市中心的当地道路上。您会注意到一个简短的异常现象,无论出于何种原因,WiFi系统似乎选择了河对岸的几个点(我没有去市中心)。 ![]() WiFi定位试驾在加拿大卡尔加里的部分地区 0 ]. e; X9 A9 K) q$ w" p) |) @布伦特伍德(单户住宅)内的放大区域显示出良好,准确的跟踪,因为我以50公里/小时的速度沿着Northmount Drive行驶。 ![]() 良好的WiFi位置修复在郊区 沿着32nd Ave和Barlow向下的另一个放大区域,然后是16号西侧(1号高速公路),所有道路都是较大的通道。你可以看到我在灯光处停下的地方,因为积分很多,然后随着积分的扩大我加速了。 ![]() 良好的WiFi定位在商业/工业领域 , q! O; K, t8 ^结论 总的来说,我们看到在密集的郊区和商业区的跟踪非常好。沿着公园,更宽的路权和高速公路,系统通常无法进行准确的定位或生产。 大部分位置定位估计在实际位置的50米范围内,在某些情况下,在10米或更短的范围内。在计算这些定位时会有很多东西。设置限制5 AP将对获得的结果产生负面影响,例如,与10 AP的数据相比。还应注意,许多AP产生两个唯一的SSID(例如“访客”),其可以快速阻塞具有冗余信息的扫描列表。需要研究电池使用(播出时间)与获得最佳结果的AP数量之间的权衡。 看到这个系统在较小的道路/密集区域,工业园区,商场内部建筑物以及当然市中心工作,这将是非常有趣的!我会留给你的。 WiFi定位确实表现良好,再加上一些板载处理和少量传感器融合,可以实现低功耗,低成本的物联网资产跟踪解决方案。 注意:如果您希望查看添加到固件的功能或报告问题,请转到GitHub上的WPS固件项目存储库并提交您的请求或问题。 # t$ s; Z) x: e0 | 代码 SkyhookWireless/ 嵌入式客户端---
![]() |