用于在蓝牙中发送/接收UART rx特性的数据格式LE

时间:2017-06-19 17:25:11

标签: bluetooth distriqt

我使用distriqt的蓝牙ANE通过Adafruit的Bluefruit UART设备连接到arduino。

我可以连接,找到UART服务,找到特征等。

但是,当我将数据发送到设备的tx特性时,我没有得到预期的响应 - 所有更新都给出了rx特征值的长度零长度。 / p>

我有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方面的东西 - 我可以要求开发人员为我添加一些调试 - 回应一下废话消息的感觉 - 但这不会发生快点。

2 个答案:

答案 0 :(得分:1)

问题是我在邮件末尾丢失了一个LF字符(0x0A)。

这有效:

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

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

答案 1 :(得分:0)

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

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