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


相关推荐

  • MapReduce编程案例系列篇(01-15)

    MapReduce编程案例系列篇(01-15)由于本人最开始接触大数据工作,主要以写MapReduce程序为主,虽然现在有流行的言论称MapReduce这种运行很慢的分布式计算编程框架将要被各种内存计算框架取代。但是MapRedcue也会吸收很多流行的内存计算的各种优点,我相信,将来,MapReduce绝对不会沦落到要淘汰的地步。甚至会后来居上。在此,本人总结一篇关于MapReduce编程的各种典型应用场景编程案例,便于大家查阅学习…

    2022年6月17日
    33
  • 多个单列索引和联合索引的区别详解

    多个单列索引和联合索引的区别详解背景:为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。一、联合索引测试注:Mysql版本为5.7.20创建测试表(表记录数为63188):CREATETABLE`t_mobilesms_11`(`id`bigint(20)NOT…

    2022年6月4日
    44
  • JWT单点登录代码实现(Demo详解)

    JWT单点登录代码实现(Demo详解)你好我是辰兮,很高兴你能来阅读,本篇给你介绍JWT单点登录的代码实现,后续会进一步分享源码的学习,献给初学者,共同成长,家一起进步。文章目录一、SSO概念二、JWT单点登录步骤一、SSO概念单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。简述:当你成.

    2022年5月22日
    41
  • java 取余和取整_Java取整、取余

    java 取余和取整_Java取整、取余参考链接:http://blog..net/wanlixingzhe/article/details/7359809参考链接:http://bbs..net/topics/390677448(6楼)参考链接:http://blog.sina.com.cn/s/blog_6940cab30101hji5.html最近在做一个计算的时候用到了取整取余的计算,这里对取整、取余、取模做一下总结~~~1、取…

    2022年5月30日
    159
  • python类型转换astype时间_python dataframe astype 字段类型转换方法

    python类型转换astype时间_python dataframe astype 字段类型转换方法使用astype实现dataframe字段类型转换#-*-coding:UTF-8-*-importpandasaspddf=pd.DataFrame([{‘col1′:’a’,’col2′:’1′},{‘col1′:’b’,’col2′:’2′}])printdf.dtypesdf[‘col2’]=df[‘col2’].astype(‘int’)print’–…

    2022年6月5日
    43
  • Android 时间戳字符串转Date类型[通俗易懂]

    Android 时间戳字符串转Date类型[通俗易懂]Stringtimestamp=System.currentTimeMillis()+””;Datedate=newDate(Long.valueOf(timestamp));

    2022年9月27日
    0

发表回复

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

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