收藏官网首页
查看: 5027|回复: 0

[分享] Android 串口通信开发学习总结和解析案例

77

主题

89

帖子

1938

积分

金牌会员

Rank: 6Rank: 6

积分
1938
跳转到指定楼层
楼主
 楼主| 发表于 2022-7-20 17:04:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
前言
之前遇到的关于硬件需求的厂家一般会提供jar包调用。一直没搞过直接和硬件通信的这种直接用二进制十六进制通讯的需求,最近有空了记录一下。一方面记录和总结一下自己的学习成果,另一方面整理好了自己参考的各位大佬的一部分有用的知识,希望可以帮当有需要的人
其实这东西一开始不会的时候感觉一看就摸不着头脑,弄清楚之后基本道理也就那样,没什么复杂的,只不过就是像解析JSON一样 道理都是一样的。
一般这种硬件通信的也就是两种:
1 串口通信
2 USB通信
USB通信的下一篇再写

提示:以下是本篇文章正文内容,下面案例可供参考

一、串口通信是什么?
先来看一下百度百科的介绍

串口即串行接口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

大白话就是串口就是一种类型的插口,传输数据的时候这个线可以理解为是个水管,水管有两个,都是单流向的,发数据就是水从自己的方向流过去,机器收到之后,通过另一个水管再把水送过来就是收数据,它不可能同时向两个方向送水,这就是串口的特点了。就是数据一位一位的传送。

就是下面这种排成一列的插口 引用一位博主的照片

这篇博文写的也不错
https://blog.csdn.net/qq_36270361/article/details/105405075



二、使用步骤
1.准备
在Android中,我们可以调用Unix的动态连接库(.so扩展名文件)来集成串口通信,这种调用的方式称为JNI(Java Native Interface,即Java本地接口)。

Google安卓官方已经提供了android-serialport-api 官方API
有兴趣的可以去了解一下,不过不推荐直接用这个,虽然是硬件的东西不怎么变但是都是九年前的代码了,再去集成也很麻烦。
大家用的基本都是另一个库,Android-Serialport,看一下介绍

移植谷歌官方串口库android-serialport-api,仅支持串口名称及波特率,该项目添加支持校验位、数据位、停止位、流控配置项
支持粘包处理

所以,放心用就是了,只是对谷歌的api进行的封装
用的时候自己去Github去拿最新版
Github地址

implementation 'tp.xmaihh:serialport:2.1'
1
对了有一个很少人提到的但是新手不知道的
搞串口的前提是要有ROOT权限!!
搞串口的前提是要有ROOT权限!!
搞串口的前提是要有ROOT权限!!
关于怎么获取,去找厂家要要系统签名吧
可以参考我的另一个文章
Android 生成系统签名keystore 并添加到已有keystore 方便Gradle命令多渠道打包

2.使用
首先你需要两个参数,找你的硬件厂家要
1波特率
2串口地址
因为java和kotlin的项目都用到了我都贴出了
  1.     private SerialHelper serialHelper;
  2.     private void initQrCodeSerialPort() {
  3.         //参数:1。串口地址2波特开车
  4.         serialHelper = new SerialHelper("/dev/ttyS1", 9600) {
  5.             @Override
  6.             protected void onDataReceived(ComBean paramComBean) {
  7.                 //子线程操作 解析数据
  8.                 //返回数据
  9.                 byte[] bRec = paramComBean.bRec;
  10.                 //解析方法设备不同所以逻辑不同,具体根据厂家沟通和说明文档来写下面有例子
  11.         };
  12.         try {
  13.             serialHelper.open();
  14.         } catch (IOException e) {
  15.             Logger.e(e, "二维码串口打开失败");
  16.          }
  17.     }

复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表