java comm形式的串口通讯介绍及简单示例

java comm形式的串口通讯介绍及简单示例

一、下载:

         javacomm 官网:http://mdubuc.freeshell.org/Jolt

         javacomm下载地址:http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip

二、配置:

         将javacomm20-win32.zip下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件:comm.jar,javax.comm.properties和win32comm.dll。%JAVA_HOME%表示jdk的安装根目录

1 将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;

2文件 javax.comm.properties拷贝到%JAVA_HOME%\jre\lib;

3文件win32comm.dll拷贝到%JAVA_HOME%\jre\bin。

(注意:原参考地址博文中是:%JAVA_HOME% \bin,我上官网查阅是:%JAVA_HOME%\ jre\bin,不过因为电脑是64位没有测试成功,不确认是否有影响,这里就将以官网上的为主)

三、简单示例代码:

package com.garfield.comm;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;

public class SimpleCommIO implements Runnable {

    static CommPortIdentifier portId;
    static String cmdHand = "I\r\n";
    static String cmdWeight = "WX\r\n";
    static SerialPort serialPort;
    static OutputStream outputStream;
    static String comm="COM11";
    InputStream inputStream;
    Thread readThread;

    public void run() {
        while (true) {
            try {
                byte[] readBuffer = new byte[200];
                try {
                    while (inputStream.available() > 0) {
                        int numBytes = inputStream.read(readBuffer);
                        System.out.print("收到数据:"+new String(readBuffer));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void initComm() {
        try{
            portId = CommPortIdentifier.getPortIdentifier(comm);
            serialPort = (SerialPort) portId.open("SimpleCommIO",2000);
            outputStream = serialPort.getOutputStream();
            inputStream = serialPort.getInputStream();
            serialPort.setSerialPortParams(9600,
                    SerialPort.DATABITS_8, 
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public void writeComm(String cmd) {
        try {
            outputStream.write(cmd.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SimpleCommIO reader = new SimpleCommIO();
        reader.initComm();
        Thread readThread = new Thread(reader);
        readThread.start();
        System.out.println("发出指令:"+cmdHand);
        reader.writeComm(cmdHand);
   }

备注:我电脑是64位的系统,报错:Can't load IA 32-bit .dll on a AMD 64-bit platform由于java comm太久远,并没有找到64位的,然后就换成了Rxtx进行java与串口的通讯了

参考地址: http://www.cnblogs.com/GarfieldTom/p/3675485.html



### 回答1: 在Java中,可以使用JavaComm API来实现串口通讯。以下是实现串口通讯的基本步骤: 1. 下载并安装JavaComm API,该API包括了访问串口的类和方法。 2. 导入JavaComm API库。 ```java import javax.comm.*; ``` 3. 使用CommPortIdentifier类获取可用的串口。 ```java Enumeration portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId.getName()); } } ``` 4. 打开选定的串口。 ```java CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1"); SerialPort serialPort = (SerialPort) portId.open("MyApp", 2000); ``` 5. 配置串口参数,例如波特率、数据位、停止位、奇偶校验位等。 ```java serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); ``` 6. 获取输入输出流并进行数据传输。 ```java InputStream in = serialPort.getInputStream(); OutputStream out = serialPort.getOutputStream(); out.write("Hello World".getBytes()); byte[] buffer = new byte[1024]; int len = in.read(buffer); System.out.println(new String(buffer, 0, len)); ``` 7. 关闭串口。 ```java serialPort.close(); ``` 以上是Java实现串口通讯的基本步骤,根据具体需求可以进行进一步的修改和扩展。 ### 回答2: Java可以通过使用第三方库来实现串口通讯。其中最常用的库之一是RXTX,它可以在 Java 平台上提供串口通讯的功能。 RXTX是一个开源的串口通讯库,支持跨平台运行。以下是实现串口通讯的一般步骤: 1. 添加RXTX库:首先,你需要下载RXTX库的最新版本。然后,将库的JAR文件添加到你的Java项目的classpath中。 2. 打开串口:使用RXTX提供的类,打开你要进行通讯的串口。你可以选择串口的名称、波特率和其他参数。 3. 设置串口监听器:通过注册一个监听器来监听串口的输入数据。这样,当串口接收到数据时,你就可以在监听器中处理它。 4. 发送数据:使用串口对象的输出流,你可以将数据发送到串口设备上。 5. 接收数据:使用串口对象的输入流,你可以读取从串口设备接收到的数据。 6. 关闭串口:当你完成通讯后,要记得关闭串口,释放资源。 需要注意的是,在使用RXTX库之前,你需要在你的操作系统上安装相应的驱动程序。具体的驱动程序安装方法和操作系统有关。 总结起来,通过使用RXTX库,我们可以在Java平台上实现串口通讯。我们可以打开和关闭串口,发送和接收数据。这为与硬件设备的交互提供了便利,例如与传感器、机器人或其他串口设备进行通讯。 ### 回答3: 串口通讯Java中可以通过JavaComm API来实现。下面是一个简单示例来说明如何使用Java实现串口通讯。 1. 首先,我们需要下载并安装Java Comm API。可以从Oracle官方网站上下载相应版本的Java Comm API。 2. 在Java代码中,我们需要导入相应的类,包括javax.comm包中的SerialPort和CommPortIdentifier类。 3. 然后,我们需要通过调用CommPortIdentifier类的getPortIdentifiers()方法获取当前系统中可用的串口列表。 4. 对于每个可用的串口,我们可以调用CommPortIdentifier类的方法来获得串口对象。 5. 通过打开串口,我们可以得到一个串口输入流和一个串口输出流。 6. 通过串口输出流,我们可以发送数据。通过串口输入流,我们可以接收数据。 7. 当需要关闭串口时,我们需要调用close()方法来关闭串口。 下面是一个简单示例代码: ``` import javax.comm.*; public class SerialCommunication { public static void main(String[] args) { CommPortIdentifier portId; try { // 获取当前系统中可用的串口列表 Enumeration portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { // 获取串口对象 portId = (CommPortIdentifier) portList.nextElement(); // 判断串口类型 if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { // 打开串口 SerialPort serialPort = (SerialPort) portId.open("SerialCommunication", 2000); // 配置串口参数 serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); // 获取串口输入流和输出流 InputStream in = serialPort.getInputStream(); OutputStream out = serialPort.getOutputStream(); // 使用串口输出流发送数据 out.write("Hello, Serial Port!".getBytes()); out.flush(); // 接收串口输入流数据 byte[] buffer = new byte[1024]; int len = in.read(buffer); String receivedData = new String(buffer, 0, len); System.out.println("Received Data: " + receivedData); // 关闭串口 serialPort.close(); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 这就是一种基本的方法来实现Java中的串口通讯。当然,还有其他的一些高级应用,比如监听串口数据事件等。 希望这个简单示例可以帮助您理解在Java中如何实现串口通讯
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值