Bulldog:令人惊讶的快速 GPIO 库

还没有读者喜欢这篇文章。
Bulldog: A surprisingly fast GPIO library

Štefan Bunčiak。CC BY-SA 4.0。

像 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 上找到。

标签
User profile image.
红帽公司的 QE 副经理,音乐家,对物联网感兴趣,Thesis Hub 项目负责人。 我也是红帽认证专业人士(Camel 开发、业务流程设计、JBoss 管理)。 更多信息请访问 https://about.me/sbunciak。

2 条评论

以前没听说过这个; 我很想尝试一下。 谢谢这篇文章。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.