0

我仍然无法从 DSD 技术的 HM-11 蓝牙写入手机应用程序(Play 商店中的串行蓝牙终端 1.35)。

根据我上一篇文章的结果,我的代码目前将一个大字符串切成 2,因为 BLE 的最大缓冲区约为 252 字节。我面临的问题是目前需要delay(450)来防止乱码。

    BTSerial.print(F( "============== RGBCube Bluetooth Help ==============\n"
                      "Commands:                                           \n"
                      "  mode:#                 select mode to operate in  \n"
                      "  help                   pull up help screen (this) \n"
                      " Mode 4 only:                                       \n"
                      "  reset                  resets cube to black       \n"
                      "  pt:x,y,z=r,g,b         sets led at (x,y,z) to rgb \n"
                      "  set:r,g,b;r,g,b...     sets entire cube to the    \n"
                      ));
    delay(450);
    BTSerial.print(F( "                         specified colour           \n"
                      "                         64 colours long. Faster    \n"
                      "                         than 64 pt calls           \n"
                      ));

延迟输出:

============== RGBCube 蓝牙帮助 =============== 命令:
mode:# 选择在
帮助中操作的模式 拉起帮助屏幕(this)模式仅限 4:
reset 将立方体重置为黑色
pt:x,y,z=r,g,b 将 (x,y,z) 处的 LED 设置为 rgb set:r,g,b;r,g,b... 设置整个立方体到
指定的颜色
64 色长。
比 64 点呼叫更快

不延误:

============== RGBCube 蓝牙帮助 =============== 命令:
mode:# 选择在
帮助中操作的模式 拉起帮助屏幕(this)模式仅限 4:
reset 将立方体重置为黑色
,b;r,g,b... setspt:x,y,z=r,g,b 整个立方体到

我认为这与清除串行的速度有关,但是花那么长时间没有意义,因为 450 毫秒在计算机时间中非常长,尤其是在蓝牙的 115200 波特时

4

1 回答 1

0

根据我收集到的信息,这是 BLE 消息传递系统的限制。BLE 没有串行通信之类的东西,一切都是基于类型数据包的。不知何故,我手机上的应用程序能够进行通信并向其发送长达 252 字节的数据包,并将其伪装成串行数据,这样就不会被注意到。这么多之后,BLE 无法发送这么多数据,缓冲区就会变得混乱。有更多BLE经验的人可能可以解释,但这是我的结果。

要进行补救,请切换到仅支持串行的常规蓝牙(HC-05 或 HC-06 或同等产品,而不是 BLE)。由于没有键入数据包之类的东西,它可以工作。我刚刚换掉了组件(完全相同的引脚排列,所以 1 对 1 交换)并解决了问题。感谢上面的人的建议,但事实证明这是问题所在。

于 2021-09-10T03:06:36.660 回答