ubuntu java serial,java – Ubuntu RXTX无法识别usb-serial设备

我安装了Ubuntu 11.10内核3.0.0-12-generic-pae和librxtx-java版本2.2pre2-8.使用下面的代码,它会正确列出我的串行端口.现在你有USB串口转换器正确安装?您需要检查转换器使用的端口.使用下面的示例应用程序,您可以尝试类似java -cp /usr/share/java/RXTXcomm.jar:. GetCommPorts 2

请确保您在/ dev /中的ttySXX或ttyUSBXX文件中拥有正确的权限.

crw-rw---- 1 root dialout 4, 65 2012-02-29 01:08 /dev/ttyS1

crw-rw---- 1 root dialout 4, 66 2012-02-29 01:08 /dev/ttyS2

这些串行端口显示在我的系统中,想要运行应用程序的用户应该在组拨出之下.要添加自己,请使用:

sudo usermod -a -G dialout username

你现在应该在“拨出”组中.

import gnu.io.CommPortIdentifier;

import gnu.io.NoSuchPortException;

import gnu.io.PortInUseException;

import gnu.io.SerialPort;

import gnu.io.SerialPortEvent;

import gnu.io.SerialPortEventListener;

import gnu.io.UnsupportedCommOperationException;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.TooManyListenersException;

public class GetCommPorts

{

static Enumeration portList;

static CommPortIdentifier portId;

static SerialPort serialPort;

static OutputStream outputStream;

static boolean outputBufferEmptyFlag = false;

public static class SerialReader implements SerialPortEventListener

{

private InputStream in;

private byte[] buffer = new byte[1024];

public SerialReader(InputStream in)

{

this.in = in;

}

@Override

/**

* treat \n as end of block.

*/

public void serialEvent(SerialPortEvent ev)

{

int data;

try

{

int len = 0;

while ( (data = in.read()) > -1)

{

if (data == '\n')

{

break;

}

buffer[len++] = (byte) data;

}

System.out.println(new String(buffer, 0, len));

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

System.exit(-1);

}

}

}

public static class SerialWriter implements Runnable

{

OutputStream out;

public SerialWriter(OutputStream out)

{

this.out = out;

}

@Override

public void run()

{

try

{

int c = 0;

while ( (c = System.in.read()) > -1)

{

this.out.write(c);

}

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

System.exit(-1);

}

}

}

private static String getPortTypeName ( int portType )

{

switch ( portType )

{

case CommPortIdentifier.PORT_I2C:

return "I2C";

case CommPortIdentifier.PORT_PARALLEL:

return "Parallel";

case CommPortIdentifier.PORT_RAW:

return "Raw";

case CommPortIdentifier.PORT_RS485:

return "RS485";

case CommPortIdentifier.PORT_SERIAL:

return "Serial";

default:

return "unknown type";

}

}

private static void listPorts()

{

@SuppressWarnings("unchecked")

java.util.Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

while ( portEnum.hasMoreElements() )

{

CommPortIdentifier portIdentifier = portEnum.nextElement();

System.out.println(portIdentifier.getName() + " - " + getPortTypeName(portIdentifier.getPortType()) );

if (portIdentifier.getPortType() == 1)

{

try

{

serialPort = (SerialPort) portIdentifier.open(portIdentifier.getName(), 3000);

}

catch (PortInUseException e)

{

System.err.print("port in use");

continue;

}

System.out.println("Baud is " + serialPort.getBaudRate());

System.out.println("Bits is " + serialPort.getDataBits());

System.out.println("Stop is " + serialPort.getStopBits());

System.out.println("Par is " + serialPort.getParity());

serialPort.close();

}

}

}

private static int doReadWrite(String portName)

{

CommPortIdentifier portIdentifier;

try

{

portIdentifier = CommPortIdentifier.getPortIdentifier(portName);

if (portIdentifier.isCurrentlyOwned())

{

System.err.println("error: port is currently in use");

return -1;

}

SerialPort sport = (SerialPort) portIdentifier.open(portName, 3000);

sport.setSerialPortParams(57600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

InputStream in = sport.getInputStream();

OutputStream out = sport.getOutputStream();

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

sport.addEventListener(new SerialReader(in));

sport.notifyOnDataAvailable(true);

}

catch (NoSuchPortException e)

{

e.printStackTrace();

return -1;

}

catch (PortInUseException e)

{

e.printStackTrace();

return -1;

}

catch (UnsupportedCommOperationException e)

{

e.printStackTrace();

return -1;

}

catch (IOException e)

{

e.printStackTrace();

return -1;

}

catch (TooManyListenersException e)

{

e.printStackTrace();

return -1;

}

return 0;

}

static void showHelp()

{

System.out.println("Usage " + GetCommPorts.class.getName() + "N");

System.out.println("1 read and write from the serial port");

System.out.println("2 list all serial ports in the system");

System.out.println("default show this help ");

}

public static void main(String[] args)

{

int operation = 0;

try

{

if (args.length != 1)

{

showHelp();

return;

}

operation = Integer.parseInt(args[0]);

}

catch (NumberFormatException e)

{

}

switch (operation)

{

case 1:

doReadWrite("/dev/ttyUSB0");

break;

case 2:

listPorts();

break;

default:

showHelp();

}

}

}

此应用程序的输出:

$java -cp /usr/share/java/RXTXcomm.jar:. GetCommPorts 2

/dev/ttyS1 - Serial

Baud is 9600

Bits is 8

Stop is 1

Par is 0

/dev/ttyS0 - Serial

Baud is 9600

Bits is 8

Stop is 1

Par is 0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值