java操控树莓派硬件需要依赖本地库,通过jndi来调用。
环境安装:
1:安装jdk(默认已经安装了)
sudo apt-get install oracle-java8-jdk
2:安装 WiringPi
cd /tmp
wget https://lion.drogon.net/wiringpi-2.50-1.deb
sudo dpkg -i wiringpi-2.50-1.deb
and check with the usual:
gpio -v
gpio readall
3:安装Pi4J库
sudo dpkg -i pi4j-1.2.deb
而后将Pi4J库路径添加入Java的classpath。注意,如果是以类似apt-get方式安装的Java,则无法找到CLASSPATH配置,需要自己在profile文件里加入配置,配置参考如下:
/etc/profile
PI4JLIBPATH=find /opt/pi4j/lib/ -name *.jar|xargs|sed "s/ /:/g"
export PI4JLIBPATH
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/
export JRE_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
:
JAVA_HOME/lib:
JAVAHOME/lib:JRE_HOME/lib:
P
I
4
J
L
I
B
P
A
T
H
:
PI4JLIBPATH:
PI4JLIBPATH:CLASSPATH
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:JRE_HOME/bin:$PATH
4:将安装后的jar包拷贝到windows本地
:/opt/pi4j/lib $
pi4j-core.jar pi4j-device.jar pi4j-gpio-extension.jar
5:创建Eclipse工程,引入上面jar包
6:代码
package com.hareware.gpio;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
public class LEDBlink {
//获取全局Gpio 引脚控制器对象
public static final GpioController gpio = GpioFactory.getInstance();
public static void main(String [] rags) throws InterruptedException
{
//定义编号为0的引脚为数字输出引脚,初始化为低电平
GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_00, "" ,PinState.LOW);
while(true)
{
myLed.high();
Thread.sleep(500);
myLed.low();
Thread.sleep(500);
}
}
}
7:上传代码,编译
javac -classpath .:classes:/opt/pi4j/lib/’*’ -encoding gbk -d . LEDBlink.java
javac -encoding utf8 -classpath .:classes:/opt/pi4j/lib/’’ *
编译后,文件目录:
/home/pi/java/com/hareware/gpio
执行:
pi@luo-raspberrypi:~/java $ pwd
/home/pi/java
sudo java -classpath .:classes:/opt/pi4j/lib/’’ com.hareware.gpio.LEDBlink
出现的错误:
1:LEDBlink.java:11: 错误: 编码UTF8的不可映射字符
原因:默认gbk编码:
2:错误: 找不到或无法加载主类
第一种错误原因:
首先要先查看jdk的配置文件是否正确
第二种错误原因:
查看自己的Java程序是在包名里面
如有,去掉包名,再次编译、运行即可
原理说明:
Java程序运行class文件,对于有包名的类,Java把包名当做文件夹处理,“包名+类名”相当于“文件夹目录+类名”来寻找类。
第三种错误原因:
假如 编译 生成first.class 文件
运行 ./java first 输出结果 或者 java first 也可以
如果源文件没有写在java的bin目录里,那么要把first.class文件复制到bin目录下才能运行,否则会报错找不到主类。
也可以在windows下生成可执行jar包,来执行
执行:
pi@luo-raspberrypi:~/java $ java -jar LEDBlink.jar
参考文章:
https://www.cnblogs.com/lulipro/p/5992172.html
http://www.cnblogs.com/lulipro/p/5513862.html
https://blog.csdn.net/just3do/article/details/68957618
https://blog.csdn.net/OOC_ZC/article/details/78460842
http://codepub.cn/2016/05/11/The-correct-way-to-use-java-jar-run-an-executable-jar-package-under-Linux/
https://blog.csdn.net/KevinC007/article/details/78670732