当前位置: 首页 > 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(使用篇)
与君共勉!待续
欢迎指错,一起学习

相关文章:

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

SerialPort串口通讯学习和使用 SerialPortandroid-serialport-api源码下载 Android-SerialPort-API源码下载readme版本 Android-SerialPort-Tool源码下载 Android-Serialport源码下载使用方法readme android中使用串口通信使用android-serialport-api方式第1种 链接第2种 导入S…...

MySQL 启动选项和字符集

1. 客户端和服务器 1.1 服务器程序 数据库实例:代表 MySQL 服务器程序的进程( mysqld 可执行文件) mysqld_safe:启动脚本,会间接调用 mysqld 并监控服务器运行状态。出现错误时可以帮助重启服务器程序,输…...

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章

* 本文是来自Sui生态项目Typus团队的投稿,文中「我们」均指代该项目团队,转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念,这是一种我们用于 Typus V2 的新数据结构,以缓解 Sui 上数组和动态字段(dynamic field)…...

Linux根目录下的目录结构及其作用详解

Linux根目录是文件系统的最顶层,它包含了一些子目录,每个子目录都有特定的功能和存储的文件。只有了解了各个文件的使用功能,才能更好的去使用Linux系统。希望通过下面这张图能够让你更加了解根目录下的各个目录的功能。...

源码和SaaS账号:租房与自建房的区别

在当今数字化时代,软件已成为企业运营的重要支撑。然而,对于许多中小企业来说,获取和运营软件的方式有两种:源码和SaaS账号。这两者有何区别呢?让我们用租房和自建房的比喻来解释。 价格比较 源码:购买源码…...

Docker容器设置为自动重启

有时Docker服务出现异常,或者服务器出现异常,需要重启Docker服务或者服务器; 如果希望有一部分基础的或者常用的容器,在服务或者服务器重启的时候,可以实现自动启动,仅需使用命令进行简单配置即可实现。 D…...

速卖通卖家如何通过自己搭建测评补单系统,提高产品权重和排名?

速卖通卖家如何给店铺增加权重和排名? 在竞争激烈的速卖通平台上,为自己的店铺增加权重是吸引更多买家和提升销售的关键。店铺的权重决定着在搜索排名、推荐位和广告展示方面的优先级。今天珑哥为您介绍一些有效的策略,帮助您提升速卖通店铺…...

香港金融科技周2023:AIGC重塑金融形态

10月31日,由香港财经事务及库务局与投资推广署主办的“香港金融科技周2023大湾区专场”盛大启幕。中国AI决策领先企业萨摩耶云科技集团创始人、董事长兼 CEO林建明受邀参加圆桌会议,与中国内地、香港以及全球金融科技行业顶尖人才、创新企业、监管机构和…...

6G关键新兴技术-智能超表面(RIS)技术演进

一、产品定义及范围 根据欧盟5G公私联盟协会(5G Infrastructure Public-Private Partnership, 5GPP)定义,可重构智慧表面(Reconfigurable Intelligent Surface, RIS)技术是由能够任意塑造电磁波面的材料组成,几乎是被动(Passice)设备,可以适…...

怎么让小程序排名靠前?小程序搜索排名问题

小程序的排名是十分重要的,因为这会直接影响到用户的点击率,用户在搜索小程序时,会看到搜索引擎的前几条搜索结果,如果您的小程序不在这些位置上,很可能就会被忽略,所以,想要让用户能够看到您的…...

使用Postman快速复现浏览器的请求(包括生成调用代码)

前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 好久没有写开发类的工具使用文了,这…...

四则运算的正则校验

文章目录 四则运算的正则校验带有变量的四则运算的正则校验带有括号的四则运算的正则校验变量使用${}包裹的四则运算正则表达式变量使用${}包裹的可以有括号的四则运算正则表达式变量使用#{}包裹的可以有括号的四则运算正则表达式变量使用${}或者 #{}包裹的可以有括号的四则运算…...

【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源

一、 业务场景解释 由于公司业务需要开发设计一款文件读取导入工具,导入的配置和目标数据库并不一定在同一个数据库地址,故需要使用到自定义数据源,并且支持数据源切换 大致场景如下: 二、工具选择 鉴于市面上有很多工具&#…...

制作docker镜像文件

技术主题 Docker作为一个开源的应用容器引擎,制作自己的docker镜像文件是使用docker的第一步,这样我们能够更好地管理应用程序。 技术原理 技术原理一:安装Docker 一般都是在官网下载特定的docker文件,然后安装即可 技术原理…...

JAVA 中 Socket 和 WebSocket 区别

区别: Socket: Socket是位于java.net包下的一个类,是 Java 提供的用于在客户端和服务器之间建立网络通信的底层套接字接口,用于传输层的网络通信。 WebSocket: WebSocket 是一种基于 TCP 协议的通信协议,建立在 Socket 的基础上&#xff0c…...

python 接收到一个接口的数据 是json格式 ,然后把其中键值对的一个值改掉 再返回给接口

先上代码 import json import requests # 发送请求获取接口数据 response requests.get(http://example.com/api/data) # 解析JSON数据 data json.loads(response.text) # 更改某个键值对的值 new_value new_value data[key_to_change] new_value # 将更改后…...

⌈C++11⌋实现一个简易计算器

原理: 数据栈:有数据就直接入栈 运算符栈:设遍历到当前的运算符位e,如果栈不为空,比较栈顶与当前运算符优先级e,当栈顶运算符优先级大于或者等于e的优先级,则出栈,并将两个数据栈的…...

面试算法45:二叉树最低层最左边的值

题目 如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在如图7.5所示的二叉树中最低层最左边一个节点的值是5。 分析 可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时,每当遇到新…...

Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21.

前两天下了一个demo,运行时候报了一个这样的错,特此记录一下。 先看下报的错。 Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.5.21. Searched in the following…...

LoRaWan之LoRaMAC 的快速入门指南

概述 本快速入门指南简要介绍了 LoRaMAC 层的重要操作。示例部分提供了不同设备类别的完整示例。 初始化 LoRaMAC层的初始化函数是LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks, LoRaMacRegion_t region )。该函数具有三个参数:L…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...