Android终端硬件通讯总结(串口通讯、Usb Com、Usb、蓝牙、Wifi)

世界杯开始 2025-09-18 16:50:46

前言

如果你开发的App需要与硬件做通讯,获取相应数据进行业务处理,这个库肯定对你有帮助。常见的硬件通讯连接方式有:串口通讯、Usb Com、Usb、蓝牙(包括BLE)、Wifi等,实际硬件支持哪种连接方式,要看硬件支持哪种方式。应用层硬件通讯方案有两种:

硬件供应商有提供SDK,不需要关注连接通讯实现,直接集成到App中使用即可硬件供应商没有提供SDK,单提供有通讯协议,这时候自己需要分析协议流程和写通讯代码

本文针对第二点,封装了一个基础的、轻量级的通讯库,支持多种连接方式串口通讯、Usb Com、Usb、蓝牙(包括BLE)、Wifi,通讯流程为:

1. 初始化连接实例 2. 打开连接 3. 读写数据 4. 关闭连接

通讯库特点:上层调用一致,底层不同实现,方便使用者切换连接方式。为简化上层调用和方便数据处理,全部连接采用同步操作,即一发一收(一问一答)的方式通讯

调用

1.初始化实例

//串口

BaseConnectProvider baseConnectProvider = new SerialPortConnectProvider(SerialPortConfig serialPortConfig);

//Usb Com

BaseConnectProvider baseConnectProvider = new UsbComConnectProvider(int vendorId, int productId, SerialPortConfig serialPortConfig);

//or

BaseConnectProvider baseConnectProvider = new UsbComConnectProvider(UsbDevice usbDevice, SerialPortConfig serialPortConfig);

//Usb

BaseConnectProvider baseConnectProvider = new UsbConnectProvider(int vendorId, int productId);

//or

BaseConnectProvider baseConnectProvider = new UsbConnectProvider(UsbDevice usbDevice);

//默认蓝牙 Com

BaseConnectProvider baseConnectProvider = new BluetoothConnectProvider(BluetoothDevice bluetoothDevice);

BaseConnectProvider baseConnectProvider = new BluetoothConnectProvider(String address);

//指定蓝牙服务UUID

BaseConnectProvider baseConnectProvider = new BluetoothConnectProvider(BluetoothDevice bluetoothDevice, String uuid);

BaseConnectProvider baseConnectProvider = new BluetoothConnectProvider(String address, String uuid);

//Wifi

BaseConnectProvider baseConnectProvider = new WifiConnectProvider(String host, int port, int connectTimeout, int readTimeout);

//特别地:蓝牙Ble

BluetoothLeConnectProvider connectProvider = new BluetoothLeConnectProvider(BluetoothDevice bluetoothDevice);

BluetoothLeConnectProvider connectProvider = new BluetoothLeConnectProvider(String address);

2.打开连接

baseConnectProvider.open();

3.写和读数据

baseConnectProvider.read(byte[] sendParams, byte[] buffer, int timeout);

3.1 蓝牙Ble通讯

蓝牙Ble,与其它连接方式不好统一,故做特殊处理

//特征写请求,其它请求创建不同的实例发送即可

CharacteristicWriteRequest bluetoothLeRequest = new CharacteristicWriteRequest();

bluetoothLeRequest.setService(UUID_SERVICE);

bluetoothLeRequest.setCharacter(UUID_CHARACTER_WRITE);

bluetoothLeRequest.setBytes(sendData);

BluetoothLeResponse response = new BluetoothLeResponse();

bluetoothLeRequest.sendRequest(bluetoothLeRequest,response,5*1000);

//蓝牙ble监听服务端(也叫从机/外围设备/peripheral)数据,分两步操作

//1.监听通知信息

bluetoothLeConnectProvider.setBluetoothLeNotifyListener(new BluetoothLeNotifyListener() {

@Override

public void onNotify(UUID serviceId, UUID characterId, byte[] value) {

}

});

//2.开启通知

NotifyRequest notifyRequest = new NotifyRequest();

notifyRequest.setService(UUID_SERVICE);

notifyRequest.setCharacter(UUID_CHARACTER_READ);

notifyRequest.setEnable(true);

BluetoothLeResponse response = new BluetoothLeResponse();

bluetoothLeConnectProvider.sendRequest(notifyRequest,response,5*1000);

4.关闭连接

baseConnectProvider.close();

小结

上面只是陈述了简单调用流程,实际使用要注意组装命令的格式是否正确,设备连接参数,数据转换等等,特别注意的是:不用连接实例的时候,要关闭连接,避免fd泄露,导致应用崩溃。

更多用法参考

DeviceConnector,欢迎star 注:V1.1.0版本开始支持低功耗蓝牙

PC端数据包监控工具-Bus Hound

Bus hound是一款为了在pc电脑上进行总线数据包监控以及操控的开发工具。用来捕捉来自设备的协议包和输入输出操作,它是功能强大的总线协议分析器

支持监听:

USB 1.0 - 4.0 NVMe SATA & IDE SCSI & ATAPI FireWire, 1394A/B Bluetooth Fibre Channel iSCSI, SAS PC Card, PCMCIA serial port parallel port ps/2 ports

下载地址:https://perisoft.net/bushound/index.htm

更多文章:

关于Android终端机串口的理解 串口通信扩展知识