java读取串口与串口数据推送到界面

本文展示了如何使用Java实现串口通信,读取串口数据,并将数据实时推送到界面。通过创建Servlet读取串口数据,使用`SeriPortUtil`类进行串口操作,如打开、配置、读写数据。同时,利用GoEasy或Comet4J库实现实时数据推送至前端界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.java串口开发

 <servlet>
        <servlet-name>readSmsServlet</servlet-name>
        <servlet-class>com.dm.core.system.ReadSmsServlet</servlet-class>
        <init-param>
            <param-name>canread</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>104</load-on-startup>
    </servlet>

package com.dm.core.system;

import com.dm.core.system.task.ReadMsg2;
import com.dm.core.util.SeriPortUtil;
import gnu.io.SerialPort;

import javax.servlet.ServletException;
import java.util.Timer;

/**
 * 定时执行任务
 * 
 * @author Administrator
 * 
 */
public class ReadSmsServlet extends javax.servlet.http.HttpServlet {
    @Override
    public void init() throws ServletException {  //初始化
      String canreadFlag = getInitParameter("canread");
        if("true".equals(canreadFlag)){
            System.out.println("-------可以读取RFID数据了——————————");
            readMsg();//读信息
        }
    }

    /**
     * 定时清理web下的temp、upload目录
     */
    public void readMsg() {


        long period = 5000;// 间隔时间,每天执行

        Timer timer = new Timer();
       SerialPort sp = SeriPortUtil.open("COM4");
        timer.schedule(new ReadMsg2(sp), period);
    }

}

package com.dm.core.util;

import com.dm.core.system.SystemConst;
import com.dm.storage.controller.WsPool;
import com.yang.serialport.utils.*;
import com.yang.serialport.utils.ByteUtils;
import gnu.io.*;
import io.goeasy.GoEasy;
import org.java_websocket.WebSocket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;

/**
 * Created by IntelliJ IDEA.
 * User: intel
 * Date: 19-9-18
 * Time: 上午9:20
 * To change this template use File | Settings | File Templates.
 */
public class SeriPortUtil {

        /**
         * 用于打开串口
         *
         * @param portName
         *            串口名
         * @param baudrate
         *            波特率
         * @return 返回串口
         */
        public static final SerialPort portParameterOpen(String portName, int baudrate) {
            SerialPort serialPort = null;
            try { // 通过端口名识别串口
                CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
                // 打开端口并设置端口名字 serialPort和超时时间 2000ms
                CommPort commPort = portIdentifier.open(portName, 1000);
                // 进一步判断comm端口是否是串口 instanceof
                if (commPort instanceof SerialPort) {
                    System.out.println("该COM端口是串口!串口名称是:" + portName);
                    // 进一步强制类型转换
                    serialPort = (SerialPort) commPort;
                    // 设置baudrate 此处需要注意:波特率只能允许是int型 对于57600足够
                    // 8位数据位
                    // 1位停止位
                    // 无奇偶校验
                    serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                            SerialPort.PARITY_NONE);
                    // 串口配制完成 log
                    System.out.println("串口参数设置已完成,波特率为" + baudrate + ",数据位8bits,停止位1位,无奇偶校验");
                } else { // 不是串口
                    System.out.println("该com端口不是串口,请检查设备!");
                    // 将com端口设置为null 默认是null不需要操作
                }

            } catch (NoSuchPortException e) {
                e.printStackTrace();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jimin_zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值