linux上JAVA通过串口通信(jSerialComm)

首先,遇事不决先百度。

然后发现百度出来的老哥们都推荐一个叫RXTXComm的上古坑货,本人在aarch64-linux平台被坑的头都大了,期间遇到了找不到串口,读不到串口列表,写串口时flush()函数崩溃,读串口时read()直接崩溃等众多问题,听老哥们的建议换了github上的全新版本之后连设置串口属性都不行了,遂放弃改用jSerialComm。

首先给各位贴上jSerialComm的源码链接 https://github.com/Fazecast/jSerialComm   ,同时所有可以直接用的jar也在release里。各位可以选择直接使用或者自己编译。

当然由于网络的不稳定性,各位很有可能上不了github,这里给大家提供百度网盘的链接(CSDN的积分下载就是s*b):

链接:https://pan.baidu.com/s/1-S1w4wTa7qRGWb3Zmr3jsw 
提取码:rxtx

jSerialComm的使用方法很简单,类名和方法名都没有整活,所以大家按照印象中的串口通信来就行。以下为测试代码。当然测试代码也在网盘的链接里,因为CSDN的登录复制也是s*b。

import com.fazecast.jSerialComm.*;

public class SerialPortManager {
    private SerialPort mSerialPort;
    public SerialPortManager() {
        mSerialPort = null;
    }

    public void init(String portName) {
        mSerialPort = SerialPort.getCommPort(portName);
        mSerialPort.openPort();
        mSerialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);
        mSerialPort.setComPortParameters(38400, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
        mSerialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING | SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
    }

    public void close() {
        if (mSerialPort != null && mSerialPort.isOpen()) {
            mSerialPort.closePort();
        }
    }

    private int write(byte[] data) {
        if (mSerialPort == null || !mSerialPort.isOpen()) {
            return 0;
        }
        return mSerialPort.writeBytes(data, data.length);
    }

    private int read(byte[] data) {
        if (mSerialPort == null || !mSerialPort.isOpen()) {
            return 0;
        }
        return mSerialPort.readBytes(data, data.length);
    }

    public int readWriteTest(String portName)
    {
        init(portName);
        byte[] order = {(byte)0xA5,(byte)0x5A,(byte)0x02,(byte)0x00,(byte)0xFD};
        write(order);
        byte[] data = new byte[100];
	    try{
	    int i=0;
	    while (mSerialPort.bytesAvailable() < 6 && i++ < 100) 
		    Thread.sleep(20);
	    }catch(Exception e){}

        int len = read(data);
        if(data == null)
        {
            close();
            return -1;
        }
	    System.out.println(len);
	    for(int i=0;i<len;i++)
	    {
		    System.out.format("%x ",data[i]);
	    }
        close();
        return ans;
    }
    public static void main(String[] args)
    {
		SerialPortManager sm = new SerialPortManager();	  
        sm.readWriteTest("ttyTHS0");
    }
}

将jar和代码放在同一个目录,测试代码的编译运行命令如下:

javac -cp jSerialComm-2.6.2.jar:. SerialPortManager.java

java -cp jSerialComm-2.6.2.jar:. SerialPortManager

放入项目的话百度吧,我也就弄个demo。。。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值