android串口通信

  • Post author:
  • Post category:其他


一、串口通信原理

串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。

串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线(GND)、发送(TX)、接收(RX)。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须和通讯协议保持一致;

二、串口通信实现

1.项目配置

SerialPort 包名必须一致

启动串口

public static SerialConnection getInstance() {
        return instance;
    }

    public void register(Handler mHander) {
        this.mHandler = mHander;
    }

    /**
     * 启动串口接受信息
     */
    public void startSerial(int rate) {
        lodg("[startSerial]......rate===>" + rate);
        try {
            //三个参数  1.哪个口 2.波特率 3.校验方式
            mSerialPort = new SerialPort(new File("/dev/ttyS1"), rate,  'o');
        } catch (Exception e) {
            lodg("[startSerial]......e===>" + e.toString());
        }
        if (mSerialPort != null) {
            mInputStream = mSerialPort.getInputStream();
            mOutputStream = mSerialPort.getOutputStream();
        }
        mRecvThread = new RecvThread();
        mRecvThread.start();
    }

    class RecvThread extends Thread {
        private boolean mExit = false;

        @Override
        public void run() {
            while (!mExit) {
                receiveSerial();
            }
        }

        public void exit() {
            mExit = true;
        }
    }

    /**
     * 接受串口信息
     */
    private void receiveSerial() {
        try {
            if (mInputStream != null) {
                int len = mInputStream.read(mUartReadBuffer);
                if (len > 0) {
                    String serialStr = byte2String(mUartReadBuffer, len);
                    lodg("serialStr: ===>" + serialStr);
                    if (serialStr.length() > 0 && !serialStr.equals("00")) {
                        dispatchCmds(serialStr);
                    }
                }
            }
        } catch (Exception e) {
            lodg("[receiveSerial]......e===>" + e.toString());
        }
    }

发送串口信息

   /**
     * 发送串口信息
     *
     * @param cmd
     */
    public void sendSerial(final String cmd) {
        lodg("[sendSerial].....cmd===>" + cmd);
        new Thread() {
            @Override
            public void run() {
                super.run();
                byte[] test = hexStringToBytes(cmd);
                try {
                    if (mOutputStream != null) {
                        mOutputStream.write(test);
                        mOutputStream.flush();
                    }

                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }.start();
    }

电脑调试串口工具

所需文件以及串口调试工具下载


https://download.csdn.net/download/printlnout/11289137



版权声明:本文为printlnout原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。