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.mzph.cn/news/130915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZZ308 物联网应用与服务赛题第A套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (A卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的…

【npm run dev 报错:error:0308010C:digital envelope routines::unsupported】

问题原因: nodejs版本太高(nodejs v17版本发布了openSSL3.0对短发和密钥大小增加了更为严格的限制,nodejs v17之前版本没有影响,但之后的版本会出现这个错误,物品的node版本是20.9.0) 解决方式&#xff1…

6.Spark共享变量

概述 共享变量 共享变量的工作原理Broadcast VariableAccumulator 共享变量 共享变量的工作原理 通常,当给 Spark 操作的函数(如 mpa 或 reduce) 在 Spark 集群上执行时,函数中的变量单独的拷贝到各个节点上,函数执行时,使用…

毅速丨3D打印在压铸模上大有所为

压铸模是压铸件成型不可缺少的工具。它的作用是将液态的金属或合金浇入到预先准备好的型腔中,并在压力的作用下凝固、成形。3D打印技术在压铸模上的使用,尤其是随形水路的应用,将大幅度提升制造效率。 在传统的压铸模制造中,水路的…

uniapp 解决H5跨域的问题

uniapp 解决h5跨域问题 manifest.json manifest.json文件中,点击“源码视图”,在此对象的最后添加以下代码: "h5" : {"devServer" : {"port" : 8080, //端口号"disableHostCheck" : true,"proxy" :…

云安全—docker Deamon攻击面

0x00 前言 本篇文章主要是讲docker Deamon的原理以及docker Deamon攻击面相关的内容,属于抛砖引玉系列,如有不妥之处还请斧正。 0x01 docker Deamon 还是先来看一下docker Deamon的一些相关知识,依旧是采用问答的方式来进行。为了文章的整…

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 带安装教程

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件,吃瓜视频,或其他资源内容,通过用户付费买会员来变现,用户需要付费,有些人喜欢白嫖,所以会流失一部分用户,所以就写了这个系统…

C++二叉搜索树

本章主要是二叉树的进阶部分,学习搜索二叉树可以更好理解后面的map和set的特性。 1.二叉搜索树概念 二叉搜索树的递归定义为:非空左子树所有元素都小于根节点的值,非空右子树所有元素都大于根节点的值,而左右子树也是二叉搜索树…

GEE数据集——原住民土地(原住民土地地图)数据集

原住民土地(原住民土地地图) 土地承认是人们在日常生活中融入原住民存在和土地权利意识的一种方式。这通常在仪式、讲座或教育指南开始时进行。它可以是一种明确但有限的方式来认识殖民主义和第一民族的历史以及定居者殖民社会变革的需要。在这种情况下…

053基于web+springboot的宠物咖啡馆平台的设计与实现

欢迎大家关注,一起好好学习,天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本基于Spring Boot的宠物咖啡馆平台的设计与实现有管理员和用户以及看护师三个角色。用户功能有个人中心,咖啡菜品管理&a…

微信小程序授权登录获取用户的openid

小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系然而因为小程序中的openid不可以直接使用需要用code(登录凭证)去换取openid 获取openid的思路 获取openid首先需要调用小程序的login方法…

S5PV210(十):LCD

本文主要探讨210的LCD相关知识。 LCD LCD称液晶(透光背光呈色),可在电信号驱动下使液晶分子旋转,呈现不同的颜色(被动发光) lcd接口为TTL接口(5V为1,0V为0),不能传输太远,远距离传输方式:SoC(TTL) ->VGA-> LCD(TTL) 其他显设备:CRT(…

基于STM32设计的室内环境监测系统(华为云IOT)_2023

一、设计需求 基于STM32+华为云物联网平台设计一个室内环境监测系统,以STM32系列单片机为主控器件,采集室内温湿度、空气质量、光照强度等环境参数,将采集的数据结果在本地通过LCD屏幕显示,同时上传到华为云平台并将上传的数据在Android移动端能够实时显示、查看。 【1…

windows自动登陆

新建文本粘贴下面代码,另存为注册表文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing] "Policy"hex:00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultUserN…

2024最新mac电脑清理垃圾的软件有哪些?

mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…

微信小程序获取openid

1.需要小程序中调用 wx.login获取临时code值(每次获取的code值只能用一次) wx.login({success (res) {console.log(res)} }) 打印结果为: 2.调用微信提供的apid接口,获取openid,入参需要三个参数:AppID(小…

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML

目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 (1)源码 (2)生成效果 三、使用LINQ操作XML 1.…

Java字符串常用函数 详解5000字 (刷题向 / 应用向)

1.直接定义字符串 直接定义字符串是指使用双引号表示字符串中的内容,例如"Hello Java"、"Java 编程"等。具体方法是用字符串常量直接初始化一个 String 对象,示例如下: 1. String str"Hello Java"; 或者 …

【C++语法讲解】 | 运算符重构 | 三种运算符的重构方式 |代码演示

文章目录 1,简述2,结构体的定义1,结构体的声明2,结构体的申请 3.1 ,在结构体中重构3.2 在结构体外进行重构 1,简述 通常情况下,我们会创建一些简单的数据结构以应对日常的算法使用,…

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery 前言问题描述排查索引库分词(发现问题)如何去解决这个问题?IK 分词器NGram 分词器使用替换 NGram 分词器后进行测试matchPhraseQuery 查…