恢弘志士之气,不宜妄自菲薄。这篇文章主要讲述android设备使用usb串口传输数据相关的知识,希望能为你提供帮助。
首先介绍两个开源项目一个是Google的开源项目:https://code.google.com/archive/p/android-serialport-api/
另一个是我们这次介绍的开源项目:https://github.com/mik3y/usb-serial-for-android
第一步:获取所有的已插入的串口驱动
1 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 2 List< UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager); 3 if (availableDrivers.isEmpty()) { 4return; 5 }
【android设备使用usb串口传输数据】
然后,我们选择第一个dirver ,连接设备
1 UsbSerialDriver driver = availableDrivers.get(0); 2 UsbDeviceConnection connection = manager.openDevice(driver.getDevice()); 3 if (connection == null) { 4// You probably need to call UsbManager.requestPermission(driver.getDevice(), ..) 5return; 6 }
接下来就可以读数据了
1 // Read some data! Most have just one port (port 0). 2 UsbSerialPort port = driver.getPorts().get(0); 3 try { 4port.open(connection); 5 //设置串口的波特率、数据位,停止位,校验位 6port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); 7 8byte buffer[] = new byte[16]; 9int numBytesRead = port.read(buffer, 1000); 10Log.d(TAG, "Read " + numBytesRead + " bytes."); 11 } catch (IOException e) { 12// Deal with error. 13 } finally { 14port.close(); 15 }
当然,我们可以给串口添加个监听
11 private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); 22 private SerialInputOutputManager mSerialIoManager; 33 44 private final SerialInputOutputManager.Listener mListener = 55new SerialInputOutputManager.Listener() { 66@Override 77public void onRunError(Exception e) { 88Log.d(TAG, "Runner stopped."); 99} 10 10 11 11@Override 12 12public void onNewData(final byte[] data) { 13 13//TODO 新的数据 14 14} 15 15}; 16 16 17 17 mSerialIoManager = new SerialInputOutputManager(sPort, mListener); //添加监听 18 //在新的线程中监听串口的数据变化 19 18 mExecutor.submit(mSerialIoManager);
如果需要接受比较大的数据,有可能会遇到一个问题:数据缓存和接收时间不够,导致数据被覆盖或者丢失,我们就需要修改串口读取缓存了
把 SerialInputOutputManager 中的 READ_WAIT_MILLIS 和 BUFSIZ 改成合适的大小就可以了
写数据的操作就是调用port的方法
port.write(bytes, 1000);
其实这个开源项目已经为我们封装了很多驱动类,都在driver包下,我们直接拿来用就可以了
文章图片
有时间我针对Cp21xx驱动的usb串口讲一下如何区分多个usb串口
推荐阅读
- 安卓需求作业
- apply和call的区别
- Cocos2d-x3.3RC0通过JNI调用Android的Java层URI代码发送短信
- Eclipse+Maven整合开发Java项目?webapp3.0以上的Maven项目
- Android SQLite使用
- Android+GPS轨迹跟踪器
- Android攻城狮 WebView(显示网页)
- 文件上传时,上传到webapps目录下的文件会自动删除
- [Android&amp;Java]浅谈设计模式-代码篇(观察者模式Observer)