android 串口一直打开_android 若何打开串口以及与串口通信

串口 若何 打开 通信 android android 串口通讯 androidusb转串口通讯 android 蓝牙串口通讯 android串口通讯demo ble串口通讯 android android 打开通讯录 android打开串口 android 打开串口失败 android如何打开串口

串口通信,对于没接触过这方面的伴侣们,确实会感应头疼,不知道从何下手。

其实,串口通信和办事器之间的通信是一样的,都是传一些参数曩昔,然后返回一些数据回来。不外串口通信管这些参数叫做指令,而这些指令是由硬件的通信和谈而定的,通信和谈分歧,指令天然也分歧。在我开辟的这个项目里,兼容了四种硬件通信和谈,这四种和谈各不不异,所以,那些指令就不在代码里面写出来了。

串口通信,第一步要做的当然是打开串口,打开串口的方式如下:

起首在app下成立一个libs文件夹,把.so文件复制到libs下

2434853-5269aef92973c052.png (64.03 KB, 下载次数: 0)

2434853-5269aef92973c052.png

2016-12-14 06:06 上传

QQ截图20161211220537.png

用android studio的伴侣们要记得在build.gradle  文件中添加这段  jniLibs.srcDirs = ['libs']  ,我有一次看见别人的代码里面可以不加这段,照样能运行,有知道的可以和大师分享一下。不外这些都不主要,只要能开串口就行。然后,在java的根目次下建一个包,留意是根目次,包名为:android_serialport_api,这个包名是固定的,不克不及少也不克不及多。然后把类SerialPort复制到包下面。

// JNI

private native static FileDescriptor open(String path, int baudrate, int flags);

public native void close();

static {   System.loadLibrary("serial_port");   }

`

上面的第一个函数open是挪用jni打开串口的方式,挪用该方式的时辰会返回一个FileDescriptor对象,经由过程该对象可以获取输入输出流。第二个close函数是封闭串口的方式,可以经由过程此方式封闭串口。这两个函数最好是能成对呈现,在法式打开的时辰把串口打开,法式退出了就把串口封闭,如许可以避免一些问题呈现。第三个是加载.so文件里面的代码的,加载了之后串谈锋能用。

···

public SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException {

System.out.println("device======"+device.getAbsolutePath());

/ Check access permission /

if (!device.canRead() || !device.canWrite()) {

try {

/ Missing read/write permission, trying to chmod the file /

Process    su = Runtime.getRuntime().exec("/system/bin/su");

String cmd = "chmod 666 " + device.getAbsolutePath() + "\n"

···

上面的这段代码中,su.getOutputStream().write(cmd.getBytes());这行是获取root权限的,打开串口是需要root权限的,假如不克不及获取root权限,串口也是打不开的,其他的就是一些判定了,在这就不做具体讲解了。

上面这些是开串口之前的预备,预备完毕后,我们来打开串口,打开串口就是挪用open函数,挪用open函数需要传三个参数,第一个参数path是串口名,好比:”/dev/ttyS0“,这些是按照现实接口来定的,第二个参数baudrate是波特率,一般都是9600,15200,这个需要按照硬件来定,第三个我就不清晰了,我都是传0,有知道的可以和大师分享一下。

···

/**

//            SerialPortState = true;

mReadThreadBox.start();

if (firstRegisterBox) {

if(mContext == null){

Log.e(TAG, "mContext nulll");

}

m_SerialRecBox = new SerialBroadcastReceiverBox(mContext);

m_SerialRecBox.registerAction();

firstRegisterBox = false;

Log.i(TAG, "----locker port--- 注册完毕");

}

lockerPortInterface.onLockerOutputStream(mOutputStreamBox);

} catch (SecurityException e) {

e.printStackTrace();

DisplayError(mContext,R.string.error_security);

} catch (IOException e) {

e.printStackTrace();

DisplayError(mContext,R.string.error_unknown);

} catch (InvalidParameterException e) {

e.printStackTrace();

DisplayError(mContext,R.string.error_configuration);

}

}

···

boxPort = new SerialPort(new File(path), baudrate, 0);这行代码是挪用SerialPort的组织方式,经由过程他的组织方式去挪用open函数,然后经由过程SerialPort对象来获取输入输出流。在这里注释一下,输入流是领受串口返回的数据,输出流是向串口发指令。 挪用SerialPort的组织方式可能会发生三种异常,第一种异常(SecurityException)是串口无读写权限,抛出这种异常的话就申明你可能没有root权限,第二种异常(IOException )串口不克不及打开,可能就是你没有这个串口,第三种异常(InvalidParameterException)是传的参数有误,可能是你的波特率不合错误。我理解的就是如许的,不知道对不合错误。

这是我用模拟器测试的,只要有请求root权限的页面,而且抛的是IO异常,打开串口应该就没问题了。

最后就是向串口发指令,向串口发指令是用输出流向串口写入,至于具体的指令是什么,需要按照和谈来定。发完指令之后串口会回数据成果给你,你需要领受这些数据来做营业,硬件分歧,回数据成果的体例也分歧,有些硬件是发完指令后把成果直接回给你,有些硬件是先给你一小部门,然后等1s再回别的一部门数据。

在我写的demo里面用的方式是针对硬件一次性把数据成果全数返回的体例,onLockerDataReceived直接用这个方式领受数据,如许就比力简单了。串口通信说到这里就竣事了。

最后贴上本身写的一个小demo地址:https://github.com/fm183/SerialportDemo.git,以供大师参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528854.shtml

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

相关文章

海康9800平台linux的sdk,流媒体项目外包海康9800平台sdk适配

1. 整体流程图,见附件;2. 任务描述:1》海康9800平台sdk适配;需要研究信令协议及开发对接程序(登陆平台,获取设备的列表,开启实时预览,停止实时预览等);需要研究音视频流的传输协议及…

python假设税前工资和税率如下_Python来做假设检验

对于任何一个频率派的数据科学家而言,日常做数据分析难免还是会用到一些假设检验方法做一个数据探索和相关性、差异性分析,并且这也是做后续统计模型(机器学习类预测模型可以略过)预测的第一步。这篇博文目的就是整理基本的假设检验方法、适用条件和调用…

linux fall delay 10,Cell的Rise delay和Fall delay、Rise transition和fall transition

Cell的Rise delay和Fall delay、Rise transition和Fall transition介绍:如下图所示为一个Cell的lib中关于cell_rise/cell_fall、rise_transition/fall_transition的描述:在NLDM模型的.lib中,cell_rise/cell_fall它描述的是Cell从输入到输出的…

linux定时器无法重启pm2,pm2无法自动重启

Hawk 3. 网页采集器1.基本入门 1. 原理(建议阅读) 网页采集器的功能是获取网页中的数据(废话).通常来说,目标可能是列表(如购物车列表),或是一个页面中的固定字段(如JD某商品的价格和介绍,在页面中只有一个).因此 ...man asciiLinux 2.6 - man page for ascii (linu…

linux ps 详解 博客,Linux PS 命令 详解(转)

Linux操作系统PS命令详细解析(转)要对系统中进程进行监测控制,用 ps 命令满足你。/bin/psps 是显示瞬间行程的状态,并不动态连续;如果想对进程运行时间监控,应该用 top 工具。kill 用于杀死进程。ps 的参数说明l 长格式输出&#…

三维空间坐标的旋转算法详解_视觉slam | 三维空间刚体运动的五种表达:旋转矩阵 变化矩阵 欧拉角 旋转向量 四元数及互相转换...

原po:高翔slam十四讲-刚体运动1.旋转矩阵考虑一次旋转Before: 坐标系(e1,e2,e3), 向量(a1,a2,a3)After: 坐标系(e1,e2,e3), 向量(a1,a2,a3)即得到a Ra R 称为旋转矩阵(R是一个正交矩阵, 行列式为1) 考虑旋转平移欧拉定理(Euler’s rotation theorem&…

c语言 字符串相似度,某课程设计---文件相似度判断

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//返回两个文件操作是否都成功return ( result1 && result2 );}//功能:将数据存储到文件内//输入:const char * FileName----想写入数据的文件名// :const char * Data----想写入的数据//输出:无//返回值:布尔型---真表…

python2版本异常_Python to.exe引发异常:此项目的版本控制需要sdisttarb

我试图从Python文件构建一个可执行文件。我能纠正大多数错误,但现在我被这一个卡住了,我不知道如何改正它。我的程序与jiraapi交互。在我使用Cx_Freeze来构建具有以下设置的.exe。py文件:import sysimport setuptoolsfrom cx_Freeze import s…

layer 同步调用_关于Layer组件的同步以及减少GPU带宽的问题

本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。问题:1) Layer 之间能否进行单独更新,比如其中video 层上面弹出的状态栏场景如何优化&#…

keil流水灯c语言程序两个一起亮,我用keil c51编了一个流水灯程序,编译无误却只有第一和第二个灯亮了,最后停在第一个灯处不动...

满意答案zJ张俭2014.02.09采纳率:43% 等级:12已帮助:10469人你有几个错误:1 你的定时器没有重装,导致第一次中断和后面的中断时间不一样,第一次时间短,后面的时间一直是以65536个周期中断的.2 你在中断函数里用了 for 循环,for循环是一下子…

pyquery获取不到网页完整源代码_python动态网页爬取:爬取pexel上的图片

前言同样的,我们在写一个爬虫前要明确自己想要爬取的东西是什么,明确下载目标数据在浏览器的操作如何对于动态网页的爬取,在网页地址不变的情况下,我们首先要明确如何获取AJAX请求首先我们看看这个网站pexel打开页面后再Chrome浏览…

c语言或命题,求一个“输入一条命题公式(与或非条件,最好有双条件的)求真值表的程序”...

回复 2楼 hahayezhe我晕,现在就是让你帮忙,把一个表都输出来的系统啊。让你做一个系统啊大哥。参考以下程序:#include #include #define MAXNUM 100 //栈最大元素个数#define MAXEXP 30 //允许用户输入的表达式…

python进阶与数据操控_零基础机器学习Python进阶:Python操作MySql

阅读文本大概需要 6 分钟前言基础写了十篇,以后会继续更,这是第二篇进阶,文末会放上链接,进阶分成另一个系列,柠檬有时间会整理好菜单栏让大家更方便的阅读基础和进阶,柠檬会把自己在当时做的项目写到进阶里…

c语言每条代码的含义,为我解释一下,代码的意思。谢谢了。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #define LEN sizeof(struct student)struct student{long num;intscore;struct student *next;};struct student lista,listb;int n,sum0;int main(){struct student *creat(void);struct student *insert(struc…

ios时间相差多少天_iOS 计算某个时间到现在是多少月/天/时

直接上代码,传入一个NSString类型的日期格式如newsDate "2013-08-09 17:01";或者newsDate "2013/08/09 17:01";返回如果有一个月,就不返回天,依次类推。-(NSString *)getUTCFormateDate:(NSString *)newsDate{// newsD…

calender获取日期前几月_java获取当前时间和前一天日期(实现代码)

String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/";Date dNow new Date(); //当前时间Date dBefore new Date();Calendar calendar Calendar.getInstance(); //得到日历calendar.setTim…

二级c语言题型分数,计算机二级C语言题型和评分标准

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了,正确运行,这样会不会给分?50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…

python矩阵乘法菜鸟_Python中的几种矩阵乘法(转)

一. np.dot()1.同线性代数中矩阵乘法的定义。np.dot(A, B)表示:对二维矩阵,计算真正意义上的矩阵乘积。对于一维矩阵,计算两者的内积。2.代码【code】import numpy as np# 2-D array: 2 x 3two_dim_matrix_one np.array([[1, 2, 3], [4, 5,…

W ndows找不到explorer,windows找不到explorer.exe的处理教程

很多网友入手windows过程里找不到explorer.exe,很是烦恼,为了帮助大家排忧解难,这里小编就分享了windows找不到explorer.exe的处理教程,希望可以帮助到大家。windows找不到explorer.exe的处理教程1、按winr打开运行窗口&#xff0…

vue2实践揭秘pdf_《Vue2实践揭秘》源码

todos 组件源码:{{title}}keyup.13"addItem"placeholder"快写下您要我记住的事吧"autofocus"true"/>{{index1}}.{{todo.value}}{{todo.created|date}}import ./assets/todos.lessimport moment from momentimport moment/locale/z…