0

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

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

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

4

1 回答 1

2

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

最常见的方法是:

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

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

于 2020-01-22T14:00:22.980 回答