安卓实现串口通信

1、串口通信232的接线

一般通讯使用232串口的话,我们会用到2、3、5接口,根据安卓平板的标记依次接线(小白注意:接收端要与发送端接入,不要根据名称一样就接线)

2、导入第三方文件包

将以下包文件导入,然后遍历一下整个工程文件。

    //串口
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.jakewharton:butterknife:8.8.1'
    implementation 'com.jakewharton:butterknife:10.2.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'

    implementation 'tp.xmaihh:serialport:2.1'

 3、创建串口连接类serialport

package com.example.PipetterRobot.until;

import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;

import java.io.IOException;
import java.io.InputStream;

import tp.xmaihh.serialport.SerialHelper;
import tp.xmaihh.serialport.bean.ComBean;
import tp.xmaihh.serialport.stick.AbsStickPackageHelper;

public class serialport {
    public static SerialHelper serialHelper;
    public static Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            ComBean comBean = (ComBean) msg.obj;
            String time = comBean.sRecTime;
            String rxText;
            rxText = new String(comBean.bRec);
//            if (isHexType) {
//                //转成十六进制数据
//                rxText = ByteUtil.ByteArrToHex(comBean.bRec);
//            }
//            text += "Rx-> " + time + ": " + rxText + "\r" + "\n";
//            mEtReadContent.setText(text);
            return false;
        }
    });

    public static void initSerialConfig() {
        //初始化SerialHelper对象,设定串口名称和波特率
        serialHelper = new SerialHelper(Const.SPORT_NAME, Const.BAUD_RATE) {
            @Override
            protected void onDataReceived(ComBean paramComBean) {
                Message message = mHandler.obtainMessage();
                message.obj = paramComBean;
                mHandler.sendMessage(message);
            }
        };

        /*
         * 默认的BaseStickPackageHelper将接收的数据扩展成64位,一般用不到这么多位
         * 我这里重新设定一个自适应数据位数的
         */

        serialHelper.setStickPackageHelper(new AbsStickPackageHelper() {
            @Override
            public byte[] execute(InputStream is) {
                try {
                    int available = is.available();
                    if (available > 0) {
                        byte[] buffer = new byte[available];
                        int size = is.read(buffer);
                        if (size > 0) {
                            return buffer;
                        }
                    } else {
                        SystemClock.sleep(50);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        });
    }

}

 4、创建类文件Const,主要用于存取串口号和波特率,该方法可以设置成动态变量,目前该工程是定死的,可以自己更改

package com.example.PipetterRobot.until;


public class Const {

    //串口 波特率
    public static final String SPORT_NAME = "/dev/ttyS1";
    public static final int BAUD_RATE = 9600;

    public static final String TXT_TYPE_SEND = "hello";
    public static final String HEX_TYPE_SEND = "123ABC";
}

5、打开串口,该方法可以直接写在你需要的点击事件里面直接用,使用之前一定要在界面oncreat中初始化一下串口配置

        serialport.initSerialConfig();
  if (serialport.serialHelper.isOpen()) {
                    Toast.makeText(LisActivity.this, Const.SPORT_NAME + "串口已经打开", Toast.LENGTH_SHORT).show();
                    return;
                }
                try {
                    serialport.serialHelper.open();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Toast.makeText(LisActivity.this, Const.SPORT_NAME + "串口打开成功", Toast.LENGTH_SHORT).show();

6、发送数据。直接将该方法复制到你的点击事件里面,我写了一个for循环传输,可以自己改

if (!serialHelper.isOpen()) {
                    Toast.makeText(getActivity(), Const.SPORT_NAME + "串口没打开 发送失败", Toast.LENGTH_SHORT).show();
                    return;
                }
                for(int i = 0;i<20;i++){
                    String sendContent = "*PR96|" + (5+i) + "|1|" + (10+i);
                    serialHelper.sendTxt(sendContent);
                }

7、关闭串口

        serialHelper.close();
        serialHelper = null;

你可能感兴趣的:(java,安卓开发,android,studio,android,app)