RS232通信(Android)

一、 添加依赖
dependencies {
implementation 'com.github.kongqw:AndroidSerialPort:1.0.1'
}

二、 使用方法
package com.bug01.tryserial;

import com.kongqw.serialportlibrary.SerialPortManager;
import com.kongqw.serialportlibrary.listener.OnOpenSerialPortListener;
import com.kongqw.serialportlibrary.listener.OnSerialPortDataListener;

import java.io.File;

public class SerialUtil {
    private SerialPortManager mSerialPortManager = new SerialPortManager();
    private static SerialUtil instance = null;

    // 此处使用单例模式
    public static SerialUtil getInstance() {
        if (instance == null) {
            synchronized (SerialUtil.class) {
                if (instance == null) {
                    instance = new SerialUtil();
                    instance.mSerialPortManager.setOnSerialPortDataListener(instance.onSerialPortDataListener);
                    instance.mSerialPortManager.setOnOpenSerialPortListener(instance.onOpenSerialPortListener);
                }
            }
        }
        return instance;
    }


    private OnSerialPortDataListener onSerialPortDataListener = new OnSerialPortDataListener() {
        @Override
        public void onDataReceived(byte[] bytes) {
            System.out.println("收到了数据。");
        }

        @Override
        public void onDataSent(byte[] bytes) {
            System.out.println("发送了数据。");
        }
    };

    private OnOpenSerialPortListener onOpenSerialPortListener = new OnOpenSerialPortListener() {
        @Override
        public void onSuccess(File device) {
            System.out.println("链接" + device.getName() +"成功");
        }

        @Override
        public void onFail(File device, Status status) {
            System.out.println("链接" + device.getName() +"失败");
        }
    };


    /**
     * 链接串口
     * @return
     */
    public boolean Connect() {
        return Connect("ttysWK1");
    }

    /**
     * 链接串口
     * @param PortName 设备节点名称
     * @return
     */
    public boolean Connect(String PortName) {
        return mSerialPortManager.openSerialPort(new File("dev/" + PortName), 9600);
    }

    /**
     * 写入数据
     * @param val
     */
    public void write(String val) {
        mSerialPortManager.sendBytes(val.getBytes());
    }

    public void write(byte[] val) {
        mSerialPortManager.sendBytes(val);
    }
}

 

后面我想了一下,有可能会有人不知道自己用的是哪个节点(不知道用的是机器上的哪个串口),那你就遍历出来,挨个测试一下。

遍历串口测试代码:

    public void trySerialTest() {
        SerialPortFinder serialPortFinder = new SerialPortFinder();
        SerialPortManager mSerialPortManager;
        ArrayList<Device> devices = serialPortFinder.getDevices();
        System.out.println("获取到节点数量为:" + devices.size());
        Device device = null;
        mSerialPortManager = new SerialPortManager();

        mSerialPortManager.setOnSerialPortDataListener(new OnSerialPortDataListener() {
            @Override
            public void onDataReceived(byte[] bytes) {
                System.out.println("收到数据");
            }

            @Override
            public void onDataSent(byte[] bytes) {
            }
        });

        mSerialPortManager.setOnOpenSerialPortListener(new OnOpenSerialPortListener() {
            @Override
            public void onSuccess(File device) {
                System.out.print("串口链接成功,节点为:");
                System.out.println(device.getName());//打印节点ID
            }

            @Override
            public void onFail(File device, Status status) {
                System.out.print("串口链接失败,节点为:");
                System.out.println(device.getName() + status);
            }
        });

        for (Device dev : devices
        ) {
            boolean openSerialPort = mSerialPortManager.openSerialPort(dev.getFile(), 9600);
            if (openSerialPort) {
                mSerialPortManager.sendBytes("send something".getBytes());

                try {
                    Thread.sleep(3000);//给点时间用来接收
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("结束测试");
        mSerialPortManager.closeSerialPort();
    }

 

posted @ 2019-04-28 17:28  蜜铀  阅读(2992)  评论(0编辑  收藏  举报