この問題の後 、 Android > 4.1.2 での Bluetooth 接続を 強制的に接続することで修正しましたが、しばらく繰り返して接続しようとすると、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);
}
}
「hello horld」などの文字列をArduinoに送信すると、一連の送信でシリアルモニターに次のように表示されます。
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 に送信する頻度にも依存します。ほとんどの場合、4 番目と 9 番目のバイト (ただし、必ずしも同じ方法であるとは限らず、必ずしもそれらだけであるとは限りません) が一致しません。
Arduino から Android へのデータ送信は、特に問題なく動作するようです。
3 バイトを超えるデータを送信する必要がある限り、このことは私を夢中にさせています。ありがとう