像 Raspberry Pi 这样的计算机最有趣的功能之一是通过 GPIO(通用输入/输出)引脚与物理世界交互的能力。
GPIO 引脚可以从多个来源捕获输入——包括来自温度、湿度或单轴传感器的数据——并写入输出,输出可以是任何东西,从打开 LED 到控制直流电机、LCD 显示器或 D/A 转换器。
什么是 Bulldog?
简而言之,Bulldog 是一个 Java 库,它允许开发人员访问 GPIO 和其他低级 IO 接口,如 I2C、SPI 或 PWM。 使用它,您可以控制 LED、执行器、伺服电机或收集传感器数据。
由于它是一个 Java 库,因此需要在目标设备上运行 JVM。 然而,它也有一个用 C 编写的本机核心(通过 JNI 桥接到 Java)。 它的主要目的是加载内存内容 (/dev/mem)。 使用这种本机方法,我们可以更快地控制 GPIO。
Bulldog 旨在实现平台无关性,这意味着代码可以在多个平台上运行。 它目前支持各种流行的单板计算机,包括 Raspberry Pi、 BeagleBoneBlack 和 CubieBoard。
集成
还有一个用于 Apache Camel 的组件,它封装了 Bulldog 库的功能。 对于那些没有听说过 Apache Camel 的人来说,它是一个开源 Java 框架,专注于使集成更容易,更方便开发人员使用。 通过企业集成模式 (EIP) 的具体实现,开发人员能够将 SBC 与各种传输和 API 集成。 它支持 组件,如 MQTT、HTTP、AMQP、ElasticSearch、Google 服务、JDBC、Eclipse Kura、(S)FTP 等。
目前,camel-bulldog 组件仅支持 GPIO 和 I2C。 然而,对 Bulldog 其余功能的支持即将到来。
使用 Bulldog
有两种方法可以开始使用 Bulldog。 第一种是将板实现放入您的 Maven 依赖项中
io.silverspoon
bulldog-board-${board-name}
${version.bulldog}
为了更轻松,您可以将所有板实现添加到类路径中。 它们不会冲突。 Bulldog 将根据运行代码的平台自动选择正确的实现。 配置依赖项后,您可以编写简单的 Java 代码来控制 GPIO 引脚。 以下代码段绑定到第一个 GPIO 引脚(取决于实际平台是哪个物理引脚)
import io.silverspoon.bulldog.core.gpio.DigitalOutput;
import io.silverspoon.bulldog.core.platform.Board;
import io.silverspoon.bulldog.core.platform.Platform;
import io.silverspoon.bulldog.core.util.BulldogUtil;
public class BulldogLED {
public static void main(String[] args) {
// Detect the board we are running on
Board board = Platform.createBoard();
// Set up a digital output
DigitalOutput output = board.getPins().get(0).as(DigitalOutput.class);
// Blink the LED
output.high();
BulldogUtil.sleepMs(1000);
output.low();
}
}
另一个选项是使用 bulldog-camel 组件。 同样,您需要向 Apache Camel 项目添加新的 Maven 依赖项。 它将自动添加所有可能的 bulldog 依赖项
io.silverspoon
camel-bulldog
${version.bulldog}
完成后,您可以创建如下所示的 Camel 路由
上面的 Camel 路由公开了一个 RESTful 接口来控制 GPIO 引脚。 相当快,不是吗?
性能
是什么让我们认为它如此之快? 我们对我们的库和最流行的 GPIO 库之一 Pi4J 进行了简要的性能比较。 我们使用 USB 示波器来测量 Java 程序在 Raspberry Pi 2 B+ 上设置 GPIO 引脚值的频率。
Bulldog 可以以 1.080 MHz(每秒一百万次)的频率写入 GPIO 值,而 Pi4J 大约为 1kHz(每秒 1,000 次)。 我们不认为这是一个官方的性能测试,但差异很容易看到。 Bulldog 快了一千多倍!
我们用于测试的源代码可以在 GitHub 上找到。
2 条评论