如何在 gsm 调制解调器通信上使用 nanopb,其中 CTRL+Z 等特定字符在 AT 命令中用作 msg 终止?



在寻找序列化-反序列化选项时,我遇到了用于使用谷歌协议缓冲区的32位控制器的nanopb。

当我好奇地尝试在gsm调制解调器上进行mqtt通信时,我意识到我无法让nanopb的编码机制知道如何处理转义字符/特殊字符,例如CTRL + Z,因为它们都以十六进制格式编码。(例如;十六进制中的 CTRL+Z 是 0x1A(,gsm 调制解调器使用 0x1A 作为消息终止字符。因此,当通过 AT 命令向调制解调器发送 nanopb 编码消息时,调制解调器会将包含 0x1A 的编码消息解释为 CTRL+Z,而这不应该解释为CTRL+Z。

在这种情况下可以使用nanopb吗?还是我做错了什么?

这是调制解调器的一个非常常见的问题,适用于任何二进制数据。所有调制解调器都有传输二进制数据的方法,但该方法可能因调制解调器型号而异。

最常见的方法是:

  • 使用两个 UART,一个用于命令,一个用于数据。
  • 使用 AT 命令和转义序列在命令和数据模式之间切换。通常用ATDATO切换到数据模式,然后暂停+++暂停切换回命令模式。在转义序列中使用暂停可防止其他数据中发生的+++导致问题,但会减慢传输速度。
  • 使用单独的信号线(通常DTR(在命令和数据模式之间切换。
  • 转义带有前缀的二进制字符,例如DLE=0x10字符,这会更改以下字符的含义。

您的调制解调器很可能至少支持其中一种甚至多种方法,但您需要查看其手册以了解如何配置它。

最新更新