当前位置: 首页 > 知识库问答 >
问题:

使用Java中的串行com从Arduino写入和读取数据

葛越泽
2023-03-14

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

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

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

错误

java.lang.UnsatisfiedLinkError:java.library中没有rxtxSerial。加载gnu.io时抛出的路径。线程“main”java.lang.UnsatisfiedLinkError中的RXTXCommDriver异常:java.library.path中没有rxtxSerial

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

位于Java . lang . runtime . loadlibrary 0(runtime . Java:870)

位于Java . lang . system . loadlibrary(system . Java:1122)

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

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

位于arduino . test . pkg 3 . 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");
    }
}

希望大家找到答案:)

共有1个答案

能旭
2023-03-14

我解决了问题……

我还应该创建'RXTXcomm。“jar”库与名为“rxtxSerial.dll”的“dll”文件进行对话。但是在我添加了“dll”文件后,我得到了一个不同的错误,但这次的问题来自“dll”本身,所以在大量研究之后,我找到了完整的“dll”(http://jlog.org/rxtx-win.html)和教程(https://www.youtube.com/watch?v=43Vdpz1YmdU)它起作用了:)。

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

 类似资料:
  • 问题内容: 我有一个Java程序,必须读取Arduino发送的信息。我从这里获取了Java代码。现在,我不太了解它是如何工作的,但是我尝试对其进行修改,并且得到了以下信息: 我创建一个对象串行COM口,我需要在主程序,然后我使用和当我需要它。 效果很好,Arduino获取数据并将其显示在LCD显示屏中。问题是。程序运行时,它会不断从串行端口读取数据(大约每40毫秒一次),但这并不意味着Arduin

  • 我正在尝试使用shell和java的组合来读取和写入串行端口。目标是能够使用PrintWriter和BufferedReader从连接到串行端口的设备发送和接收命令。我知道这可以用不同的方式来实现(不使用shell),但这不是我想要的。我希望能够使用shell和java实现这一点。 这是我的代码: 有了这段代码,我特别尝试从串行端口读取数据。我使用java运行shell命令来访问串行端口,然后读取

  • 我遇到了一个非常简单的问题。 我正在尝试制作一个Qt GUI应用程序,以从GUI控制我的Arduino(而不是从Arduino IDE的串行监视器控制它)。我能够使用QSerialPort Write()方法成功地向Arduino写入,但我无法从Arduino读取任何内容。从串行端口读取数据的唯一方法是在Qt代码的waitForBytesWrite()中的write()函数之后使用waitForR

  • 我正试图通过(伪)串行连接使用处理从Arduino读取100个传感器数据条目。我使用的加工草图如下: 不幸的是,通常我的data.txt文件中存储的条目不到100个,其中一些条目(大约3-5个)在其中显示换行符。我做错了什么?Arduino IDE的串行监视器未打开!

  • 问题内容: 我正在尝试在某些python代码和arduino代码之间来回“乒乓”信息。我想定期向arduino代码发送两个设定值(例如在分钟上),在arduino上读取它们并更新变量,然后定期(例如在30秒内)将状态信息从arduino发送回python。最终,python将从mySQL数据库发送信息并从中提取信息(后来的开发)。 现在,我无法获得可靠往返的信息。我没有在搜索中找到与此相近的任何内

  • 我有一个Arduino与2个DS18B20温度传感器连接。我对python非常(非常)陌生。我正在寻找一种读取串行输入并将其解析到sqlite数据库的方法,但这已经超出了我的能力。为什么在尝试将串行端口定义为变量时出错? 首先<代码>sys.version 我的当前,只是读取串行连接程序的输入。 我目前无法编译它。我发现这个错误的大多数结果告诉添加,但在这种情况下,它不起作用。 错误。 另外,如果