OS 上 Java 中的串行通信 X

Serial communication in Java on OS X

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

从以下网站我了解到,这两个都需要出现在我的项目中才能开始串行通信过程。

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

我在 mac 上使用 Eclipse IDE,但似乎无法获得正确的文件配置来完成这项工作。网上到处都没有明确的答案,我希望有人能帮助大家解决这个问题。

我在 Linux 和 Mac OS/X 上使用 NeuronRobotics nrjavaserial 取得了巨大成功。它将本机库嵌入到 jar 文件中,然后呈现一个 Java 界面。它源自 RXTX,因此我希望它不会对您的项目产生巨大的影响。

主要编辑

为了节省您一些时间,以下是我目前正在做的事情。请注意,我现在 不是 使用 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 版本的代码 - 最大的变化是串口名称(“/dev/rfcomm0”)部分。我这里没有我的 Mac,所以很抱歉,我忘记了 Mac 设备的名称,但它在 /dev 中 - 如果我没记错的话,它与蓝牙有关。

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

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

我反复研究 RXTX 库,但始终无法使它们正常工作(在 Linux 和 Windows 上)。这似乎是一个常见问题 (Stable alternative to RXTX)。

我的建议: 远离 RXTX 库。

我发现另一种效果很好且易于实施的库是 Java 简单串行连接器 (JSSC) 库,位于 https://github.com/scream3r/java-simple-serial-connector
这里有几个例子:http://www.javaprogrammingforums.com/java-se-api-tutorials/5603-jssc-library-easy-work-serial-ports.html


就在 eclipse 中进行设置而言,您应该能够按以下方式包含 jar:

右键单击您的项目 -> 配置构建路径 -> 添加外部 JAR -> select 您下载的 jar。
现在在 package explorer 中你应该看到一个 "Referenced Libraries" 项,展开后显示你添加的 jar。


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

干杯!