• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Java
  • 标签: Java  串口  RXTX  

资源简介

Java 串口(rxtx)demo(包含发送、接收、以及连接数据库和连接实际的串口硬件的代码和工具类)

资源截图

代码片段和文件信息

package com.example.demo.rxtx3;

import com.example.demo.rxtx3.util.DBHelper;
import gnu.io.*;


import java.io.IOException;
import java.io.InputStream;
import java.sql.PreparedStatement;
import java.util.TooManyListenersException;
 //写好之后,就是读串口类,要保存至数据库的话就是在读出数据后保存,此处无保存至数据库的代码:
public class EventListener implements SerialPortEventListener {
    //1.定义变量
    SerialPort serialPort = null;
    InputStream inputStream = null;//输入流
    Thread readThread = null;
     java.sql.Connection conn = null;
     PreparedStatement stmt = null;
    //2.构造函数:
    //实现初始化动作:获取串口COM21、打开串口、获取串口输入流对象、为串口添加事件监听对象

    public EventListener() throws NoSuchPortException PortInUseException {
        try {
            //获取串口、打开窗串口、获取串口的输入流。
            serialPort = SerialTool.openPort(“COM3“ 9600);
            inputStream = serialPort.getInputStream();
            //向串口添加事件监听对象。
            serialPort.addEventListener(this);
            //设置当端口有可用数据时触发事件,此设置必不可少。
            serialPort.notifyondataavailable(true);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TooManyListenersException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //  SerialTool.closePort(serialPort);
        }
    }

    //重写继承的监听器方法
    @Override
    public void serialEvent(SerialPortEvent event) {
        //定义用于缓存读入数据的数组
        byte[] cache = new byte[1024];
        //记录已经到达串口COM21且未被读取的数据的字节(Byte)数。
        int availableBytes = 0;

        //如果是数据可用的时间发送,则进行数据的读写
        if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE){
            try {
                availableBytes = inputStream.available();
                while(availableBytes > 0){
                    inputStream.read(cache);
                    for(int i = 0; i < cache.length && i < availableBytes; i++){
                        //解码并输出数据
                        System.out.print((char)cache[i]);
                        //存储到数据库中
                        //使用的sql语句
                        String sql = “insert into entity_test (idstr) values(1)“;
                        //获得数据库连接‘“+(char)cache[i]+“‘
                        try {
                            conn = DBHelper.getConnection();
                            stmt = conn.prepareStatement(sql);
                            stmt.executeUpdate();
                        } catch (Exception e) {

                            e.printStackTrace();
                        }

                    }
                    availableBytes = inputStream.available();
                }
                System.out.println();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws NoSuchPortException PortInUseException {

        new EventListener();

    }
    /*
     如果是自己虚拟的两个端口,则运行读串口类,再运行写串口类,则能看到接收到的数据。

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-21 17:45  rxtx3\
     文件        3689  2018-05-21 16:16  rxtx3\EventListener.java
     文件        6710  2018-05-18 14:26  rxtx3\SerialTool.java
     目录           0  2018-05-21 17:45  rxtx3\util\
     文件        1475  2018-05-21 09:37  rxtx3\util\DBHelper.java
     文件        1231  2018-05-21 17:23  rxtx3\util\HexUtil.java
     文件         777  2018-05-21 17:44  rxtx3\Write.java

评论

共有 条评论