• Android 串口通信


    作为一款基于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
    ";
    
                mOutputStream.write(command.getBytes());
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        protected void onDestroy() {
            //释放串口
            mSerialPort.close();
            super.onDestroy();
        }
    
    
    }
    
    

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

    outPut

    源代码

  • 相关阅读:
    Alpha版本冲刺(一)
    福大软工 · 第七次作业
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    福大软工1816
    福大软工1816 · 第一次作业
    Python学习
    整理一下软工实践这门课的一些链接
    个人作业——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9662114.html
Copyright © 2020-2023  润新知