在 Android > 4.1.2 中的蓝牙连接问题之后 ,我通过反复尝试连接一段时间迭代来强制连接,现在我遇到了 Android/Arduino 通信的另一个问题。我的硬件是带有 Android 4.3、Arduino UNO R3 和 BT 模块 RN42 的 Nexus 7 MY2012。
从 Android 中,我向 Arduino 发送从字符串中获取的字节数组。一开始,波特率为 115200 且没有奇偶校验,只有第一个字节正确到达,其余字节显然不匹配(主要以重复的方式)。在 RN42 模块中设置奇偶校验 EVEN 后,我看到至少前 3 个字节正确到达,其余的都搞砸了。下面是Android通信的核心部分(BT的初始化基本遵循SDK示例)。它位于用于管理连接工作的 AsyncTask 类中:
public void write(String message) {
Log.d(TAG, "...Data to send: " + message + "...");
byte[] msgBuffer = message.getBytes();
try {
mmOutStream.write(msgBuffer);
} catch (IOException e) {
mHardwareToServiceHdlr.obtainMessage(MSG_ERR_BT_WRITE).sendToTarget();
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
}
和 Arduino 草图
#include <SoftwareSerial.h>
#include <Streaming.h>
const int bluetoothTx = 2;
const int bluetoothRx = 3;
byte incomingByte;
String incomingString;
SoftwareSerial bluetooth(bluetoothTx,bluetoothRx);
void setup() {
Serial.begin(115200);
bluetooth.begin(115200);
bluetooth.print("$$$");
delay(100);
bluetooth.println("U,115K,E");
bluetooth.begin(115200);
delay(100);
}
void loop(){
if (bluetooth.available() > 0) { // if the data came
incomingByte = bluetooth.read(); // read byte
Serial.println((char)incomingByte);
}
}
如果我向 Arduino 发送一个字符串,例如“hello horld”,这就是我在串行监视器中在一系列传输中得到的:
hel,o wo2ld
hel<o wo2ld
hel,o7orld
hel,o wo2ld
hel,o wo2ld
hel<o7or6d
hel,o wo2ld
hel,o wo2ld
hel,o wo2ld
hel<o wo2ld
hel,o7orld
hel<o wo2ld
这只是示例,结果还取决于我将字符串发送到 Arduino 的频率。大多数时候,第四和第九个字节(但并不总是以相同的方式,也不总是只有它们)是不匹配的。
将数据从 Arduino 传输到 Android 似乎在遇到任何特殊问题时都能正常工作。
任何帮助都会非常感激,这件事让我发疯,因为我需要传输超过 3 个字节的数据。谢谢