Ohhnews

分类导航

$ cd ..
foojay原文

使用Quarkus Pi4J扩展将树莓派开发引入Quarkus

#quarkus#pi4j#树莓派#物联网#java扩展

目录

为树莓派构建应用的 Java 开发者常常面临一个共同挑战:将硬件访问与现代应用框架结合起来。

Pi4J 已成为从 Java 应用访问树莓派 GPIO、I2C、SPI、UART 等接口的标准方式。另一方面,Quarkus 作为最具创新性的 Java 框架之一,提供了快速启动、低内存消耗和开发者友好的体验。

Quarkus Pi4J 扩展将这两个世界结合在一起,使得使用 Quarkus 生态构建支持硬件的应用比以往任何时候都更加容易。

[LOADING...]

项目仓库:

https://github.com/quarkiverse/quarkus-pi4j

为什么结合 Quarkus 和 Pi4J?

现代物联网和边缘计算应用通常不仅需要硬件访问。

开发者通常需要:

  • REST API
  • 依赖注入
  • 配置管理
  • 健康检查
  • 指标与监控
  • 云集成
  • 容器部署

Pi4J 提供了出色的硬件集成,而 Quarkus 则增加了构建生产就绪解决方案所需的应用框架能力。

Quarkus Pi4J 扩展允许开发者自然地使用 Pi4J 构建 Quarkus 应用,将硬件控制与 Quarkus 生态中的所有功能相结合。

[LOADING...]

扩展提供什么功能?

该扩展自动配置和管理 Pi4J Context,这是负责硬件访问和设备生命周期管理的核心组件。

开发者无需手动创建和管理 Pi4J context,只需使用 CDI(上下文与依赖注入)注入即可,这是 Quarkus 的核心特性之一。

这意味着更少的样板代码以及与应用程序架构更加清晰的集成。

主要优势包括:

  • 自动初始化 Pi4J Context
  • CDI 集成
  • 生命周期管理
  • 健康检查支持
  • 原生 Quarkus 开发者体验
  • 与 REST 端点和服务的无缝集成

一个简单的示例

理解扩展价值的最简单方法之一是控制一个 GPIO 引脚。

借助 Quarkus 自动管理的 Pi4J Context,代码变得非常简洁:

@ApplicationScoped
public class LedService {

    @Inject
    Context pi4j;

    public void turnOnLed() {

        var led = pi4j.digitalOutput().create(22);

        led.high();
    }
}

无需重新编译的配置

Quarkus Pi4J 扩展最强大的功能之一是能够使用标准的 Quarkus 配置属性将硬件配置外部化。

在许多树莓派项目中,更改 GPIO 引脚分配通常需要修改源代码、重新构建应用并重新部署。虽然一开始看起来简单,但当应用部署在多个具有不同接线配置的设备上时,这会很快变得不方便。

使用 Quarkus Pi4J 扩展,GPIO 映射可以通过 application properties 配置,允许部署适应不同的硬件设置而无需重新编译。

例如:

pi4j.gpio.led.address=22

然后应用可以直接注入并使用配置好的 GPIO,将硬件细节保留在业务逻辑之外。

这种方法有几个优点:

  • 无需修改源代码即可重新映射硬件
  • 更轻松地在不同树莓派型号之间部署
  • 配置与实现之间更清晰的分离
  • 简化的维护和测试

按编号或名称注入 GPIO

该扩展还引入了一种基于注解的开发者友好编程模型。

开发者无需在应用中手动创建 GPIO 实例,而是可以通过 CDI 直接注入它们。

GPIO 可以通过其物理地址引用:

@Inject
@GPIO(address = 22)
DigitalOutput led;

或者通过配置中定义的逻辑名称引用:

@Inject
@Named("led")
DigitalOutput led;

使用命名 GPIO 在大型项目中尤其有用,因为应用不再依赖实际的引脚分配。如果硬件接线发生变化,只需更新配置,而 Java 代码保持不变。

这种模式与 Quarkus 配置驱动开发的理念完美契合,使树莓派应用更易于在实际环境中维护、测试和部署。

在这个示例中,Pi4J Context 被直接注入到应用组件中。扩展负责初始化和关闭,让开发者完全专注于业务逻辑而非基础设施问题。

树莓派应用的健康检查

该扩展的一个特别有趣的功能是与 Quarkus Health 的集成。

通过利用 SmallRye Health,应用可以通过标准健康端点暴露树莓派环境的操作信息。扩展可以提供有关操作系统、树莓派型号、CPU 架构、Java 运行时和硬件状态的信息。

这对于以下场景尤其有用:

  • 物联网部署
  • 边缘设备
  • 工业自动化
  • 远程监控
  • 设备管理

将操作可见性内置到应用中,使得大规模管理树莓派部署变得更加容易。

构建现代物联网应用

Quarkus 和 Pi4J 的结合为各种项目打开了大门。

示例包括:

  • 智能家居系统
  • 环境监测平台
  • 工业自动化
  • 机器人控制器
  • 数据采集系统
  • 边缘 AI 应用

开发者可以使用 Pi4J 从传感器收集数据,同时暴露 REST API、将数据发送到云服务、存储到数据库,或与 MQTT 和 Kafka 等消息平台集成。

这就创建了一个完整基于 Java 的堆栈,直接在树莓派硬件上运行。

属于 Quarkiverse 生态

该扩展托管在 Quarkiverse 中,这是 Quarkus 扩展的社区生态系统。Quarkiverse 为社区驱动的集成提供了家园,扩展了 Quarkus 的能力,同时受益于共享的基础设施、测试、文档和发布流程。

作为 Quarkiverse 的一部分,该扩展更易于被发现、维护以及集成到现有的 Quarkus 项目中。

[LOADING...]

展望未来

Quarkus Pi4J 扩展代表了朝着让树莓派开发在现代 Java 框架中成为一流体验迈出的重要一步。

结合 Pi4J Drivers 等项目,开发者可以构建不仅访问 GPIO 引脚,还能使用清晰可维护的 API 与传感器、显示器、HAT 以及完整硬件平台(如 Sense HAT)交互的应用。

随着 Java 在物联网、边缘计算、教育和机器人等领域的持续增长,像 Quarkus Pi4J 这样的集成有助于弥合企业级开发实践与物理计算之间的差距。

结论

Quarkus Pi4J 扩展将两个世界的精华结合在一起:Pi4J 强大的硬件访问能力和 Quarkus 现代的云原生开发体验。

无论你是在构建一个简单的树莓派项目、一个物联网网关,还是一个生产级的边缘应用,该扩展都提供了一种干净优雅的方式,将硬件交互集成到你的 Quarkus 应用中。

对于热爱软件和硬件的 Java 开发者来说,这是不断增长的树莓派生态中一个令人兴奋的新成员。

本文最初发布于 foojay