美文网首页
android 串口通信

android 串口通信

作者: 小小痞子LIU | 来源:发表于2020-12-26 20:47 被阅读0次
/**
 * 串口操作类
 */
public class SerialPortUtil {
    private String TAG = SerialPortUtil.class.getSimpleName();
    private SerialPort mSerialPort;
    private OutputStream mOutputStream;
    private InputStream mInputStream;
    private ReadThread mReadThread;
    private String path = "dev/ttyS0";//端口号,也就是安卓平板电脑的串口名称
    private int baudrate = 115200;//波特率
    private static SerialPortUtil portUtil;
    private OnDataReceiveListener onDataReceiveListener = null;
    private boolean isStop = false;

    public interface OnDataReceiveListener {
        public void onDataReceive(byte[] buffer, int size);
    }
  //设置串口返回数据的监听
    public void setOnDataReceiveListener(
            OnDataReceiveListener dataReceiveListener) {
        onDataReceiveListener = dataReceiveListener;
    }

    public static SerialPortUtil getInstance() {
        if (null == portUtil) {
            portUtil = new SerialPortUtil();
            portUtil.onCreate();
        }
        return portUtil;
    }

    /**
     * 初始化串口信息
     */
    public void onCreate() {
        try {
            mSerialPort = new SerialPort(new File(path), baudrate, 0);
            mOutputStream = mSerialPort.getOutputStream();
            mInputStream = mSerialPort.getInputStream();

            mReadThread = new ReadThread();
            isStop = false;
            mReadThread.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送指令到串口
     *
     * @param cmd
     * @return
     */
    public boolean sendCmds(String cmd) {
        boolean result = true;
        byte[] mBuffer = (cmd + "\r\n").getBytes();
//注意:我得项目中需要在每次发送后面加\r\n,大家根据项目项目做修改,也可以去掉,直接发送mBuffer
        try {
            if (mOutputStream != null) {
                mOutputStream.write(mBuffer);
            } else {
                result = false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }

    public boolean sendBuffer(byte[] mBuffer) {
        boolean result = true;
        String tail = "\r\n";
        byte[] tailBuffer = tail.getBytes();
        byte[] mBufferTemp = new byte[mBuffer.length + tailBuffer.length];
        System.arraycopy(mBuffer, 0, mBufferTemp, 0, mBuffer.length);
        System.arraycopy(tailBuffer, 0, mBufferTemp, mBuffer.length, tailBuffer.length);
//注意:我得项目中需要在每次发送后面加\r\n,大家根据项目项目做修改,也可以去掉,直接发送mBuffer
        try {
            if (mOutputStream != null) {
                mOutputStream.write(mBufferTemp);
            } else {
                result = false;
            }
        } catch (IOException e) {
            e.printStackTrace();
            result = false;
        }
        return result;
    }

    private class ReadThread extends Thread {

        @Override
        public void run() {
            super.run();
            while (!isStop && !isInterrupted()) {
                int size;
                try {
                    if (mInputStream == null)
                        return;
                    byte[] buffer = new byte[512];
                    size = mInputStream.read(buffer);
                    if (size > 0) {
//                        if(MyLog.isDyeLevel()){
//                            MyLog.log(TAG, MyLog.DYE_LOG_LEVEL, "length is:"+size+",data is:"+new String(buffer, 0, size));
//                        }
                        if (null != onDataReceiveListener) {
                            onDataReceiveListener.onDataReceive(buffer, size);
                        }
                    }
                    Thread.sleep(10);
                } catch (Exception e) {
                    e.printStackTrace();
                    return;
                }
            }
        }
    }

    /**
     * 关闭串口
     */
    public void closeSerialPort() {
        isStop = true;
        if (mReadThread != null) {
            mReadThread.interrupt();
        }
        if (mSerialPort != null) {
            mSerialPort.close();
        }
    }

}

需要依赖下面的library库
链接: https://pan.baidu.com/s/1WdKZftBVVSnL51FicSmk3Q 提取码: 626b

相关文章

  • 串口通讯

    Android应用串口通信的实现 Android SDK并没有在Framework层实现封装关于串口通信的类库。但...

  • Android开发之串口通信:AndroidSerialPort

    AndroidSerialPort Android 串口通信,基于谷歌官方android-serialport-a...

  • Android USB转串口通信

    一、引用 1、Git上最火的USB转串口通信2、Android之USB转串口通信3、安卓开发中的USB转串口通讯 ...

  • Android 串口设置校验位、速率、停止位等参数

    最近业余时间有个android项目需要和硬件进行通信,通讯方式都是通过串口,android串口通讯google有个...

  • Android与串口设备通信的方案

    Android芯片一般使用ARM的,都支持串口通信。 上图中用与Android与串口设备通信的方案有四种:第一种是...

  • Android串口通信工具

    Android串口通信简单封装,可以用于和连接串口的硬件通信或者进行硬件调试 集成方法: Step 1. Add ...

  • Android 串口通信开发笔记3:CMake 方式实现和 多对

    上一篇:Android 串口通信笔记2 调试工具分析 工具类实现分析、项目实现Android串口开发 延伸和扩展,...

  • Android 串口通信

    Android 主板在与其它硬件进行串口通信时,串口作为底层实现,Android 系统把设备作为一个文件,与其他设...

  • Android 串口通信

    前段时间,接触了一个智能硬件的项目,在定制化的平板上运行 Android 系统,并通过串口和蓝牙与其他设备进行通讯...

  • Android串口通信

    目前物联网已慢慢普及,NDK开发也慢慢普及。 今天结合自己在项目中的串口的使用说明一下Android串口通信的使用...

网友评论

      本文标题:android 串口通信

      本文链接:https://www.haomeiwen.com/subject/ekzgnktx.html