arm架构安装rxtx_树莓派JAVA开发串口(RXTX)和GPIO(pi4j)
在RPI上完成了一个用JAVA开发的智能家居小项目,将RPI与单片机结合后可以对一些设备进行简单的控制。在项目中,RPI充当了服务器,它的性能对于这种小数据处理量的场合还是游刃有余的。而谈到控制,最简单的控制方式之一就是采用串行接口通信。因为项目采用JAVA语言进行开发,只能通过JNI调用底层的代码实现。至于JVM,原本需要安装预览版的JRE8。不过最新版本的系统镜像中已经内置了支持硬浮点运算的JRE7,因此JAVA环境不再需要额外安装。
在安装RXTX的时候还是遇到了一些小麻烦,因为目前Raspbian源中的librxtx似乎是在openJDK的基础上编译打包的,直接通过apt-get安装的librxtx无法在JRE7中使用。因此,只能从RXTX项目的网站上下载源码包进行编译安装了。
在撰写本文时,最新的RXTX稳定版本是rxtx 2.1-7r2。首先用wget获取源码包并解压
如果直接MAKE编译安装,可能会遇到以下两种错误:
错误1:/tmp/rxtx-2.1-7r2/./src/I2CImp.c:135: error: ‘UTS_RELEASE’ undeclared (first use in this function)
这是由于version.h中缺少’UTS_RELEASE’信息,需要手工添加。先获取当前系统的版本信息:
然后在/usr/include/linux/version.h中添加
3.10.24+为上一步中获得的版本号
错误2:libtool: install: armv6l-unknown-linux-gnu/librxtxRS485.la’ is not a directory
这个错误会出现在JDK1.6及以上的运行环境下,需要对configure文件进行修改。在configure文件中找到
这一行,在后边添加上当前JDK的版本号即可,如
完成以上两项修改后,就可以正常编译安装了。如果看到 Libraries have been installed in:/usr/lib/jvm/jdk-7-oracle-armhf/jre/lib/arm 则说明RXTX安装已经成功。
配置树莓派GPIO
1) 安装Java
要想控制继电器,我们必须先学会控制树莓派上的GPIO,控制GPIO有很多方式:python、wiringPi、pi4j。前两种方式的介绍网上有很多,所以我们这里介绍pi4j,该项目旨在为全面进入Raspberry Pi的提供本地库和Java之间的桥梁(This project is intended to provide a bridge between the native libraries and Java for full access to the Raspberry Pi.)。要想使用pi4j必须给树莓派安装Java,不过在最新的树莓派系统Raspbian中已经内置了Java(2013-12-20-wheezy-raspbian.zip),如果不知道你的树莓派中有没有Java,你可以使用javac -version 来查看是否有安装了Java。如下图出现了版本信息,就表示安装了Java。如果没有就去下载最新的Raspbian系统吧。
2) 安装Pi4j
打开树莓派的控制台输入下面的命令下载Pi4j文件:
wget http://get.pi4j.com/download/pi4j-0.0.5.deb
(如果你已经安装了Pi4j的其他版本,请先执行如下命令将其卸载掉:sudo dpkg -r pi4j)
下载完成后使用下面的命令安装:
sudo dpkg -i pi4j-0.0.5.deb
安装Pi4j库和示例文件:
/opt/pi4j/lib
/opt/pi4j/examples
到这里就已经安装完成了,如果想要卸载Pi4j执行如下命令:
sudo dpkg -r pi4j
3) Pi4j程序的编译与运行示例
要想编译使用Pi4j的程序必须指明其包的路径比如说我在home/pi/code/java/下编写了一个叫Test.java的程序,应该执行如下命令:
首先进入到程序的目录:
cd code/java
编译:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . Test.java
运行:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' Test
4、控制继电器
在home/pi/code/java/下新建java程序Test.java,功能就是让继电器每隔一秒就切换一下状态:
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;
/**
* 控制树莓派上的GPIO实例
* @author 亓根火柴
*/
public class Test {
public static void main(String[] args) throws InterruptedException {
// 创建一个GPIO控制器
final GpioController gpio = GpioFactory.getInstance();
// 获取1号GPIO针脚并设置高电平状态,对应的是树莓派上的12号针脚,可以参考pi4j提供的图片。
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "LED", PinState.HIGH);
while(true){
//设置高电平
pin.high();
System.out.println("打开继电器");
//睡眠1秒
Thread.sleep(1000);
//设置低电平
pin.low();
System.out.println("关闭继电器");
Thread.sleep(1000);
//切换状态
//pin.toggle();
}
}
}
进入到程序的目录:
cd code/java
编译:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . Test.java
运行:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' Test
5、完整的Java代码 - 原文来自:http://blog.csdn.net/qigenhuochai/article/details/17661845
搭建好Yeelink平台后,我们可以用树莓派访问设备的状态链接以获得设备的当前状态,然后根据得到的状态来控制GPIO。编写程序每2秒获取一次状态,访问时间间隔不建议设置的太短。在home/pi/code/java/下新建java程序ControlLed.java,代码没有什么算法,都是基本的操作。如有不足望高手指点一二。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
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;
/**
* 远程控制树莓派上的GPIO实例
* @author 亓根火柴
*/
public class ControlLed {
GpioController gpio;
GpioPinDigitalOutput pin;
public static void main(String s[]){
//下面的链接就是你在Yeelink的设备的状态URL
String urlStr = "http://api.yeelink.net/v1.0/device/《这
里是你的设备编号》/sensor/《这里是你的传感器编号》/datapoints";
ControlLed cl = new ControlLed();
cl.gpio = GpioFactory.getInstance();
cl.pin = cl.gpio.provisionDigitalOutputPin
(RaspiPin.GPIO_01, "LED", PinState.HIGH);
boolean current = cl.getStatus(urlStr);
cl.setLedStatus(current);
while(true){
try{
if(cl.getStatus(urlStr) != current){
current = cl.getStatus(urlStr);
cl.setLedStatus(current);
}
Thread.sleep(2000);
}catch(Exception e){e.printStackTrace();}
}
}
public boolean getStatus(String urlStr){
URL url;boolean on = false;
try {
url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)
url.openConnection();
conn.setRequestMethod("GET");
InputStream in = conn.getInputStream();
BufferedReader rd = new BufferedReader(new
InputStreamReader(in));
StringBuilder tempStr = new StringBuilder();
while (rd.read() != -1) {
tempStr.append(rd.readLine());
}
//System.out.print("--> 服务器上传感器的信息:");
String status = tempStr.substring
(tempStr.lastIndexOf(":")+1, tempStr.length()-1);
//System.out.println(status);
on = status.equals("1")? true:false;
//System.out.println(on);
return on;
} catch (IOException e) {
e.printStackTrace();
}return on;
}
public void setLedStatus(boolean sta){
if(sta){
pin.low();
//因为我的继电器是低电平有效
System.out.println("--> 更新GPIO的状态: 开");
}else {
pin.high();
System.out.println("--> 更新GPIO的状态: 关");
}
}
}
MBH俱乐部小秘书一直在为大家服务,如果有需要请加小秘书的微信:
arm架构安装rxtx_树莓派JAVA开发串口(RXTX)和GPIO(pi4j)相关推荐
- 浅谈三层架构 通过这个,+Java开发模式经验。终于相通了,动软到底是为什么这么做...
浅谈三层架构 收藏 自己理解的原理 http://www.cnblogs.com/mahaisong/archive/2011/05/12/2044665.html 浅谈三层架构 通过这个,+Jav ...
- arm架构安装rxtx_Parallels推新版本 M1芯片Mac能安装Win 10
搭载苹果自研M1芯片的Mac终于在上个月发布,性能表现也着实让人惊喜,但是由于基于ARM架构,系统的兼容性一直饱受质疑.然而Mac平台知名虚拟化软件Parallels最近宣布了一个令人振奋的好消息,新 ...
- 黑莓如何装java软件_安装BlackBerry的Java开发环境
BlackBerry的开发工具现在是BlackBerry JDE.BlackBerry以前是提供了一个单独的IDE来开发应用程序,而现在提供的是一种Eclipse的插件形式,这也是业界的一个大势所趋. ...
- Java JDK安装教程 Idea Java开发环境配置教程
文章目录 1.JDK和JRE之间的区别与关系: 2. Java SE Development Kit 15 Downloads 3. 安装Java JDK 4. 验证JDK是否安装成功 5. 使用id ...
- arm架构安装虚拟XP
其实这是一个伪命题,arm架构怎么能够安装Windows XP呢?充其量应该算是模拟,没错,答题思路就是在系统上安装虚拟机,用arm虚拟机模拟x86架构安装Windows XP. 其实方法很简单,进入 ...
- 美团架构师深入讲解Java开发!java编程逻辑符号
所以,我认为在你选择之前不妨好好想想什么是Java?你适不适合从事这份工作? Java开发是近20多年来最热门的编程语言,就业市场确实比较大,入门的难度也比C和C++要低,结合各方面来说,你选择Jav ...
- java开发串口步骤
在做过一年多的RXTX操作串口项目有现在把一些平时遇到的问题在这里写写: RXTX是一个开源包,主要是在COMM开源包中做扩张,以前的COMM包只能在WINDOWS下面对串口或并口做操作,扩充后的R ...
- day13,腾讯架构师深入讲解Java开发
抽象方法 :被abstract所修饰的方法 抽象类:被abstract所修饰的类 抽象类的语法格式 抽象方法的语法格式 代码举例 package demo01; //定义抽象类 public abst ...
- 网易架构师深入讲解Java开发!BAT等大厂必问技术面试题
前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询 ...
- String的内存分配与拼接操作,华为架构师深入讲解Java开发
字符串拼接操作 常量与常量的拼接结果在常量池,原理是编译期优化 常量池中不会存在相同内容的变量 只要其中有一个是变量,结果就在堆中.变量拼接的原理是StringBuilder 如果拼接的结果调用int ...
最新文章
- python套接字编程_Python套接字编程(1)——socket模块与套接字编程
- Selenium3自动化测试——10.为百度搜索设置弹窗
- 【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
- oracle for循环_浅谈Oracle的执行计划
- 20162325金立清第三周作业
- MySQL-06:pyMySQL增删改查基本命令笔记
- matlab dtft的函数,DTFT的Matlab矩阵计算的理解
- Android10弹出截屏对话框,Android一个美丽而聪明的警告对话框SweetAlert
- process is bad
- 使用 Redis 实现一个轻量级的搜索引擎,牛逼啊!
- 关于:Google Chrome 官方下载地址
- Win11打印机状态错误怎么解决
- [译] Oracle Database 21c 中的 SQL 集合运算符增强功能(EXCEPT、EXCEPT ALL、MINUS ALL、INTERSECT ALL)
- [转]performSelector延时调用导致的内存泄露
- 商品详情页中特别注意的三件事
- 浓眉大眼的Google Wave怎么也会死?
- 模糊数学Fuzzy Set第2讲——Fuzzy Logic Fuzzy Reasoning
- minui点击分页控件后滚动条置顶
- 左声道,右声道和立体声
- 在app中关闭第三方app