OS X上的Java串行通信

时间:2016-05-19 00:47:42

标签: java macos communication rxtx

我正在尝试创建一个可以通过USB进行串行通信传输和接收的程序。我通过研究我需要的两个文件学到了:一个包含实际库的.jar文件,以及我所了解的librxtxSerial.jnilib,它是一个驱动程序?

从以下网站我了解到,为了开始串行通信过程,我的项目中必须存在这两个。

http://rxtx.qbang.org/wiki/index.php/Download

我在mac上使用Eclipse IDE,似乎无法获得正确的文件配置以使其工作。网上任何地方都没有明确的答案,我希望有人可以为每个人提供帮助。

2 个答案:

答案 0 :(得分:4)

我在Linux和Mac OS / X上使用NeuronRobotics nrjavaserial取得了巨大成功。它将本机库嵌入到jar文件中,然后呈现Java接口。它来自RXTX,因此我希望它不会对您的项目造成巨大变化。

MAJOR EDIT

为了节省你一些时间,这就是我现在正在做的事情。请注意,此时我使用IDE - 这是所有命令行。

import gnu.io.NRSerialPort;
import gnu.io.UnsupportedCommOperationException;

import java.io.DataInputStream;
import java.io.IOException;
import java.util.Arrays;

public class PulseOximeter {
    public static void main( String[] argv ) throws IOException, UnsupportedCommOperationException {
        NRSerialPort serial = new NRSerialPort("/dev/rfcomm0", 115200);
        serial.connect();

        DataInputStream ins = new DataInputStream(serial.getInputStream());

        // read the first 10000 bytes a byte at a time
        for( int i = 0; i < 10000; i++ ) {
            int b = ins.read();
            if( b == -1 ) {
                System.out.println( "got EOF - going to keep trying" );
                continue;
            }
        }

        serial.disconnect();
    }
}

和构建它的maven文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>tld.domainname</groupId>
    <artifactId>bluetooth</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <java.min.version>1.8</java.min.version>
        <maven.min.version>3.2.0</maven.min.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <resource.directory>src/main/resources</resource.directory>
    </properties>
    <prerequisites>
        <maven>${maven.min.version}</maven>
    </prerequisites>
    <dependencies>
        <dependency>
            <groupId>com.neuronrobotics</groupId>
            <artifactId>nrjavaserial</artifactId>
            <version>3.12.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <resources>
            <resource>
                <directory>${resource.directory}</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>${java.min.version}</source>
                    <target>${java.min.version}</target>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    <compilerArgument>-Xlint:all</compilerArgument>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这是Linux版本的代码 - 最大的变化是串口名称(&#34; / dev / rfcomm0&#34;)部分。我没有在这里安装我的Mac,所以我很遗憾我忘记了Mac设备的名称,但它在/ dev中 - 如果我没记错的话,还有蓝牙功能。

所有这些示例都是从串行(USB)端口读取的字节。请注意,Java使它更有趣,因为它们以整数的形式返回,即使它们确实是字节,因此您可以在需要进行任何位操作时获得乐趣。

答案 1 :(得分:1)

几年前,当我设置Java应用程序以接收来自arduino的生物数据时,我遇到了同样的问题。

我与RXTX库进行了摔跤和搏斗,并且无法让它们正常工作(在Linux和Windows上)。这似乎是一个常见问题(Stable alternative to RXTX)。

我的建议:远离RXTX库。

我发现一个非常好用且易于实现的替代库是在https://github.com/scream3r/java-simple-serial-connector找到的 Java简单串行连接器(JSSC)库。
以下是一些示例:http://www.javaprogrammingforums.com/java-se-api-tutorials/5603-jssc-library-easy-work-serial-ports.html

至于在eclipse中设置,你应该能够以下列方式包含jar:

右键单击您的项目 - &gt;配置构建路径 - &gt;添加外部JAR - &gt;选择你下载的jar 现在在包资源管理器中,您应该看到一个“引用的库”项,当展开时,它会显示您添加的jar。

最后,值得您花时间研究Maven或Gradle等工具。它们极大地简化了添加外部库。

干杯!