android裝置使用usb串口傳輸資料,android裝置usb串口

來源:互聯網
上載者:User

android裝置使用usb串口傳輸資料,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                 @Override12 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串口

 

 

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.