distriqt Bluetooth LE ANE 中 sending/receiving UART rx 特性的数据格式

Data format for sending/receiving UART rx characteristic in distriqt Bluetooth LE ANE

我正在使用 distriqt 的蓝牙 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 方面的内容 - 我可以要求开发人员为我添加一些调试 - 以回显无意义的消息 - 但这不会很快。

可能是编码相关的问题,尽量不要使用字符串,直接使用字节

var ba:ByteArray = new ByteArray()
//Instead of "!D"
ba.writeByte(33);
ba.writeByte(68);

问题是我在邮件末尾缺少一个 LF 字符 (0x0A)。

这个有效:

var value:ByteArray = new ByteArray();
value.writeUTFBytes( msg );
if(value[value.length-1] != 0x0A) {
    value.writeByte(0x0A);
}

... 并允许我仅在需要时添加 0x0A - 取决于消息内容是来自文本输入还是编码字符串。