【Android】usb-serial-for-androidの使い方
使うとき
使用する際の流れはたぶん...
1. USBデバイスを取得
-> UsbManagerクラスの getSystemService
2. USBシリアルとして使用できるデバイスドライバのリストを列挙
-> UsbSerialProberクラスの getDefaultProber().findAllDrivers(usbManager)
3. 使用するUSBドライバでデバイスを開く
-> UsbManagerクラスの openDevice()
4. 使用するUSBドライバでUSBポートを開く
-> UsbSerialPortクラスの open()
5. シリアル通信パラメータ(BaudRateなど)を設定する
-> UsbSerialPortクラスのsetParameters()
6. データ送信要求をセットする *Arduino系と通信する際はこれが必要。
-> UsbSerialPortクラスのsetDTR()
7. データを送受信する
-> UsbSerialPortクラスのread/write
またはSerialInputOutputManager.Listenerクラスを実装してonNewDataメソッドをOverrideする
USBデバイスとそのデバイスのポートを開く必要がある。
また、6.のsetDTRをしないと通信がスタートしない物もあるので注意。
別途USBのパーミッション処理が必要。
使用例はこちら
public class BindServiceSensorHandling extends Service implements SerialInputOutputManager.Listener{ public SerialInputOutputManager usbIoManager; private UsbDeviceConnection usbConnection; private UsbSerialDriver usbdriver; public UsbSerialPort usbSerialPort; // 1 UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); // 2 List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager); // 3 usbdriver = availableDrivers.get(0); usbConnection = usbManager.openDevice(usbdriver.getDevice()); // 4. Open USB port usbSerialPort = usbdriver.getPorts().get(0); // Most devices have just one port (port 0) usbSerialPort.open(usbConnection); // 5 usbSerialPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); // 6 usbSerialPort.setDTR(true); // 7. Listenerクラスをセット.非同期処理を開始 usbIoManager = new SerialInputOutputManager(usbSerialPort, this); Executors.newSingleThreadExecutor().submit(usbIoManager); }
終わるとき
1. USBポートを閉じる
-> UsbSerialPortクラスのclose()
2. リスナーを止める
-> UsbInputOutputManagerクラスのstop()
使用例はこちら
private void disconnect(){ if (usbSerialPort != null) { try { // 1 usbSerialPort.close(); usbSerialPort = null; } catch (IOException e) { } } if(usbIoManager != null) // 2 usbIoManager.stop(); usbIoManager = null; }