Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android裝置使用usb串口傳輸數據

android裝置使用usb串口傳輸數據

編輯:Android開發教程

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()) {
4   return;
5 }

 

然後,我們選擇第一個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(), ..)
5   return;
6 }

 

接下來就可以讀數據了

 1 // Read some data! Most have just one port (port 0).
 2 UsbSerialPort port = driver.getPorts().get(0);
 3 try {
 4   port.open(connection);
 5 //設置串口的波特率、數據位,停止位,校驗位
 6   port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
 7 
 8   byte buffer[] = new byte[16];
 9   int numBytesRead = port.read(buffer, 1000);
10   Log.d(TAG, "Read " + numBytesRead + " bytes.");
11 } catch (IOException e) {
12   // Deal with error.
13 } finally {
14   port.close();
15 }

 

當然,我們可以給串口添加個監聽

 1  1 private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
 2  2 private SerialInputOutputManager mSerialIoManager;
 3  3 
 4  4 private final SerialInputOutputManager.Listener mListener =
 5  5             new SerialInputOutputManager.Listener() {
 6  6                 @Override
 7  7                 public void onRunError(Exception e) {
 8  8                     Log.d(TAG, "Runner stopped.");
 9  9                 }
10 10 
11 11                 @Override
12 12                 public 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串口

 

 

 

  

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved