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

我需要帮助写/读/从串行端口使用ftdi usb到串行电缆

程和蔼
2023-03-14

我想先写串口。为此,我使用usb到串行ftdi电缆。电缆连接到COM4。运行64位Windows 7

a) 使用RXTX项目。http://rxtx.qbang.org/wiki/index.php/Main_Page

为了使用RXTX,我试着按照这些说明去做

  1. 下载rxtx-2.1-7-bins-r2。zip
  2. 解压缩它
  3. 复制RXTX序列。dll转换为c:\program files\java\jre version\bin dir
  4. 复制RXTXcomm。jar转换成c:\program files\java\jre version\lib\ext dir
  5. 更改“javax”中的所有引用。通信到gnu。io'
  6. 重新编译

这是我的代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package twowayserialcomm;

/**
 *
 * @author HP
 */

import java.io.InputStream;
import java.io.OutputStream;
import gnu.io.SerialPort;
import gnu.io.CommPortIdentifier;
import gnu.io.CommPort;

public class TwoWaySerialComm {

    /**
     * @param args the command line arguments
     * 
     */
    void connect( String portName ) throws Exception {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier( portName );

        if( portIdentifier.isCurrentlyOwned() ) {
            System.out.println( "Error: Port is currently in use" );
        } else {
            int timeout = 10000;
            CommPort commPort = portIdentifier.open( this.getClass().getName(), timeout );

            if( commPort instanceof SerialPort ) {
                SerialPort serialPort = ( SerialPort )commPort;
                serialPort.setSerialPortParams( 9600,
                                    SerialPort.DATABITS_8,
                                    SerialPort.STOPBITS_1,
                                    SerialPort.PARITY_NONE );

                //InputStream in = serialPort.getInputStream();
                OutputStream outputStream = serialPort.getOutputStream();
                outputStream.write( 53 ); 
                //outputStream.write( 1 ); 
                //outputStream.write( 20 ); 
                //outputStream.write( 0 ); 
                //outputStream.write( 83 );

                //CommPort port = serialPort;
                System.out.println( "Write done" );
                //( new Thread( new SerialReader( in,port  ) ) ).start();
            } else {
                System.out.println( "Error: Only serial ports are handled by this example." );
            }
        }
    }
    public static void main(String[] args) {
        try {
            TwoWaySerialComm alex = new TwoWaySerialComm();
            //( new TwoWaySerialComm() ).connect( "COM4" );
            alex.connect("COM4");
        } catch( Exception e ) {
            e.printStackTrace();
        }
    }
}

跑步时:

run:
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.<clinit>(CommPortIdentifier.java:83)
    at twowayserialcomm.TwoWaySerialComm.connect(TwoWaySerialComm.java:26)
    at twowayserialcomm.TwoWaySerialComm.main(TwoWaySerialComm.java:61)
C:\Users\HP\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

b) 通过使用javax。通讯库当我这么做的时候,我发现了以下错误

run:
javax.comm.NoSuchPortException
    at javax.comm.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:105)
    at twowayserialcomm.TwoWaySerialComm.connect(TwoWaySerialComm.java:26)
    at twowayserialcomm.TwoWaySerialComm.main(TwoWaySerialComm.java:61)

这是来自netbeans的项目窗口

串行端口Java

共有1个答案

胡厉刚
2023-03-14

您得到的错误意味着在java中找不到dll。图书馆路径,因此需要设置系统属性java。图书馆通过添加-Djava,路径到包含库的文件夹对应的路径。图书馆path=“C:\path\to\your\dll”作为虚拟机选项

更多关于如何在NetBeans中设置dll路径的详细信息

 类似资料:
  • 我做了一个python程序,从串行端口读取gps数据。GPS冰球流NMEA数据语句连续插入USB时。我的程序打开端口,然后尝试读取数据,解析它,然后将其与从Arduino提取的其他数据一起写入文本文件。 我遇到的问题是,当我第一次运行程序时,有时它无法读取数据。我放入了一些Try/Exception捕获,发现以某种方式无法从GPS串行端口读取数据 如果我点击Cntrl-C几次,这似乎可以解决它遇到

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

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

  • 我读了很多问题和答案,但没有找到任何解决方案。也许我的问题不对,但我需要一些指导。我在Linux中使用串行端口,从我的Arduino设备读取数据。每当我想从Arduino向Linux发送数据时,我首先发送两个字节,这表示将从Arduino发送的总字节数。我将这两个字节转换为整数值,并开始从串行端口读取数据。比如说,我想把300字节从Ardiuno发送到Linux,我只需要先写{1,44},然后用下

  • 问题内容: 我在Ubuntu上使用LibSerial在串行端口上读写数据。 目前,我可以通过串行端口写入和接收字符串,但是我的代码不能很好地工作:特别是, 我想控制读取功能,以便仅在有需要读取的内容时才能读取当没有信息可读取时退出,以发送另一个命令 而不会阻塞流程。 我想要做: 编写命令 等待答案 然后写另一个命令 等待答案 现在,我可以在while循环中使用读取功能发送第一个命令并读取答案,但是

  • 问题内容: 从Windows,我可以使用以下命令与串行端口设备进行通信: 设备开始请求的操作。 当我尝试从独立的debian盒子或同一Windows机器的debian virtualbox实例完成相同的操作时,到目前为止我还没有运气。 这是等效的linux命令(至少我这样认为) 什么都没发生。 有人可以指导我正确的方向吗? 问题答案: 不会被解释,并且会按字面意义将字符串写入(并添加换行符)到指定