Bluetooth 分布式蓝牙设备中发送/接收UART rx特性的数据格式

Bluetooth 分布式蓝牙设备中发送/接收UART rx特性的数据格式,bluetooth,distriqt,Bluetooth,Distriqt,我正在通过Adafruit的Bluefruit UART设备连接arduino,使用distriqt的蓝牙电子邮件 我可以连接,找到UART服务,找到特性等 然而,当我向设备的tx特性发送数据时,我没有得到预期的响应-所有更新都给我零长度的rx特性值 我有Bluefruit应用程序,当我通过其中的UART消息工具发送命令时,可以看到正确的响应。如果我发送一个无意义的命令,我只会得到一个零长度的响应 这使我怀疑数据是否以正确的格式发送。AS3代码的作用是: var value:ByteArray

我正在通过Adafruit的Bluefruit UART设备连接arduino,使用distriqt的蓝牙电子邮件

我可以连接,找到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,这取决于消息内容是来自文本输入还是编码字符串。

Aha。。。他最终到达了那里。在textInput中写入相同的命令,然后从那里复制它
(msg=input.text)
的效果与预期一样,因此它必须需要一个终端字符。看起来0x0A可以正常工作(左前)。