当前位置:   article > 正文

Android 串口通信_usbserialforandroid

usbserialforandroid

   可以使用开源usb-serial-for-android 库进行串口通信

  1. 添加 usb-serial-for-android 依赖项到项目中。在项目的 build.gradle 文件中添加以下内容:
dependencies {
    // 其他依赖项...
    implementation 'com.github.mik3y:usb-serial-for-android:3.5.1'
    // 其他依赖项...
}

2、在AndroidManifest.xml 文件中添加 USB 权限声明:

<uses-permission android:name="android.permission.USB_PERMISSION" />

  3. 创建一个类来处理串口通信:

  1. import android.content.Context;
  2. import android.hardware.usb.UsbDevice;
  3. import android.hardware.usb.UsbDeviceConnection;
  4. import android.hardware.usb.UsbManager;
  5. import com.hoho.android.usbserial.driver.CdcAcmSerialDriver;
  6. import com.hoho.android.usbserial.driver.ProbeTable;
  7. import com.hoho.android.usbserial.driver.UsbSerialDriver;
  8. import com.hoho.android.usbserial.driver.UsbSerialPort;
  9. import com.hoho.android.usbserial.driver.UsbSerialProber;
  10. import java.io.IOException;
  11. import java.util.List;
  12. public class USBSerialHelper {
  13. private UsbManager usbManager;
  14. private UsbSerialPort usbSerialPort;
  15. private UsbDeviceConnection connection;
  16. private OnDataReceivedListener onDataReceivedListener;
  17. private ReadThread readThread;
  18. public interface OnDataReceivedListener {
  19. void onDataReceived(byte[] data);
  20. }
  21. public USBSerialHelper(Context context, OnDataReceivedListener listener) {
  22. usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
  23. onDataReceivedListener = listener;
  24. }
  25. public void openDevice() throws IOException {
  26. ProbeTable customTable = new ProbeTable();
  27. customTable.addProduct(0x2341, 0x0043, CdcAcmSerialDriver.class);
  28. UsbSerialProber prober = new UsbSerialProber(customTable);
  29. List<UsbSerialDriver> availableDrivers = prober.findAllDrivers(usbManager);
  30. if (!availableDrivers.isEmpty()) {
  31. UsbSerialDriver driver = availableDrivers.get(0);
  32. UsbDevice device = driver.getDevice();
  33. connection = usbManager.openDevice(device);
  34. usbSerialPort = driver.getPorts().get(0);
  35. usbSerialPort.open(connection);
  36. usbSerialPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
  37. readThread = new ReadThread();
  38. readThread.start();
  39. } else {
  40. throw new IOException("No USB serial device found");
  41. }
  42. }
  43. public void closeDevice() {
  44. if (readThread != null) {
  45. readThread.interrupt();
  46. readThread = null;
  47. }
  48. if (usbSerialPort != null) {
  49. try {
  50. usbSerialPort.close();
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. usbSerialPort = null;
  55. }
  56. if (connection != null) {
  57. connection.close();
  58. connection = null;
  59. }
  60. }
  61. public void sendData(byte[] data) throws IOException {
  62. if (usbSerialPort != null) {
  63. usbSerialPort.write(data, 1000);
  64. }
  65. }
  66. private class ReadThread extends Thread {
  67. @Override
  68. public void run() {
  69. byte[] buffer = new byte[1024];
  70. int numBytes;
  71. while (!isInterrupted()) {
  72. try {
  73. numBytes = usbSerialPort.read(buffer, 1000);
  74. if (numBytes > 0) {
  75. byte[] data = new byte[numBytes];
  76. System.arraycopy(buffer, 0, data, 0, numBytes);
  77. onDataReceivedListener.onDataReceived(data);
  78. }
  79. } catch (IOException e) {
  80. e.printStackTrace();
  81. break;
  82. }
  83. }
  84. }
  85. }

4. 在代码中使用串口通信类:

  1. public class MainActivity extends AppCompatActivity implements USBSerialHelper.OnDataReceivedListener {
  2. private USBSerialHelper usbSerialHelper;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. usbSerialHelper = new USBSerialHelper(this, this);
  8. try {
  9. usbSerialHelper.openDevice();
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13. // 示例:发送数据
  14. byte[] sendData = "Hello, USB!".getBytes();
  15. try {
  16. usbSerialHelper.sendData(sendData);
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. @Override
  22. protected void onDestroy() {
  23. super.onDestroy();
  24. usbSerialHelper.closeDevice();
  25. }
  26. @Override
  27. public void onDataReceived(byte[] data) {
  28. // 处理接收到的数据
  29. String receivedData = new String(data);
  30. Log.d("USBSerialHelper", "Received data: " + receivedData);
  31. }
  32. }

MainActivityonCreate() 方法中创建了一个 USBSerialHelper 实例,并调用 openDevice() 方法打开 USB 设备进行通信。

然后,使用 sendData() 方法发送数据到 USB 设备。将字符串 "Hello, USB!" 转换为字节数组,并发送给 USB 设备。

最后,在 onDataReceived() 方法中处理接收到的数据。将接收到的字节数组转换为字符串,并打印到日志中。

请确保在使用之前已经获取了 USB 权限,并根据实际的 USB 设备进行相应的配置(例如波特率、数据位、停止位、校验位等)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/211571
推荐阅读
相关标签
  

闽ICP备14008679号