【问题标题】:Serial communication in Java on OS XOS X 上 Java 中的串行通信
【发布时间】:2016-05-19 00:47:42
【问题描述】:

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

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

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

我在 Mac 上使用 Eclipse IDE,似乎无法获得正确的文件配置以使其正常工作。网上没有任何明确的答案,我希望有人可以帮助大家解决这个问题。

【问题讨论】:

    标签: java macos communication rxtx


    【解决方案1】:

    我在 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 让这变得更有趣,因为它们以 整数 的形式返回,即使它们是真正的字节,所以你会在需要做的任何位操作中获得一些乐趣。

    【讨论】:

    • 感谢您的指导,我正在按照 mac OSx 的说明进行操作,到目前为止我已经构建了 jar。不过我很困惑,因为在“gradle build”之后,我得到了 3 个 jar:nrjavaserial-3.12.0-javadoc.jar、nrjavaserial-3.12.0-sources.jar 和 nrjavaserial-3.12.0.jar。从这一点开始,我不确定如何继续,我是这类工作的新手,“构建本机代码”就在我的脑海中。您还能提供更多帮助吗?
    • 很抱歉让您经历了这些 - 您可以使用 Maven 下载预构建的 jar - mvnrepository.com/artifact/com.neuronrobotics/nrjavaserial/…。你的构建环境是什么样的?
    • 不用担心,只需几圈即可跳过。通过构建环境,我认为您的意思是 IDE 等,所以我在 mac OSx 10.11.5 El Capitan 上使用 eclipse mars.2。我想我了解如何通过 add Jar 在 eclipse 中创建自定义库,但我不确定是否还有其他需要添加到项目中的内容。
    • 虽然不完全是您想要的,但我在上面的编辑中包含了我到目前为止所做的事情。
    • 非常感谢!感谢您的所有工作,这是一个巨大的帮助。
    【解决方案2】:

    几年前,我在设置 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 -> 选择您下载的 jar。
    现在在包资源管理器中,您应该会看到一个“引用的库”项,展开时会显示您添加的 jar。


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

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      相关资源
      最近更新 更多