专栏首页电光石火RXTX for JAVA 串口通信
原创

RXTX for JAVA 串口通信

RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本http://fizzed.com/oss/rxtx-for-java

1.windows下的串口调试

将rxtxParallel.dll、rxtxSerial.dll拷贝到%JAVA_HOME%安装目录bin目录下

将rxtxParallel.dll、rxtxSerial.dll拷贝到%JAVA_HOME%安装目录jre/bin目录下(eclipse开发时调用,减少麻烦)

将RXTXcomm.jar 拷贝到%JAVA_HOME%\jre\lib\ext\RXTXcomm.jar(开发时直接导入)

2.Linux下的串口调试

首先确定Linux处理器型号,对应选择RXTX的Linux版本。

如处理器为i386,则将Linux i686版本中的两个os文件复制到系统%JAVA_HOME%/jre/lib/i386(即JDK目录中的系统文件夹)

将RXTXcomm.jar拷贝到%JAVA_HOME%/jre/lib/ext文件夹

代码不变,即可运行使用。

在实际开发中,由于使用树莓派测试,树莓派使用Raspbian系统(使用uname -a命令可查看系统内核信息)

Linux raspberrypi 3.12.28+ #709 PREEMPT Mon Sep 8 15:28:00 BST 2014 armv6l GNU/Linux

处理器型号armv6l,在下载的RXTX工具包中并无此种系统版本,在实际测试中,所找到的RXTX工具包也都不能使程序运行,均报出系统位数不符。

又找到另一种处理方法,可直接在系统中make编译RXTX源码安装

最新的RXTX稳定版本是rxtx 2.1-7r2。首先用wget获取源码包并解压

cd /tmp
wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7r2.zip
unzip rxtx-2.1-7r2.zip

如果直接MAKE编译安装,可能会遇到以下两种错误:

错误1:/tmp/rxtx-2.1-7r2/./src/I2CImp.c:135: error: ‘UTS_RELEASE’ undeclared (first use in this function)

这是由于version.h中缺少’UTS_RELEASE’信息,需要手工添加。先获取当前系统的版本信息:

uname -r

然后在/usr/include/Linux/version.h中添加

#define UTS_RELEASE "3.10.24+"

3.10.24+为上一步中获得的版本号

错误2:libtool: install: armv6l-unknown-linux-gnu/librxtxRS485.la’ is not a directory

这个错误会出现在JDK1.6及以上的运行环境下,需要对configure文件进行修改。在configure文件中找到

1.2*|1.3*|1.4*|1.5*

这一行,在后边添加上当前JDK的版本号即可,如

1.2*|1.3*|1.4*|1.5*|1.6*|1.7*|1.8*

完成以上两项修改后,就可以正常编译安装了。如果看到 Libraries have been installed in:/usr/lib/jvm/jdk-7-Oracle-armhf/jre/lib/arm 则说明RXTX安装已经成功。

之后执行

./configure
make
make install

注意:可能会有权限不足的情况,需要chmod 777 test.c操作

至此使用RXTX框架的串口编程代码就可以在树莓派使用了。

(这里需要注意的是,在Linux系统中,大部分的串口名称为/dev/ttyS*,但再特殊环境下如本次使用的raspberrypi,使用RXTX方法获得串口集合是不成功的,原因是RXTX本身源码问题,找了好久的原因,终于在RXTX官网上找到了解释:

Please note that on Ubuntu 11.04, the Arduino Uno and possibly others are recognised as /dev/ttyACMxx . The RXTX library only searches through /dev/ttySxx, so you need to make symlinks if your distro does the same, so for example ln -s /dev/ttyACM0 /dev/ttyS00 .

即RXTX本身支持的Linux串口搜索只限制为/dev/ttyS*等,其他名称的并不能支持,而raspberrypi中的串口名称为/dev/ttyACM*,故无法找到系统串口。这种情况下有两种解决方案:

1.修改源码:参考官网故障排除http://rxtx.qbang.org/wiki/index.php/Trouble_shooting(中间部分)

源码RXTXCommDriver.java文件中518行开始,为Linux系统环境下的串口名称查找,添加所需串口名即可(如ttyACM)(此种方法需要重新编译安装)

2.将串口文件进行映射,即使用命令 ln -s /dev/ttyACM0 /dev/ttyS00,即可找到/dev/ttyS00映射串口,也就对应了/dev/ttyACM0实际串口。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RXTX for JAVA 串口通信

    RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本http:...

    似水的流年
  • RXTX for JAVA 串口通信

    RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本http:...

    似水的流年
  • MyBatis之传入参数——parameterType

    在MyBatis的select、insert、update、delete这些元素中都提到了parameterType这个属性。MyBatis现在可以使用的pa...

    似水的流年
  • RXTX for JAVA 串口通信

    RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本http:...

    似水的流年
  • RXTX for JAVA 串口通信

    RXTX 的下载可以到官网或者Fizzed,官网发现并没有64位的支持,但是在Fizzed中找到的2.2版的64,32的windows和Linux版本http:...

    似水的流年
  • mdadm软RAID的删除方法和注意事项 转

    domain0
  • 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键-》点击插入ACTIVAE控件-》选择MicrosoftCommunication...

    徐飞机
  • 布局管理器

     针对我们之前留下的作业来说,当缩放外层Frame窗口的大小时,内层Panel并不会随之改变大小,所以我们需要一个事件监听,让他能够随之改变,但是这样太麻烦了,...

    mathor
  • JavaScript对象编程-第3章

    时间:UTC全球标准时间,也被称为格林威治标准时间,UTC+800指比格林威治标准时间提前8个小时,也是北京时间。

    达达前端
  • 最完整的Explain总结,妈妈再也不担心我的SQL优化了

    在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 fro...

    Java程序猿阿谷

扫码关注云+社区

领取腾讯云代金券