Android Studio中使用Dragino LA66 USB LoRa模块与Arduino通信失败的技术求助
Android Studio中使用Dragino LA66 USB LoRa模块与Arduino通信失败的技术求助
我正在开发一款控制无人机的Android应用,采用Dragino LA66 USB LoRa模块实现与Arduino板的通信。目前遇到的核心问题是:应用能识别到LA66模块,但无论怎么尝试,都无法将数据传输到Arduino端——Arduino通过IDE监控串口,完全收不到任何来自LoRa的内容。下面是我的具体实现和遇到的问题,希望能得到大家的指点。
已尝试的实现步骤与代码
1. 最初的串口发送代码
我先基于普通串口通信写了发送数据的方法,应用能识别USB设备,但调用此方法发送数据时,Arduino端毫无反应:
public static void sendComm(String msg) { byte[] msgBuff = msg.getBytes(); int msgLen = msgBuff.length; if (serialPort != null) { try { serialPort.write(msgBuff, msgLen); } catch (IOException e) { e.printStackTrace(); } } }
2. USB设备识别与权限请求
这部分代码在Activity的onCreate()中立即执行,用于识别LA66模块并请求权限:
for (UsbDevice device : deviceList.values()) { PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.aidan.dronecontroller.USB_PERMISSION"), PendingIntent.FLAG_IMMUTABLE); if (device.getVendorId() == 4292 && device.getProductId() == 60000) { usbManager.requestPermission(device, permissionIntent); if (usbManager.hasPermission(device)) { GlobalState.getInstance().setUSBConnected(true); } } la66 = device; }
3. 串口打开与LoRa配置
打开串口并尝试发送AT指令配置LA66模块,这部分执行后依然没有通信迹象:
private void openSerialPort(UsbDevice device) { UsbDeviceConnection connection = usbManager.openDevice(device); UsbSerialDriver driver = UsbSerialProber.getDefaultProber().probeDevice(device); if (driver == null) { // 尝试更激进的探测(后来发现这里和上面的探测逻辑重复了) driver = UsbSerialProber.getDefaultProber().probeDevice(device); } if (driver != null) { UsbSerialPort port = driver.getPorts().get(0); try { port.open(connection); port.setParameters( 9600, // 波特率 8, // 数据位 UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE ); serialPort = port; } catch (IOException e) { e.printStackTrace(); } } // 尝试发送AT指令配置LoRa参数 la66Msg = "AT+FRE="+freq+","+freq; sendComm(la66Msg); la66Msg = "AT+BW="+bw+","+bw; sendComm(la66Msg); la66Msg = "AT+SF="+sf+","+sf; sendComm(la66Msg); la66Msg = "AT+CR="+cr+","+cr; sendComm(la66Msg); }
其他尝试
我还试过用Dragino官方提供的示例app,但示例主要是日志输出,没有完整的发送数据逻辑,照着改后依然无法实现通信。
我的疑问与求助点
作为硬件+软件结合的新手,我实在找不到问题出在哪里,想请教大家:
- 我的USB权限请求逻辑有没有问题?比如在
onCreate()中直接请求,是不是权限还没获取到就执行了后续的串口操作? - 打开串口后发送AT指令的方式是否正确?会不会是模块没被正确配置,导致无法发送LoRa数据?
- 串口参数(波特率、数据位等)需要和Arduino端的LoRa模块完全一致吗?我目前是两边都设的9600/8/1/无校验,但不确定是不是这个问题。
- 有没有可能串口打开过程中出现了隐性错误,但我的错误处理不够完善,没捕捉到?
麻烦大家帮我看看哪里出问题了,或者有没有更规范的LA66模块Android开发流程可以参考?谢谢大家!




