当前位置: 首页 > news >正文

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

SerialPort串口通讯学习和使用

  • SerialPort
    • android-serialport-api
      • 源码下载
    • Android-SerialPort-API
      • 源码下载
      • readme
      • 版本
    • Android-SerialPort-Tool
      • 源码下载
    • Android-Serialport
      • 源码下载
      • 使用方法
      • readme
  • android中使用串口通信
    • 使用android-serialport-api方式
      • 第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 源

Android-SerialPort-API

源码下载

licheedev/Android-SerialPort-API
在这里插入图片描述

readme

在这里插入图片描述
在这里插入图片描述

版本

添加依赖: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 选择其他版本。
在这里插入图片描述

Android-SerialPort-Tool

源码下载

licheedev/Android-SerialPort-Tool
在这里插入图片描述

Android-Serialport

源码下载

xmaihh/Android-Serialport
在这里插入图片描述

使用方法

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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中
在这里插入图片描述

在这里插入图片描述
2、将Android-SerialPort-API中的java下的文件复制到项目中java
在这里插入图片描述
在这里插入图片描述
3、修改app的build.gradle文件,在android {}里添加支持的cpu架构

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

第3种 编译SerialPort模块

1、将Android-SerialPort-API中的serialport模块复制到工程中,目录与app文件同级
在这里插入图片描述
在这里插入图片描述
2、修改settings.gradle,将改成如下,即增加serialport模块

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

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

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

串口通信部分代码

待续

好的文章推荐参考

Android串口通讯SerialPort(使用篇)
与君共勉!待续
欢迎指错,一起学习

http://www.lryc.cn/news/213946.html

相关文章:

  • MySQL 启动选项和字符集
  • 社区投稿|解码Big Vector,开启Sui超扩展性的新篇章
  • Linux根目录下的目录结构及其作用详解
  • 源码和SaaS账号:租房与自建房的区别
  • Docker容器设置为自动重启
  • 速卖通卖家如何通过自己搭建测评补单系统,提高产品权重和排名?
  • 香港金融科技周2023:AIGC重塑金融形态
  • 6G关键新兴技术-智能超表面(RIS)技术演进
  • 怎么让小程序排名靠前?小程序搜索排名问题
  • 使用Postman快速复现浏览器的请求(包括生成调用代码)
  • 四则运算的正则校验
  • 【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源
  • 制作docker镜像文件
  • JAVA 中 Socket 和 WebSocket 区别
  • python 接收到一个接口的数据 是json格式 ,然后把其中键值对的一个值改掉 再返回给接口
  • ⌈C++11⌋实现一个简易计算器
  • 面试算法45:二叉树最低层最左边的值
  • Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21.
  • LoRaWan之LoRaMAC 的快速入门指南
  • 中国教育企业出海 新兴技术助力抢占先机
  • IntelliJ IDEA2023旗舰版和社区版下载安装教程(图解)
  • 【RxJava】map过程中各个Observable生命周期分析
  • vue 获取上一周和获取下一周的日期时间
  • 线性代数 第四章 线性方程组
  • @DateTimeFormat和@JsonFormat注解
  • 做抖音短视频会经历哪些阶段?
  • 【Mquant】2、量化平台的选择
  • iPhone手机如何恢复删除的视频?整理了3个好用方法!
  • 全网最全的RDMA拥塞控制入门基础教程
  • 分布式消息队列:RabbitMQ(1)