在 Java 中使用串口 com 从 Arduino 写入和读取数据

Write and read data from Arduino using serial com in Java

我正在尝试将数据写入我的 Arduino Uno 并从中接收日期。

我在 Windows 8.1 上使用 NetBeans,为了做到这一点,我使用了库 "RXTXcomm.jar"。

我的代码是这样的,我的 Arduino 在 COM3 上,它在第 25 行和第 80 行抛出错误:

错误

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)

at java.lang.Runtime.loadLibrary0(Runtime.java:870)

at java.lang.System.loadLibrary(System.java:1122)

at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:83)

at arduino.test.pkg3.ArduinoTest3.initialize(ArduinoTest3.java:25)

at arduino.test.pkg3.ArduinoTest3.main(ArduinoTest3.java:80)

代码:

01: package arduino.test.pkg3;
02: 
03: import java.io.BufferedReader;
04: import java.io.InputStreamReader;
05: import java.io.OutputStream;
06: import gnu.io.CommPortIdentifier; 
07: import gnu.io.SerialPort;
08: import gnu.io.SerialPortEvent; 
09: import gnu.io.SerialPortEventListener; 
10: import java.util.Enumeration;
11: 
12: public class ArduinoTest3 implements SerialPortEventListener {
13: 
14:     SerialPort serialPort;
15:     private static final String PORT_NAMES[] = {"COM3"};
16:     private BufferedReader input;
17:     private OutputStream output;
18:     private static final int TIME_OUT = 2000;
19:     private static final int DATA_RATE = 9600;
20: 
21:     public void initialize(){
22:         System.setProperty("gnu.io.rxtx.SerialPorts", "COM3");
23: 
24:         CommPortIdentifier portId = null;
25:         Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

        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{
            serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);

            serialPort.setSerialPortParams(DATA_RATE,
            SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1,
            SerialPort.PARITY_NONE);

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

            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        }catch(Exception e){
            System.err.println(e.toString());
        }
    }

    public synchronized void close(){
        if(serialPort != null){
            serialPort.removeEventListener();
            serialPort.close();
        }
    }

    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());
            }
        }
    }

    public static void main(String[] args) throws Exception{
        ArduinoTest3 main = new ArduinoTest3();
80 :        main.initialize();
        Thread t=new Thread(){
            public void run(){
                try{Thread.sleep(1000000);}catch(InterruptedException ie) {}
            }
        };
        t.start();
        System.out.println("Started");
    }
}

希望你们能找到答案:)

我解决了这个问题......

我还应该让“RXTXcomm.jar”库与名为“rxtxSerial.dll[的'dll'文件对话=20=]'。 但是在我添加那个 'dll' 文件之后,我得到了一个不同的错误,但是这次的问题是来自 'dll' 文件本身,所以经过大量研究,我找到了完整的 'dll' 文件 (http://jlog.org/rxtx-win.html) and the tutorial on (https://www.youtube.com/watch?v=43Vdpz1YmdU) 并且有效 :) .

希望有人会发现我的经验有用。