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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常见的IT自动化运维工具有哪些?推荐一款好用的?「建议收藏」

    自动化运维是IT运维工作的升华,其不单纯是一个维护过程,更是一个管理的提升过程,是IT运维的最高层次,也是未来的发展趋势。所以作为IT运维人员,一定要知道常见的IT自动化运维工具有哪些?哪款比较好用?常见的IT自动化运维工具有哪些?1、Puppet2、SaltStack3、Ansible4、PSSH5、阿里云OOS6、行云管家【重点推荐】一款好用的自动化运维工具-行云管家!1、自动化运维之预设脚本库脚本是实现自动化运维的基础,运维人员经常通过脚本来替代以往一些需要手工操作的业务,提升工作

    2022年4月14日
    163
  • ANSI编码对照表「建议收藏」

    ANSI编码对照表「建议收藏」目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(AmericanStandardCodeforInformationInterchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。因为1位二进制数可以表示(21=)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00、01、10、11;依次类推,7位二进制数可以表示(27=)128种

    2022年9月23日
    5
  • C语言指针函数和函数指针区别

    C语言指针函数和函数指针区别C语言函数指针和指针函数的区别C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。一、指针函数指针函数是返回指针的函数主体是函数,返回值是一个指针基本声明形式:返回数据类型+*+函数名+(变量类型1,……

    2022年6月22日
    20
  • mysql 获取当前的时间戳

    mysql 获取当前的时间戳获取系统当前时间,类型:timestamp格式yyyy-MM-ddHH:mm:ss selectNOW(),CURRENT_TIMESTAMP(),SYSDATE();结果:三者基本没有区别,稍微一点的区别在于:NOW(),CURRENT_TIMESTAMP()都表示SQL开始执行的时间;SYSDATE()表示执行此SQL的时间selectNOW(),CURRE…

    2022年9月28日
    4
  • 苹果哪款手机无刘海_刘海屏是什么意思

    苹果哪款手机无刘海_刘海屏是什么意思用iPhone这么多年你们用过iPodTouch吗?在iPhone4发布的时候我接触过一次iPodTouch,当时是同事买的超薄的,感觉就是为打游戏制造的,(本人热爱游戏)那时候感觉真…

    2022年8月10日
    9
  • springboot启动流程概述_简述app启动的主要流程

    springboot启动流程概述_简述app启动的主要流程又回顾了springboot启动流量,有了新的理解,进行以下补充:1、listeners.starting()等方法,第一次出现了误解,以为是启动监听器,但是我很奇怪监听器为什么要启动。再次看源码,才知道不同的方法是用来发布不同的事件,此方法就是发布ApplicationStartingEvent事件。可见看源码还是要耐心。…

    2022年8月21日
    8

发表回复

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

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