arduino 与java通信_java arduino串口通讯

本文介绍了一位开发者在尝试使用Java与Arduino进行串口通信时遇到的问题及解决方案。作者在Linux环境下运行代码,遇到了RXTX版本不匹配和找不到COM端口的错误。为了解决这个问题,作者推荐了一个名为JAVA Arduino Communication Library的库,该库提供了详细的文档和示例代码,简化了Java与Arduino之间的通信过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试建立一个

java-arduino串口通信.到目前为止,我从Arduino页面(

http://playground.arduino.cc/interfacing/java)下载了代码,但是我收到了一个错误.

码:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.OutputStream;

import gnu.io.CommPortIdentifier;

import gnu.io.SerialPort;

import gnu.io.SerialPortEvent;

import gnu.io.SerialPortEventListener;

import java.util.Enumeration;

public class SerialTest implements SerialPortEventListener {

SerialPort serialPort;

/** The port we're normally going to use. */

private static final String PORT_NAMES[] = {

"/dev/tty.usbserial-A9007UX1", // Mac OS X

"/dev/ttyACM0", // Raspberry Pi

"/dev/ttyUSB0", // Linux

"COM3", // Windows

};

/**

* A BufferedReader which will be fed by a InputStreamReader

* converting the bytes into characters

* making the displayed results codepage independent

*/

private BufferedReader input;

/** The output stream to the port */

private OutputStream output;

/** Milliseconds to block while waiting for port open */

private static final int TIME_OUT = 2000;

/** Default bits per second for COM port. */

private static final int DATA_RATE = 9600;

public void initialize() {

// the next line is for Raspberry Pi and

// gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186

System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");

CommPortIdentifier portId = null;

Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

//First, Find an instance of serial port as set in PORT_NAMES.

while (portEnum.hasMoreElements()) {

CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();

for (String portName : PORT_NAMES) {

if (currPortId.getName().equals(portName)) {

portId = currPortId;

break;

}

}

}

if (portId == null) {

System.out.println("Could not find COM port.");

return;

}

try {

// open serial port, and use class name for the appName.

serialPort = (SerialPort) portId.open(this.getClass().getName(),

TIME_OUT);

// set port parameters

serialPort.setSerialPortParams(DATA_RATE,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

// open the streams

input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));

output = serialPort.getOutputStream();

// add event listeners

serialPort.addEventListener(this);

serialPort.notifyOnDataAvailable(true);

} catch (Exception e) {

System.err.println(e.toString());

}

}

/**

* This should be called when you stop using the port.

* This will prevent port locking on platforms like Linux.

*/

public synchronized void close() {

if (serialPort != null) {

serialPort.removeEventListener();

serialPort.close();

}

}

/**

* Handle an event on the serial port. Read the data and print it.

*/

public synchronized void serialEvent(SerialPortEvent oEvent) {

if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {

try {

String inputLine=input.readLine();

System.out.println(inputLine);

} catch (Exception e) {

System.err.println(e.toString());

}

}

// Ignore all the other eventTypes, but you should consider the other ones.

}

public static void main(String[] args) throws Exception {

SerialTest main = new SerialTest();

main.initialize();

Thread t=new Thread() {

public void run() {

//the following line will keep this app alive for 1000 seconds,

//waiting for events to occur and responding to them (printing incoming messages to console).

try {Thread.sleep(1000000);} catch (InterruptedException ie) {}

}

};

t.start();

System.out.println("Started");

}

}

这是我得到的输出:

Stable Library ========================================= Native lib

Version = RXTX-2.2pre2 Java lib Version = RXTX-2.1-7 WARNING: RXTX

Version mismatch Jar version = RXTX-2.1-7 native lib Version =

RXTX-2.2pre2

Could not find COM port.

Started

我正在使用Linux ..我认为端口是正确的.有人可以帮忙吗?

谢谢

最佳答案 在看到问题并与RXTX和JSSC挣扎的同时,我开发了

JAVA Arduino Communication Library.

我的库(希望是)有很好的文档(可以在库的SourceForge Wiki上找到)并且告诉你如何安装和使用它.在库中下载两个JAR并将它们包含在类路径中之后,只需在类定义之前包含以下语句:

import arduino.*;

现在,您需要的只是您方法中的以下代码片段,您很高兴!

String ArduinoPort = ""; //Your port name here

int BAUD_RATE = 9600;

Arduino arduino = new Arduino(ArduinoPort, BAUD_RATE);

arduino.openConnection();

arduino.serialWrite('1'); //serialWrite is an overridden method, allowing both characters and strings.

arduino.serialWrite('1', 20); //its second parameter even allows delays. more details can be found in the documentation.

该库还附带example code,我认为这将有助于加快整个过程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值