我想为 Raspberry Pi 的 GPIO 编写一个OSGI Bundle(Eclipse SmartHome 绑定)。
对于 GPIO,我需要包含 Pi4J 库。我将它们添加到我的项目文件夹中的 lib 文件夹中,并将 pi4j-core.jar 添加到我的构建路径中。
这是我的代码:
/**
* Copyright (c) 2014 openHAB UG (haftungsbeschraenkt) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.statusgpio.handler;
import static org.openhab.binding.statusgpio.StatusGPIOBindingConstants.*;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.eclipse.smarthome.core.library.types.StringType;
import org.eclipse.smarthome.core.thing.ChannelUID;
import org.eclipse.smarthome.core.thing.Thing;
import org.eclipse.smarthome.core.thing.binding.BaseThingHandler;
import org.eclipse.smarthome.core.types.Command;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
/**
* The {@link StatusGPIOHandler} is responsible for handling commands, which are
* sent to one of the channels.
*
* @author Arjuna W. - Initial contribution
*/
public class StatusGPIOHandler extends BaseThingHandler {
ScheduledFuture<?> refreshJob;
public StatusGPIOHandler(Thing thing) {
super(thing);
}
@Override
public void initialize() {
// TODO Auto-generated method stub
super.initialize();
startAutomaticRefresh();
}
@Override
public void handleCommand(ChannelUID channelUID, Command command) {
// TODO Auto-generated method stub
// do nothing ;)
}
private void startAutomaticRefresh() {
final GpioController gpio = GpioFactory.getInstance();
// provision gpio pin #02 as an input pin with its internal pull down
// resistor enabled
final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(
RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN);
// create and register gpio pin listener
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(
GpioPinDigitalStateChangeEvent event) {
// display pin state on console
updateState(new ChannelUID(getThing().getUID(), CHANNEL_LOADING_STATE), new StringType(event.getState().toString()));
}
});
try {
for (;;) {
Thread.sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
类没有问题找到Pi4J导入导出到jar也没有问题。只有当我直接在 Eclipse OpenHab_runtime 中运行它时,我才会收到错误:
当我在 Raspberry Pi(和我的 Win PC)上启动 OSGI Bundle 时,我收到以下消息:
开始 92
gogo:BundleException:无法解析模块:org.openhab.binding.statusgpio [92]
未解决的要求:导入包:com.pi4j.io.gpio
我想我必须对 Bundle 做更多的事情才能让 OSGI 找到 Pi4J 库???
感谢帮助。