1

distriqtのBluetooth ANEを使用して、AdafruitのBluefruit UARTデバイスを介してarduinoに接続しています。

接続、UART サービスの検索、特性の検索などを行うことができます。

ただし、デバイスの tx 特性にデータを送信すると、期待される応答が得られません。すべての更新で、rx 特性の値の長さがゼロになります。

Bluefruit アプリがあり、そこにある UART メッセージング ツールを介してコマンドを送信すると、正しい応答を確認できます。無意味なコマンドを送信した場合、長さゼロの応答しか得られません。

これは、データが正しい形式で送信されているかどうか疑問に思います。それを行う AS3 コードは次のとおりです。

var value:ByteArray = new ByteArray();
value.writeUTFBytes( msg );
sendUpdateMsg("trying to write to tx - value: " + msg);

var readSuccess:Boolean = _peripheral.readValueForCharacteristic(_rxChannel);
sendUpdateMsg("trying to read from rx before tx - outcome: " + readSuccess);

var success:Boolean = _peripheral.writeValueForCharacteristic( _txChannel, value );
sendUpdateMsg("trying to write to tx - outcome: " + success);

このsendUpdateMsg関数は、画面上のログにメッセージを書き込むだけです。rx 特性が更新されると、イベント ハンドラは次のようになります。

private function peripheral_characteristic_updatedHandler( event:CharacteristicEvent ):void
{
    sendUpdateMsg( "peripheral characteristic updated: " + event.characteristic.uuid );
    sendUpdateMsg( "length="+ event.characteristic.value.length.toString()  );
    sendUpdateMsg( "value="+ event.characteristic.value.readUTFBytes( event.characteristic.value.length )  );
}

これは、長さに対して常にゼロを出力し、値に対しては何も出力しません。

たとえば、「!D」を送信した場合、次のものとは異なる方法で処理する必要がありますか?

var value:ByteArray = new ByteArray();
value.writeUTFBytes( "!D" );

UART サービスによって正しく受信されるようにするには?

私は arduino 側にすぐにアクセスすることはできません - 開発者にデバッグを追加するように依頼することはできます - ナンセンスなメッセージであると感じるものをエコーバックするために - しかし、それは迅速ではありません.

4

2 に答える 2