我在哪里?使用 Apache Camel 收集 GPS 数据

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

物联网系统中使用的现场设备最普遍的要求之一是提供该设备的当前 GPS 位置并将此信息发送到数据中心。在本文中,我将告诉您 Apache Camel 如何将全栈 Linux 微型计算机(如 Raspberry Pi)转变为收集 GPS 坐标的设备。

我应该选择哪个 GPS 装置?

市场上有无数的 GPS 接收器。 BU353 是最便宜和最受欢迎的 GPS 装置之一。它可以通过 USB 端口连接到计算机。如果您正在为您的 IoT 解决方案寻找物美价廉的 GPS 接收器,您绝对应该考虑购买此装置。

下图显示了 BU353 通过 USB 端口连接到 Raspberry Pi 设备。





















您可以选择为您的 Pi 配备外接移动电池,例如 GOODRAM 移动电源 P661 。配备外部电源,您可以将您的移动 GPS 系统带到车内或户外。电池显着简化了解决方案现场部分的测试。








骆驼如何帮助我?

Camel GPS BU353 组件 可用于从该设备读取当前 GPS 信息。使用 Camel GPS BU353,您只需将接收器连接到计算机的 USB 端口并读取 GPS 数据 - 该组件将确保 GPS 守护程序启动、运行并切换到 NMEA 模式 。该组件还负责解析从串行端口读取的 NMEA 数据,因此您可以享受包装到 com.github.camellabs.iot.component.gps.bu353.ClientGpsCoordinates POJO 对象(依次转发到你的骆驼路线)。

给我看代码

为了利用 Camel GPS BU353,您必须将以下依赖项添加到您的 Maven 项目中:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

BU353 组件仅支持消费者端点——这是有意义的,因为 GPS 组件用于读取而非写入 GPS 数据。 BU353 消费者是轮询者,即它定期向 GPS 设备询问当前坐标。 BU353 消费者的 Camel 端点 URI 格式如下:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

其中 标签 可以替换为任何文本标签:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

上面显示的 Camel 路线每 5 秒读取一次当前 GPS 坐标,并将这些保存到 /var/gps-coordinates 目录中。每个 GPS 坐标对都保存在一个专用文件中。上述路线的完整可运行示例显示在下面的代码片段中。我使用 Camel Spring Boot 支持 来启动 Camel 上下文并加载路由定义:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

BU353 消费者接收 com.github.camellabs.iot.component.gps.bu353.ClientGpsCoordinates 实例。 ClientGpsCoordinates 类是 GPS 数据的一个方便的 POJO 包装器:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

ClientGpsCoordinates 类名称以 Client 关键字为前缀,表示这些坐标是在设备上创建的,而不是在 IoT 解决方案的服务器端创建的。

流程经理

BU353 组件使用进程管理器来执行负责启动 GPSD 守护程序和配置 GPS 接收器以在 NMEA 模式下提供 GPS 坐标的 Linux 命令。如果出于某种原因你想更改 Camel 使用的进程管理器的默认实现(即 com.github.camellabs.iot.utils.process.DefaultProcessManager ),你可以在组件级别设置它:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

如果组件上没有设置自定义进程管理器,Camel 会尝试在 注册表 中查找管理器实例。因此,例如对于 Spring 应用程序,您可以将管理器配置为 bean:


 <dependency>
      <groupId>com.github.camel-labs</groupId>
      <artifactId>camel-gps-bu353</artifactId>
      <version>0.1.1</version>
    </dependency>

如果出于某些原因您的 Linux 发行版需要执行一些不寻常的命令以使 GPSD 启动并运行,则自定义进程管理器可能会有用。

下一步是什么?

Camel 的地理能力对您来说有吸引力吗?然后你还应该使用 Camel Geocoder 组件 ,它可以用来轻松地将通过 Camel 收集的 GPS 坐标转换为人类可读的街道地址。也请继续关注 Camel IoT Labs 项目 即将推出的地理围栏功能。