Java与多串口通讯(二)

本文介绍了一个串口通信的实现方案,包括监听器的设计与实现、串口工具类的封装及其实现细节,还展示了如何在实际项目中进行串口通信的具体步骤。

1.创建监听

package com.datago.serve.common.serialport;

import com.datago.common.core.utils.StringUtils;
import com.datago.serve.common.config.SerialPortConfig;
import com.datago.serve.common.websocket.ScannerSocketServer;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import lombok.SneakyThrows;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;

import java.util.Map;


/**
 * @ProjectName serial-port
 * @Package com.datago.serialport.controller.boot
 * @Name MyLister
 * @Author HB
 * @Date 2022/7/13 10:38
 * @Version 1.0
 */
public class SerialPortLister implements SerialPortEventListener {

//1.返回数据
    public static String lightData;
//2.返回数据
    public static String servoData;

    @Override
    @SneakyThrows
    public void serialEvent(SerialPortEvent arg0) {

        if (arg0.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
            Map<String, SerialPort> comMap = SerialPortUtil.comMap;
            if (comMap.size() > 0) {
                SerialPort lightSerialPort = comMap.get(SerialPortConfig.light);
                if (StringUtils.isNotNull(lightSerialPort)) {
                    byte[] bytes = serialPortUtil.readFromPorts(lightSerialPort);
                    String byteStr = new String(bytes, 0, bytes.length).trim();
                    if (!byteStr.equals("")) {
                        //赋返回值
                        lightData = byteStr;
                    }
                }
                SerialPort servoSerialPort = comMap.get(SerialPortConfig.servo);
                if (StringUtils.isNotNull(servoSerialPort)) {
                    byte[] bytes = serialPortUtil.readFromPorts(servoSerialPort);
                    String byteStr = new String(bytes, 0, bytes.length).trim();
                    if (!byteStr.equals("")) {
                        //赋返回值   0正常运行1停止运行2有异常
                        if (!byteStr.equals(servoData)){
                            servoData = byteStr;
                            SerialPortConfig.redisService.setCacheObject("servoData",servoData);
                            //推送前端
                            JSONObject object = JSONObject.fromObject("{\"code\":10000,\"message\":\"\",\"data\":\"\"}"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值