开始学android,在串口上卡了十几个小时后靠GitHub解放了我。

首先是这个库:

https://github.com/mik3y/usb-serial-for-android

按照大佬的指示,第一步添加库引用:

Add jitpack.io repository to your root build.gradle:

allprojects {repositories {...maven { url 'https://jitpack.io' }}
}

Add library to dependencies

dependencies {implementation 'com.github.mik3y:usb-serial-for-android:3.4.2'
}

使用新版android studio的时候要注意,

maven { url 'https://jitpack.io' }

这段代码要放在setting.gradle里面。。。不然会报错说找不到。

第二步添加程序读写USB的权限。在自己的AndroidManifest.xml里面加如下内容。

<activityandroid:name="..."...><intent-filter><action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /></intent-filter><meta-dataandroid:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"android:resource="@xml/device_filter" />
</activity>

然后在studio中新建device_filter.xml文件,如下图

第三步,开始写代码

代码很简单,两按钮,一个打开串口一个关闭串口。打开串口后根据协议读温度显示在TextView上。串口七合一空气采样模块的说明和购买链接见https://item.taobao.com/item.htm?spm=a230r.1.14.24.61c02c16A0NTtD&id=568535232415&ns=1&abbucket=3#detail。

public class MainActivity extends AppCompatActivity {UsbSerialPort port;SerialInputOutputManager usbio;ArrayList<Byte> buffer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn_openport=(Button) this.findViewById(R.id.open_port);TextView tx=(TextView) this.findViewById(R.id.serial_data);btn_openport.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);if (availableDrivers.isEmpty()) {return;}// Open a connection to the first available driver.UsbSerialDriver driver = availableDrivers.get(0);UsbDeviceConnection connection = manager.openDevice(driver.getDevice());if (connection == null) {// add UsbManager.requestPermission(driver.getDevice(), ..) handling herereturn;}port = driver.getPorts().get(0); // Most devices have just one port (port 0)try{port.open(connection);port.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);Log.i("port","open success");buffer=new ArrayList<Byte>();usbio=new SerialInputOutputManager(port, new SerialInputOutputManager.Listener() {@Overridepublic void onNewData(byte[] data) {Log.i("port read size",String.valueOf(data.length));if(data.length>0){for(int i=0;i<data.length;i++){buffer.add(data[i]);Log.i("port read",String.valueOf(data[i]));}if(buffer.size()>=17){for(int i=0;i<buffer.size();i++){if(buffer.get(i)==0x3c && buffer.get(i+1)==0x02 && (i+17)<=buffer.size()){Log.i("tmp",String.valueOf(buffer.get(i+12)));String temp=String.valueOf(buffer.get(i+12))+"."+String.valueOf(buffer.get(i+13));runOnUiThread(() -> {tx.setText(temp);});//把温度显示在UI上,中断函数不允许操作UI,所以要另开一个线程buffer.clear();}}}}}@Overridepublic void onRunError(Exception e) {}});usbio.start();}catch (IOException e){}}});Button btn_closeport=(Button) this.findViewById(R.id.close_port);btn_closeport.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try{usbio.stop();port.close();Log.i("port","close port");}catch (IOException e){}}});}
}

需要注意的就是onNewData基本上每来1个字节就触发一次,因为9600的波特率太低了,1ms来一个字节。。。所以需要自己维护一个数组或者队列,当数组或队列的长度足够大且检测到有一串完整协议数据的时候读出温度值 。

android串口通信相关推荐

  1. Android串口通信实例分析【附源码】

    Android 串口通信实例分析,用的时开源的android-serialport-api 这个是用android ndk实现的串口通信,我把他做了一个简化,适合于一般的程序的串口通信移植,欢迎拍砖- ...

  2. Android串口通信apk源码

    1.SerialPortHelper「Android串口通信」介绍 原项目地址 https://github.com/freyskill/SerialPortHelper Android串口通讯助手可 ...

  3. 串口通信工具android,Android串口通信工具

    Android串口通信简单封装,可以用于和连接串口的硬件通信或者进行硬件调试 集成方法: Step 1. Add the JitPack repository to your build file / ...

  4. CH340与Android串口通信

    CH340与Android串口通信 为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio 移植的具体步骤 CH340串口通信驱动函数 通信过程中重难点 还存在的问题 ...

  5. android串口通信——身份证识别器

    android串口通信身份证识别器 一身份证识别器基础 调用身份证识别器的步骤 波特率 基本指令 身份证信息结构 文字结构说明 民族代码对照表 性别代码对照表 二身份证的读取 读取的方法调用 身份证的 ...

  6. modbus协议使用【android串口通信】

    modbus协议使用[android串口通信] 本文的目的是android端与上位机之间使用modbus协议进行串口通信.通过串口与其他设备进行通信,传递数据.可以理解为电脑和键盘.鼠标通信. 关于m ...

  7. android串口通信——电子扫描枪

    android串口通信--电子扫描枪  我们这里开始介绍电子扫描枪(串口的),在开发中我们可能用到电子扫描枪这么一个玩意.比如,我们在做一个可以说扫描条码的app的时候,就会用到,这种情况一般都是运行 ...

  8. Android串口通信-AndroidStudio

    用到谷歌开源serialPort api  下载链接:serialPort-api 以下项目用的so库是谷歌原库,没有做修改 新建项目: 1.先把下载的api中这些文件拷进项目的相应位置 Serial ...

  9. Android串口通信:串口读写

    FROM:http://blog.csdn.net/burly/article/details/50512379 公司有个项目要用到串口通信,同事有写好一个DEMO,用的时候发现会有问题,从jni读串 ...

  10. android串口通信——android-serialport-api

    一.串口通信原理 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用 ...

最新文章

  1. Centos7 下安装python3及卸载
  2. solr创建core
  3. UEditor使用报错Cannot set property 'innerHTML' of undefined
  4. Linux系统下常用rpm包搜索网站
  5. VS2013 UML 如何复制文件
  6. javaweb学习总结(四十二)——Filter(过滤器)学习
  7. java常用的框架介绍
  8. php error_get_last(),PHP捕获异常register_shutdown_function和error_get_last的使用
  9. springcloud微服务系列之服务注册与发现组件Eureka
  10. python编程例子-几个Python小案例,爱上Python编程!
  11. 令前端工程师追捧的一款前端开发IDE工具WebStorm
  12. java项目开发的生命周期
  13. 成长的痛苦:流播放服务令音乐人版税受损
  14. 恢复matlab文件关联
  15. 零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO
  16. centos安装unrar并使用
  17. android 高德地图定位圈,android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)...
  18. 2018 Google I/O 中最重要的十项更新
  19. java中的事件都继承自_下列说法中不正确的是()。A.Java语言中的事件都是继承自Java.awt.AW-TEvent类B.AWTEve...
  20. Fms+Vcam实现flv网络直播

热门文章

  1. python接入微信支付_干货分享:微信跨境支付接入全流程
  2. java正则表达式中的数量词介绍及区别
  3. 设置div背景图片填满div
  4. php怎么读取上传文件的md5,利用PHP怎么获取远程http文件的md5值
  5. 佳能单反摄像机MOV视频恢复
  6. java在苹果电脑上编程软件下载_KOOV编程软件mac版下载
  7. swagger 返回值描述
  8. PDF文件怎么编辑,PDF怎么删除空白页面
  9. 单片机cpu寄存器 c语言,51单片机共有21个特殊功能寄存器
  10. Mac OS 使用远程桌面登录服务器