×

使用Helium开发工具包和Cayenne进行GPS跟踪

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-19

欲望都市

分享资料个

描述

在过去的几个月里,我对 Helium 网络的潜力越来越感到兴奋。如果您不熟悉,Helium 是一个分散的 LoRa 节点网格,用于低功耗、低数据消耗的 IoT 设备,例如用于智能城市监控、制造和资产跟踪的设备。Helium 与其他 LoRa 网络的不同之处在于,激励普通人通过部署自己的物理热点来扩大和验证覆盖范围。作为这笔前期费用的交换,热点所有者通过基于区块链的覆盖率证明算法挖掘出源源不断的“氦代币”。我鼓励您查看开发人员文档以获得更可靠的解释。

虽然我目前正在等待我自己的热点的到来,但 Helium 非常慷慨地向我发送了他们的开发工具包之一修补。该套件包含一个 Arduino Uno-esque Lorawan 开发板和一个传感器防护罩(我期待他们的文档中提供 X-NUCLEO-IKS01A3 环境/运动防护罩,但我最终得到了 X-NUCLEO-GNSS1A1 GPS 防护罩,这很好我)。虽然 Helium 的快速入门指南会逐步指导您设置电路板和 ping 控制台,但有关通过“新”Helium 网络(因为旧版 Atom 模块)传输实际传感器数据的教程似乎供不应求。因此,这个项目与其说是一个开创性的新想法,不如说是对快速入门指南的扩展,希望您可以为自己的开发工具包设置节省一两个小时的挫败感。

从这个意义上说,我将从Helium 快速入门指南离开的地方开始。这假设您已经有一个 Helium 控制台帐户,并且在一个覆盖范围足够大的地方可以定期向网络发送 ping。作为参考,我在匹兹堡,那里的覆盖范围很好,但我惊喜地发现我正在跨河连接到近 5 英里外的一个热点。但是,即使您位于热点较少的半城市地区,我预计未来几个月覆盖范围也会迅速扩大。

1. 硬件设置

在这种情况下,硬件设置非常简单。只需将屏蔽安装在开发板上,连接 LoRa 天线和 GPS 接收器,即可开始使用。

2. 氦气控制台

假设您已在 Helium 控制台中正确设置您的设备,那么您已经在路上了。首先,在 Helium 控制台中,转到“标签”并单击“添加标签”。此时,您唯一需要做的就是提供一个标签名称。单击“创建标签”。

 

pYYBAGOYCeKAaRQ5AACBBaUFxz0169.png
 

接下来,进入“集成”选项卡并选择“myDevices Cayenne”预建集成类型。为您的集成命名并应用您刚刚制作的标签。

 

pYYBAGOYCeqATg_4AADoG_P_6wM013.png
 

旁注:我鼓励您查看其他集成类型;如文档中所述,创建与 RequestBin 端点的“HTTP”集成也非常简单,但 Cayenne 可能是以有意义的方式可视化数据的最快方法。

您需要做的最后一件事是将标签应用到设备上。在“设备”选项卡中选择您的设备,然后在“附加标签”下添加您的标签。标签选项卡是 Helium 将设备连接到相关集成和功能的巧妙方法。现在,您通过该设备发送的任何数据包都会直接路由到 Cayenne(它们会为您处理 HTTP)。

poYBAGOYCeyAR3xiAAEqEblENF0440.png
 

3. Cayenne myDevices

接下来,在cayenne.mydevices.com上创建一个帐户并创建一个应用程序。点击“Add new...”>“Device/Widget”,选择 Lora > Helium 后,搜索 STM32 B-L072Z-LRWAN1。将 DevEUI(来自 Helium 控制台)粘贴到必填字段中。如果需要,请更改名称,然后单击“添加设备”。

pYYBAGOYCfCATTN_AAF5yJSMQfk375.png
 

此时,发送到 Helium 网络的有效负载将被路由到您的 myDevices 仪表板,并根据其传感器类型自动解释。最后,我们只需要更新开发板上的代码。

4. Arduino IDE

不幸的是,Helium 期望传感器数据包以特定的 JSON 格式格式化。您可以从头开始制定此数据包,或者如果您对 C++ 不太熟悉(或想要节省一些工作),您可以导入 Cayenne 低功耗有效负载 (LPP) 库。CayenneLPP 采用一些常见的传感器格式(温度、压力、湿度、GPS 等)并以 myDevices 自动解释的方式生成数据包。换句话说,而不是这样

{    
int32_t lat = latitude * 10000;     
int32_t lon = longitude * 10000;     
int32_t alt = meters * 100;      
buffer[cursor++] = channel;      
buffer[cursor++] = LPP_GPS;       
buffer[cursor++] = lat >> 16;      
buffer[cursor++] = lat >> 8;      
buffer[cursor++] = lat;      
buffer[cursor++] = lon >> 16;      
buffer[cursor++] = lon >> 8;      
buffer[cursor++] = lon;      
buffer[cursor++] = alt >> 16;      
buffer[cursor++] = alt >> 8;     
buffer[cursor++] = alt;      
return cursor; 
}

你可以这样写:

uint8_t addGPS(uint8_t channel, float latitude, float longitude, float meters);

通道输入字段允许您从同一有效载荷内的多个传感器提交数据,如果您使用 X-NUCLEO-IKS01A3 防护罩,这将非常有用。GPS 基于 TeseoLIV3F 库,也必须导入该库。有时需要几秒钟才能获得 GPS 修复(在 gps->init(); 之后),所以我在准备有效载荷之前等待获得修复。不要忘记更改 DevEUI、AppEUI 和 AppKey 字段以匹配您在 Helium 控制台中的内容,就像您在快速入门中所做的那样。上传代码,你应该会在串口监视器中看到如下内容:

 

pYYBAGOYCfOASdxOAAAYK4Sdw1o748.png
 

根据您的连接强度,GPS 数据包(每个 11 个字节)可能需要一段时间才能开始显示在您的控制台中。上行链路响应在数据日志中看起来像蓝色圆圈:

 

poYBAGOYCfaARUsTAABEGLr8qDA195.png
 

向下滚动,事件日志将有一些有用的反馈,例如信噪比(我的非常弱!)和您要连接的热点的名称。

pYYBAGOYCfmAOHhHAACAsXFK0FE102.png
 

最后,返回您的 myDevices 仪表板,您的坐标数据将显示在类似 Google 地图的界面中!

pYYBAGOYCf2AYs_XAAG5iKsp2nI214.png
 

如需完整代码,请查看此Github 存储库希望这可以在您创建自己的基于氦的资产跟踪器的过程中为您省去一些麻烦!

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !