“ Android Studio的笔记--SerialPort串口通讯学习和使用 ”

发布时间:2023-11-01
今日阅读:0
来源:CSDN
作者:新手上路狂踩坑
...

SerialPort串口通讯学习和使用

  • SerialPort
  • android-serialport-api源码下载 Android-SerialPort-API源码下载readme版本 Android-SerialPort-Tool源码下载 Android-Serialport源码下载使用方法readme
  • android-serialport-api
  • 源码下载
  • 源码下载
  • Android-SerialPort-API
  • 源码下载readme版本
  • 源码下载
  • readme
  • 版本
  • Android-SerialPort-Tool
  • 源码下载
  • 源码下载
  • Android-Serialport
  • 源码下载使用方法readme
  • 源码下载
  • 使用方法
  • readme
  • android中使用串口通信
  • 使用android-serialport-api方式第1种 链接第2种 导入SerialPort库第3种 编译SerialPort模块 串口通信部分代码
  • 使用android-serialport-api方式
  • 第1种 链接第2种 导入SerialPort库第3种 编译SerialPort模块
  • 第1种 链接
  • 第2种 导入SerialPort库
  • 第3种 编译SerialPort模块
  • 串口通信部分代码 摘要本篇介绍android中SerialPort串口通讯学习和使用。主要用到android-serialport-api。

    SerialPort

    几个工程参考学习使用

    android-serialport-api

    Google开源的Android串口通信Demo android-serialport-api

    源码下载

    cepr/android-serialport-api SerialPort获取串口输入输出流 SerialPortFinder获取硬件地址 可以推荐看android串口通信android-serialport-api 源img

    Android-SerialPort-API

    源码下载

    licheedev/Android-SerialPort-API img

    readme

    img img

    版本

    添加依赖implementation com.licheedev:android-serialport:2.1.3

    allprojects {
    repositories {
        ...
        jcenter()
        mavenCentral() // since 2.1.3
    }
    }
    
    dependencies {
        implementation 'com.licheedev:android-serialport:2.1.3'
    }
    

    除了选择2.1.3版本,还可以看 releases 选择其他版本。 img

    Android-SerialPort-Tool

    源码下载

    licheedev/Android-SerialPort-Tool img

    Android-Serialport

    源码下载

    xmaihh/Android-Serialport img

    使用方法

    Android移植谷歌官方串口库支持校验位、数据位、停止位、流控配置

    1. 检验参数合法性
    /* Check arguments */
    {
        speed = getBaudrate(baudrate);
        if (speed == -1) {
            /* TODO: throw an exception */
            LOGE("Invalid baudrate");
            return NULL;
        }
    }
    2. 打开串口
    /* Opening device */
    {
        jboolean iscopy;
        const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy);
        LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR | flags);
        fd = open(path_utf, O_RDWR | flags);
        LOGD("open() fd = %d", fd);
        (*env)->ReleaseStringUTFChars(env, path, path_utf);
        if (fd == -1) {
            /* Throw an exception */
            LOGE("Cannot open port");
            /* TODO: throw an exception */
            return NULL;
        }
    }
    3.配置波特率
    /* Configure device */
    {
        struct termios cfg;
        LOGD("Configuring serial port");
        if (tcgetattr(fd, &cfg)) {
            LOGE("tcgetattr() failed");
            close(fd);
            /* TODO: throw an exception */
            return NULL;
        }
        cfmakeraw(&cfg);
        cfsetispeed(&cfg, speed);
        cfsetospeed(&cfg, speed);
    4.配置数据位
        cfg.c_cflag &= ~CSIZE;
        switch (dataBits) {
            case 5:
                cfg.c_cflag |= CS5;    //使用5位数据位
                break;
            case 6:
                cfg.c_cflag |= CS6;    //使用6位数据位
                break;
            case 7:
                cfg.c_cflag |= CS7;    //使用7位数据位
                break;
            case 8:
                cfg.c_cflag |= CS8;    //使用8位数据位
                break;
            default:
                cfg.c_cflag |= CS8;
                break;
        }
    5.配置校验位
        switch (parity) {
            case 0:
                cfg.c_cflag &= ~PARENB;    //无奇偶校验
                break;
            case 1:
                cfg.c_cflag |= (PARODD | PARENB);   //奇校验
                break;
            case 2:
                cfg.c_iflag &= ~(IGNPAR | PARMRK); // 偶校验
                cfg.c_iflag |= INPCK;
                cfg.c_cflag |= PARENB;
                cfg.c_cflag &= ~PARODD;
                break;
            default:
                cfg.c_cflag &= ~PARENB;
                break;
        }
    6.配置停止位
        switch (stopBits) {
            case 1:
                cfg.c_cflag &= ~CSTOPB;    //1位停止位
                break;
            case 2:
                cfg.c_cflag |= CSTOPB;    //2位停止位
                break;
            default:
                break;
        }
    7.配置流控
        switch (flowCon) {
            case 0:
                cfg.c_cflag &= ~CRTSCTS;    //不使用流控
                break;
            case 1:
                cfg.c_cflag |= CRTSCTS;    //硬件流控
                break;
            case 2:
                cfg.c_cflag |= IXON | IXOFF | IXANY;    //软件流控
                break;
            default:
                cfg.c_cflag &= ~CRTSCTS;
                break;
        }
    

    readme

    img img img

    android中使用串口通信

    使用android-serialport-api方式

    import android.serialport.SerialPort;
    

    第1种 链接

    在gradle/build.gradle中添加

    maven { url "https://jitpack.io" }
    

    在app/build.gradle文件配置中的dependencies,加上

    implementation 'com.github.licheedev.Android-SerialPort-API:serialport:1.0.1'
    

    第2种 导入SerialPort库

    1、将android-serialport-api中的libs的so库资源放到项目libs中 img 2、将Android-SerialPort-API中的java下的文件复制到项目中java 3、修改app的build.gradle文件,在android {}里添加支持的cpu架构img img img

    defaultConfig {
        ndk {
            abiFilters "armeabi","armeabi-v7a"  // "x86", "arm64-v8a"
        }
    }
    

    第3种 编译SerialPort模块

    1、将Android-SerialPort-API中的serialport模块复制到工程中,目录与app文件同级 2、修改settings.gradle,将改成如下,即增加serialport模块img img

    rootProject.name = "SerialPort"
    include ':app',':serialport'
    

    3、修改app的build.gradle文件,在dependencies{}中添加project

    dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation project(':serialport')
    }
    

    串口通信部分代码

    待续 好的文章推荐参考 Android串口通讯SerialPort(使用篇) 与君共勉!待续 欢迎指错,一起学习

推荐阅读

每日一言

"<!doctype html> <html lang="Zh-cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="robots" content="noindex,nofollow"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <meta name="renderer" content="webkit"> <title>您请求的文件不存在!</title> <link type="text/css" rel="stylesheet" href="https://www.oick.cn/css/404.css" /> <link rel="shortcut icon" href="http://www.oick.cn/favicon.ico" type="image/x-icon" /> </head> <body> <div id="wrap"> <div> <img src="https://www.oick.cn/imgs/404.png" alt="404" /> </div> <div id="text"> <strong> <span></span> <a href="javascript:history.back()">返回上一页</a> </strong> </div> </div> <div class="animate below"></div> <div class="animate above"></div> </body> </html>"

...

站点统计

本周更新文章: 0 篇
文章总数: 59110 篇
今日访问量: 26296 次
访问总量: 210500 次