1

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

4

2 回答 2

2

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

这有效:

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

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

于 2017-06-20T09:53:37.907 回答
0

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

var ba:ByteArray = new ByteArray()
//Instead of "!D"
ba.writeByte(33);
ba.writeByte(68);
于 2017-06-20T08:04:17.780 回答