首页 > 技术 > 编程 > Java > Debian 8 x86_64 Java 使用 NRSerialPort 开发串口通信

Debian 8 x86_64 Java 使用 NRSerialPort 开发串口通信

2017-01-12 浏览()

使用方法: https://github.com/NeuronRobotics/nrjavaserial
下载: https://oss.sonatype.org/#nexus-search;gav~com.neuronrobotics~nrjavaserial~~~

测试代码

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.TooManyListenersException;

import gnu.io.NRSerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

public class NRJavaSerialDemo {

    void connect(String port) {
        for (String s : NRSerialPort.getAvailableSerialPorts()) {
            System.out.println("Availible port: " + s);
        }
        int baudRate = 115200;
        NRSerialPort serialPort = new NRSerialPort(port, baudRate);
        serialPort.connect();

        DataInputStream inStream = new DataInputStream(serialPort.getInputStream());
        DataOutputStream outStream = new DataOutputStream(serialPort.getOutputStream());

        new Thread(new SerialWriter(outStream)).start();

        try {
            serialPort.addEventListener(new SerialReader(inStream));
            serialPort.notifyOnDataAvailable(true);
        } catch (TooManyListenersException e1) {
            e1.printStackTrace();
        }

        try {
            String testData = "ATD139xxxxxxxx;\n";
            outStream.write(testData.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static class SerialReader implements SerialPortEventListener {
        private DataInputStream inStream;
        private byte[] buffer = new byte[1024];

        public SerialReader(DataInputStream inStream) {
            this.inStream = inStream;
        }

        public void serialEvent(SerialPortEvent arg0) {
            int data;

            int len = 0;
            try {
                while ((data = inStream.read()) > -1)
                    buffer[len++] = (byte) data;
                System.out.println(new String(buffer, 0, len));
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static class SerialWriter implements Runnable {
        private DataOutputStream outStream;

        public SerialWriter(DataOutputStream outStream) {
            this.outStream = outStream;
        }

        public void run() {
            int c = 0;
            try {
                while ((c = System.in.read()) > -1)
                    this.outStream.write(c);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        try {
            new NRJavaSerialDemo().connect("/dev/ttyUSB0");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

说明
使用 DataInputstream 不要使用 InputStream, InputStream 会接收不到数据
测试代码除使用 NRSerialPort类 代替 RXTX 的 SerialPort类, 其他部分和 RXTX 案例一样
NRSerialPort 不需要 RXTX 的两个 so文件, 可以直接使用
RXTX 案例: http://rxtx.qbang.org/wiki/index.php/Examples

相关推荐

感谢关注 Ithao123Java频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

关键词:

文章点评:


精选专题

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责

Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。Swift采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣。界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向。

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。