java串口通信

java串口通信java串口通信,由于没有相应的串口硬件,选了一款windows串口虚拟机机器1.准备串口模拟器LaunchVirtualSerialPortDriver下载地址模拟两对四个串口,

大家好,又见面了,我是你们的朋友全栈君。

java串口通信,由于没有相应的串口硬件,选了一款windows串口虚拟机机器

1. 准备

串口模拟器

Launch Virtual Serial Port Driver 下载地址

<span role="heading" aria-level="2">java串口通信

模拟两对四个串口,COM1发送数据给COM2,COM3发送数据给COM4

java包

<dependency>
    <groupId>com.fazecast</groupId>
    <artifactId>jSerialComm</artifactId>
    <version>[2.0.0,3.0.0)</version>
</dependency>

2. java源代码

mport com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Classname ComTest
 * @Description com串口通信
 * @Date 2021/9/4 10:44
 * @Created by huangsm
 */
public class ComTest {
    /**
     * <com名称,SerialPort>串口通信map,存储串口名称与串口信息
     */
    private Map<String, SerialPort> comMap = new HashMap<>();
    /**
     * com口列表
     */
    private List<String> comList = new ArrayList<>();

    public ComTest() {
        //将所有的串口信息放入comlist,comMap中
        SerialPort[] commPorts = SerialPort.getCommPorts();
        for (SerialPort commPort : commPorts) {
            comList.add(commPort.getSystemPortName());
            comMap.put(commPort.getSystemPortName(), commPort);
            //监听所有串口通信的数据
            commPort.openPort();
            commPort.addDataListener(new SerialPortDataListener() {
                @Override
                public int getListeningEvents() {
                    return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
                }

                @Override
                public void serialEvent(SerialPortEvent serialPortEvent) {
                    byte[] newData = serialPortEvent.getReceivedData();
                    System.err.println(String.format("串口%s接收到数据大小:%s,串口数据内容:%s"
                            ,serialPortEvent.getSerialPort().getSystemPortName(),newData.length,new String(newData)));
                }
            });
        }
    }

    public static void main(String[] args) throws Exception {
        ComTest comTest = new ComTest();
        List<String> comList = comTest.comList;
        Map<String, SerialPort> comMap = comTest.comMap;
        BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            System.out.println("你的可以通信的串口列表");
            for (String comName : comList) {
                System.out.println("========" + comName + "========");
            }
            System.out.println("请输入你的串口:");
            String com = systemIn.readLine();
            if(!comList.contains(com)){
                System.out.println("输入的串口不正确:");
                continue;
            }
            System.out.println("输入你要发送的消息:");
            String msg = systemIn.readLine();
            SerialPort serialPort = comMap.get(com);
            serialPort.writeBytes(msg.getBytes(),msg.getBytes().length);
            //这里是让串口先接收到数据再重新发送数据
            Thread.sleep(1000);
        }
    }
}

3. 运行结果

你的可以通信的串口列表
========COM1========
========COM2========
========COM3========
========COM4========
请输入你的串口:
COM3
输入你要发送的消息:
137912037
串口COM4接收到数据大小:9,串口数据内容:137912037
你的可以通信的串口列表
========COM1========
========COM2========
========COM3========
========COM4========
请输入你的串口:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154648.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月1日 下午3:00
下一篇 2022年7月1日 下午3:00


相关推荐

  • 按位取反运算符_按位取反运算符的运算举例

    按位取反运算符_按位取反运算符的运算举例一、定义取反操作符是位运算符的中一个,作用是按位补运算符翻转操作数的每一位。二、举例说明正数:~(6)6的二进制表示00000110按位取反11111001说明:在计算机中,正数用

    2022年8月1日
    5
  • 智能体(Agent)到底是什么?一篇文章讲清楚

    智能体(Agent)到底是什么?一篇文章讲清楚

    2026年3月15日
    2
  • bytebuf详解_byte int

    bytebuf详解_byte int@author鲁伟林记录《Netty实战》中各章节学习过程,写下一些自己的思考和总结,帮助使用Netty框架的开发技术人员们,能够有所得,避免踩坑。本博客目录结构将严格按照书本《Netty实战》,省略与Netty无关的内容,可能出现跳小章节。本博客中涉及的完整代码:GitHub地址:https://github.com/thinkingfioa/netty-learning/tre…

    2026年1月25日
    7
  • oracle hint中ordered 和leading原理很好的帖子

    oracle hint中ordered 和leading原理很好的帖子问题 请教 HINT 写法我有一个 SQL 添加如下 hint 目的是指定 hash join 方式 select ordereduse hash a b c d Froma b c dWhere 其中 nbsp nbsp nbsp nbsp a 只与 b 有关联关系 b 只与 c 有关联关系 b 只与 c 有关联关系 c 只与 d 有关联关系 nbsp nbsp 数量级 a 1000 条 nbsp nbsp b 100

    2025年7月4日
    3
  • 2026 年 AI 编程 从 入门到实践

    2026 年 AI 编程 从 入门到实践

    2026年3月12日
    2
  • java之接口[通俗易懂]

    java之接口[通俗易懂]java之接口1、接口的概念2、接口的属性3、接口与抽象类4、静态和私有方法5、默认方法6、解决默认方法冲突7、接口与回调1、接口的概念在java中,接口不是类,而是对符合这个接口的类的一组需求接口用interface声明声明一个Comparable接口可以将接口看成一个没有实例字段的抽象类publicinterfaceComparable{ 声明一个方法,方法的实现由实现这个接口的类来实现方法 接口绝不会有示例字段,在java8以前,在接口中绝对不会实现 方法。 priv

    2022年7月7日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号