前段时间因为需要做一个物联网项目,需要使用到OrangePi, 定下里的方案是使用gpio通讯,但是发现香橙派没有通用的gpio驱动,所以只得这种选择串口通信。网上找了一波,使用RS232+USB通信是最便宜的解决方案,驱动的话使用开源库UsbSerial。也有之前Google 维护的库,但我觉着不好用。所以在这里献丑写上一篇博客。
导入
添加jitpack仓库到你的build.gradle文件
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
添加依赖到你的app中
compile 'com.github.felHR85:UsbSerial:4.5.2'
设备支持
CP210X devices Default: 9600,8,1,None,flow off
CDC devices Default 115200,8,1,None,flow off
FTDI devices Default: 9600,8,1,None,flow off
PL2303 devices Default 9600,8,1,None,flow off
CH34x devices Default 9600,8,1,None,flow off
使用
- 新建Service
public class UsbService extends Service {
public static final String ACTION_USB_READY = "com.felhr.connectivityservices.USB_READY";
public static final String ACTION_USB_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED";
public static final String ACTION_USB_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED";
public static final String ACTION_USB_NOT_SUPPORTED = "com.felhr.usbservice.USB_NOT_SUPPORTED";
public static final String ACTION_NO_USB = "com.felhr.usbservice.NO_USB";
public static final String ACTION_USB_PERMISSION_GRANTED = "com.felhr.usbservice.USB_PERMISSION_GRANTED";
public static final String ACTION_USB_PERMISSION_NOT_GRANTED = "com.felhr.usbservice.USB_PERMISSION_NOT_GRANTED";
public static final String ACTION_USB_DISCONNECTED = "com.felhr.usbservice.USB_DISCONNECTED";
public static final String ACTION_CDC_DRIVER_NOT_WORKING = "com.felhr.connectivityservices.ACTION_CDC_DRIVER_NOT_WORKING";
public static final String ACTION_USB_DEVICE_NOT_WORKING = "com.felhr.connectivityservices.ACTION_USB_DEVICE_NOT_WORKING";
public static final int MESSAGE_FROM_SERIAL_PORT = 0;
public static final int CTS_CHANGE = 1;
public static final int DSR_CHANGE = 2;
public static final int SYNC_READ = 3;
public static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
private static final int BAUD_RATE = 9600; // BaudRate. Change this value if you need
public static boolean SERVICE_CONNECTED = false;
private IBinder binder = new UsbBinder();
private Context context;
private Handler mHandler;
private UsbManager usbManager;
private UsbDevice device;
private UsbDeviceConnection connection;
private UsbSerialDevice serialPort;
private boolean serialPortConnected;
/*
* Data received from serial port will be received here.
* byte stream is converted to String and send to UI thread to
* be treated there.
*/
private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInter