本人最近刚开始学习android,学习大概将近一个月。学着学着突然想做个小东西出来。因为android前面的学习主要是UI
界面的学习,就想着做一个通信的串口 来实现app与外部的数据传输。通过界面的控制来实现串口数据的收发和接受。
一 android_serial_api的配置
1 首先是准备工作,需要配置串口的api ,这个东西别人已经都打包好了 ,我们只需要将api里面的文件配置赋值过来就好了
下载链接:android_serial_api
然后按照下图将api中的文件复制到相应位置 注意各个文件的包含关系 不要放错了
注意:SerialPort类是咱们Android可以调用的类,很重要的一点强调 如果你的设备里面su 的位置不在“system/xbin/su”中的话
请记得在这个类里面修改xbin为bin (应该在这两个其中一个)

jni目录下放着c源码和h头文件,
jniLibs下面放的就是so库。
因为用的谷歌原生so库,所以SerialPort类的包名一定要是android_serialport_api,如果想修改这个包名,就需要重新生成对应的so库
(其实API文件里面还有个SerialPortFinder.java文件 这个文件是当你不知道设备的具体串口号时 要用到的 我们这里一直开发板的串口设置为ttSAC3 所以用不到)
2、在src 下的build.gradle中添加如下代码:


sourceSets {
main { jni.srcDirs = [] }
}


ndk {
abiFilters “armeabi”, “armeabi-v7a”, “x86”, “mips”
}
至此 串口开发环境的配置已经好了
二 .接下来就会Activity类的编写了
首先我们需要知道大概步骤
1.设置波特率 串口号
2 获取串口对象 打开串口
3 发送数据
4 接受数据

我就用了一个mainActivity类来编写这个
1.获取串口对象 以及设置波特率

//获取串口对象
private SerialPort getSerialPort() {if (serialPort == null) {String path = "/dev/ttySAC3";//先确定你的设备的串口号 一定要找准 不然很容易闪退try {serialPort = new SerialPort(new File(path), baudrate, 0);//baudrate 在前面已经设置为9600;} catch (IOException e) {e.printStackTrace();}}return serialPort;
}

这里首先是通过API 里面的SerialPort类来定义了一个串口对象 通过设置固定的串口号和 波特率来获取串口对象
2 连接串口

//连接串口public void connect(View view) {view.setClickable(false);//按下连接按钮后这个按钮不能再继续点击diconnect.setClickable(true);//断开按钮可以点击serialPort = getSerialPort();if (serialPort == null) {Toast.makeText(MainActivity.this, "串口打开失败", Toast.LENGTH_SHORT).show();return;}mOutputStream = serialPort.getOutputStream();//获取输出流对象mInputStream = serialPort.getInputStream();//获取输入流对象ReadThread readThread = new ReadThread();//获取线程对象readThread.start();//线程开启

3 断开串口

//断开串口连接public void disConnect(View view) throws IOException {view.setClickable(false);//按下断开按钮后这个按钮不能再继续点击connect.setClickable(true);//连接按钮可以点击if (mInputStream != null){mInputStream.close();//关闭输入流}if (mOutputStream != null){mOutputStream.close();//关闭输出流}//关闭串口if (serialPort != null) {//串口对象不为空时serialPort.close();//关闭串口serialPort = null;//串口对象赋值null}

4 通过多线程来监控数据

 private class ReadThread extends Thread {@Overridepublic void run() {super.run();while (!isInterrupted()) {//如果线程没被打断Log.d(TAG, "进入线程run");int size;try {byte[] buffer = new byte[64];if (mInputStream == null) return;//如果输入流没开 直接返回不进行下面的数据读取size = mInputStream.read(buffer);if (size > 0) {onDataReceived(buffer, size);Log.d(TAG, "有数据进来了呀");}} catch (IOException e) {Log.e(TAG, "run: 数据读取异常" + e.toString());e.printStackTrace();return;}}}
}

5 获取数据

 //这里主要是将得到的字节数据进行获取public void onDataReceived(final byte[] buffer, final int size) {runOnUiThread(new Runnable() {@Overridepublic void run() {tv_message.append(new String(buffer, 0, size));//第二个参数是从数据流的哪里开始取,第三个参数是截取的数据个数}});}

6 发送数据

//发送数据public void send(String data) {Log.d(TAG, "sendSerialPort: 发送数据" + data);try {byte[] sendData = data.getBytes("gb2312");//将字节转换为gb2312 类型 则可以输出汉字this.data_ = new String(sendData);//强制转换为字符串if (sendData.length > 0) {mOutputStream.write(sendData);//将数据写入输出流mOutputStream.write('\n');mOutputStream.flush();Log.d(TAG, "sendSerialPort: 发送串口数据成功");}

最后就是的想说的是 说的是自己在学习的过程中遇到的问题
1 导入别人的demo 这个请看 我总结的另外一篇博客:AndroidStudio里面导入别人的demo详细步骤
2.尽量用真机调试 用模拟器的话 还要去 cmd里面为模拟器设置 串口设备号 可能会遇到一些 adb 出错的一些问题
以上就是我的源码展示 本人是小菜鸟 如有不对 请各位大佬指正
demo :可供参考。

Android开发串口通信之开发板的串口通信相关推荐

  1. 安卓开发板之串口通信,通过modbus Rtu协议控制下位机

    安卓开发板之串口通信,通过modbus Rtu协议控制下位机 1.环境准备 2.编写串口操作核心类 3.编写测试类 前言:因为公司最近有个人脸识别门禁的项目,这个项目主要业务是实现远程人脸注册,管理员 ...

  2. Android开发板之串口开发

    Android开发板之串口开发 简介 首先描述一下我的应用项目,它是一个简单的智能盒子,主要内容:是通过Android开发板上的串口进行数据的读取操作,一块android开发板外接一个Arduino, ...

  3. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(DMA)

    一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...

  4. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(RS485)

    一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...

  5. 22.从零开始开发QT软件思路(单片机的串口通信)-- OpenCV从零开始到图像(人脸 + 物体)识别系列

    本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 链接:https://mp.weixin.qq.com/s?__biz=MzU1MTgxNjQyMg==&temp ...

  6. IMX6ULL 开发板 UART3串口驱动,并与压力传感器通讯,获取压力值

    硬件设备:正点原子的IMX6U-ALPHA开发板:薄膜压力传感器. 第一部分:添加设备树 首先:因为 I.MX6U 的 UART 驱动 NXP 已经编写好了,我们只需在设备树中添加 UART3 对应的 ...

  7. 树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

    本博文介绍采用Thonny+MicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序,将Pico W无线开发板.电脑或An ...

  8. DSP:6678开发板NDK网口通信完整实现(附源码)

    如果出现图片打不开,或是显示异常,请点击下方链接阅读原文!!! DSP:6678开发板NDK网口通信完整实现(附源码) - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/ ...

  9. Android蓝牙通信功能开发

    1. 概述 Bluetooth 是几乎现在每部手机标准配备的功能,多用于耳机 mic 等设备与手机的连接,除此之外,还可以多部手机之间建立 bluetooth 通信,本文就通过 SDK 中带的一个聊天 ...

最新文章

  1. php如何保存服务器会话,如何用PHP在服务器上创建会话?
  2. 清除距今天7天的日志
  3. Windows上搭建Python安装包MySQLdb
  4. 15 错误边界与使用技巧
  5. python字典获取关联值_【Python实战12】使用字典关联数据
  6. 云图说|分布式事务管理DTM:“买买买”背后的小帮手
  7. discuz上传附件失败问题解决办法
  8. [Teamcenter 2007 开发系列] 整合Extjs 展现页面组件
  9. POJ1182 食物链---(经典种类并查集)
  10. 【Beta】Scrum Meeting 3
  11. 数据+人工智能+模型——北京市新一代交通仿真模型框架
  12. lombok 基础注解之 @Cleanup
  13. 搜狗输入法5.0正式版发布 首创云计算输入
  14. Kubernetes上安装weblogic monitoring exporter
  15. 字符串在html中的页面中的换行
  16. 杭电考研经验贴,0基础观看
  17. iMindMap中的灵感触发工具该怎么运用
  18. CSS兄弟选择器(选择所有兄弟姐妹)
  19. html5自由者,郎平将选择双自由人战术!仿造天津女排战术,00后小将无缘奥运...
  20. Qt+VTK+OCCT读取IGES/STEP模型

热门文章

  1. FPGA 学习之路(一)EDA软件设计流程
  2. python_制作Windows安装程序包
  3. beehive 结构_关于Apache Beehive的热议
  4. Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
  5. java算法之简单的矩阵螺旋式遍历Spiral Matrix
  6. 气传导耳机哪个牌子好?备受好评的气传导耳机推荐
  7. 金仓KingbaseES中数据库逻辑备份总结
  8. 数字图像处理--冈萨雷斯第4版--第三章 灰度变换
  9. 视频教程-微信公众号使用教程-微信开发
  10. 人工智能 其实还有点“笨”