gpio库
Raspberry Pi等计算机最有趣的功能之一就是能够通过GPIO(通用输入/输出)引脚与物理世界进行交互。
GPIO引脚可以捕获来自多个源的输入(包括来自温度,湿度或单轴传感器的数据)并写入输出,从打开LED到控制直流电动机,LCD显示器或D / A转换器,这些都可以。
什么是斗牛犬?
简而言之,Bulldog是一个Java库,使开发人员可以访问GPIO和其他低级IO接口(例如I 2 C,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,谷歌的服务,JDBC,Eclipse的库拉,(S)FTP,等等。
目前,骆驼,牛头犬组件仅支持GPIO和I 2。然而,对于斗牛犬其余支持功能即将到来。
使用斗牛犬
有两种开始使用Bulldog的方法。 首先是将板子实现放入您的Maven依赖项中:
<dependency >
<groupId > io.silverspoon
</groupId >
<artifactId > bulldog-board-${board-name}
</artifactId >
<version > ${version.bulldog}
</version >
</dependency >
为了使事情变得容易,您可以在类路径上添加所有电路板实现。 他们不会发生冲突。 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
(
)
;
}
}
另一种选择是使用斗牛犬骆驼成分。 同样,您需要向Apache Camel项目添加新的Maven依赖项。 它将自动提供所有可能的牛头犬依赖项:
<dependencies >
<dependency >
<groupId > io.silverspoon
</groupId >
<artifactId > camel-bulldog
</artifactId >
<version > ${version.bulldog}
</version >
</dependency >
</dependencies >
之后,您可以创建如下的骆驼路线:
<?xml version = "1.0" encoding = "UTF-8" ?>
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:camel = "http://camel.apache.org/schema/spring"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd" >
<bean id = "properties" class = "org.apache.camel.component.properties.PropertiesComponent" >
<property name = "location" value = "classpath:gpio.properties" />
</bean >
<camelContext trace = "false" xmlns = "http://camel.apache.org/schema/spring" >
<restConfiguration bindingMode = "auto" component = "jetty" port = "8080" />
<rest path = "/rest" >
<post uri = "/led" >
<to uri = "bulldog://gpio?pin={{pin}}" />
</post >
</rest >
</camelContext >
</beans >
上面的骆驼路线公开了一个RESTful接口来控制GPIO引脚。 很快,不是吗?
性能
是什么让我们认为它是如此之快? 我们在库与最流行的GPIO库之一Pi4J之间进行了简短的性能比较。 我们使用USB 示波器来测量Java程序可以在Raspberry Pi 2 B +的GPIO引脚上设置值的频率。
Bulldog可以以1.080 MHz(每秒一百万次)的频率写入GPIO值,而Pi4J约为1kHz(每秒1,000次)。 我们不考虑将其作为正式的性能测试,但差异显而易见。 斗牛犬要快上千倍!
我们用于测试的源代码可以在GitHub上找到 。
gpio库