博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 串口通信
阅读量:4572 次
发布时间:2019-06-08

本文共 3293 字,大约阅读时间需要 10 分钟。

作为一款基于Android 的工控主板,很多时候网络通讯是不够的。万一客户机械臂只能提供串口呢?

本篇简单介绍Android的串口通信(基于chrome的一个开源串口包 android_serialport_api)。

Android串口通信

1.1 Step1 导入 android_serialport_api

android_serialport_api/SerialPort

2.2 Step2 在jniLibs/aemeabi 文件夹下导入android_serialport_api的动态链接库 libserial_port.so

使用了JNI技术,使得Java可以调用c语言写成的库

3.3 Step3 use it

package com.example.chenjy.serialport;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android_serialport_api.SerialPort;public class MainBlogActivity extends AppCompatActivity {    // 串口实例    private SerialPort mSerialPort;    // 输出流    private OutputStream mOutputStream;    // 输入流    private InputStream mInputStream;    // 读取串口线程    private ReadThread mReadThread;    // 串口     private String sPort = "/dev/ttyUSB0";    // 波特率    private int iBaudRate = 115200;    private String receiveString;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                try {            mSerialPort = new SerialPort(new File(sPort), iBaudRate, 0);                mOutputStream = mSerialPort.getOutputStream();            mInputStream = mSerialPort.getInputStream();            mReadThread = new ReadThread();            // 启动读取串口线程            mReadThread.start();        } catch (IOException e) {            e.printStackTrace();        }            }    /**     * 读串口数据     */    private class ReadThread extends Thread {        @Override        public void run() {            super.run();            // 如果线程没有被中断,不断从串口读取数据            while (!isInterrupted()) {                if (mInputStream != null) {                    byte[] buffer = new byte[512];                    int size = 0;                    try {                        // 如果没有读到数据,则阻塞 直到返回数据                        size = mInputStream.read(buffer);                    } catch (IOException e) {                        e.printStackTrace();                    }                    if (size > 0) {                        byte[] buffer2 = new byte[size];                        for (int i = 0; i < size; i++) {                            buffer2[i] = buffer[i];                        }                        receiveString = SerialDataUtils.ByteArrToHex(buffer2).trim();                        System.out.println("---- receive ---- :"+receiveString);                    }                    try {                        //延时50ms                        Thread.sleep(50);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }            return;        }    }    /**     * 发串口数据     */    public void sendGetTemper() {        try {                        // 测试用的3d打印机控制板 Gcode指令                     String command = "M105\n";            mOutputStream.write(command.getBytes());        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    protected void onDestroy() {        //释放串口        mSerialPort.close();        super.onDestroy();    }}

Tips: 网络通信程序是基于阻塞式API的 - 当程序输入、输出操作以后,在这些操作返回之前会一直阻塞该进程。

outPut

转载于:https://www.cnblogs.com/chenjy1225/p/9662114.html

你可能感兴趣的文章
java 序列化与反序列化
查看>>
nginx安装环境
查看>>
罗马数字表示方法
查看>>
ios tableview 上加 textfiled
查看>>
web(获取路径的方法)
查看>>
matlab 数组创建及寻访
查看>>
textmate常用快捷键备忘
查看>>
hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
查看>>
python安装大型包时出现错误Unable to find vcvarsall.bat
查看>>
已解决:Ubuntu php gettext 无效
查看>>
Google抛弃MapReduce使用Cloud Dataflow
查看>>
POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)
查看>>
如何获得 oracle RAC 11g asm spfile S档
查看>>
GMM的EM算法实现
查看>>
Android学习四、Android中的Adapter
查看>>
ECCV 2014 Results (16 Jun, 2014) 结果已出
查看>>
微软2014校园招聘笔试试题
查看>>
[leetcode] 63. Unique Paths II (medium)
查看>>
Vue-cli+Vue.js2.0+Vuex2.0+vue-router+es6+webpack+node.js脚手架搭建和Vue开发实战
查看>>
Direct3D11学习:(九)绘制基本几何体
查看>>