这个 MQTT-SN 桥有什么问题?

物联网 MQTT 劳拉
2021-06-16 04:59:14

我正在使用这个 MQTT-SN 网桥,除了我操纵它以在它不包含有效的 MQTT-SN 数据包时提供缓冲区的十六进制转储之外,没有任何变化。

我遇到了一个奇怪的问题:有时我发现桥接器工作得很好,有时我发现我在下面描述的问题。我有一个 ESP32 微控制器,它只是在这里和那里发布一条消息,说它还活着。如您所见,它还查询各种传感器(湿度、灰尘...),并发布结果。它正在写入 LoRa 模块,相应地,我在插入笔记本电脑的 USB 记忆棒上有一个 LoRa 模块。然后我跑

./mqtt-sn-serial-bridge -b 19200 /dev/ttyUSB0

查看如下输出:

2019-09-17 12:20:18 ERROR Error reading rest of packet from serial port: 0, 22
2019-09-17 12:20:19 WARN  Read 10 bytes but packet length is 165 bytes.
....|.....  0xa5 0x08 0xa0 0xa6 0x7c 0x84 0x85 0x0c 0x86 0x85 
2019-09-17 12:20:19 WARN  Read 17 bytes but packet length is 37 bytes.
%..@..H.........f   0x25 0xc5 0x0c 0x40 0x87 0x84 0x48 0x04 0x85 0x9c 0xc4 0x85 0x88 0xc4 0x86 0xee 0x66 
2019-09-17 12:20:21 WARN  Read 8 bytes but packet length is 40 bytes.
(.....xD    0x28 0xa5 0x04 0xc0 0xa2 0x87 0x78 0x44 
2019-09-17 12:20:23 WARN  Read 8 bytes but packet length is 67 bytes.
C.......    0x43 0xa5 0x0a 0xc0 0x82 0x0a 0x06 0xf6 

如果我跑screen /dev/ttyUSB0 19200 8n1我会得到这样的东西:

bf5fish5 is a live"b9H0.000000 relative humidity
                                                bf5PM2.5 = 10bf5PM10 = 11bf5fish5 is a live"b9H0.000000 relative humidity
                                                                                                                         bf5PM2.5 = 10bf5PM10 = 11

我发现值得注意的是,虽然 screen 可以获取人类可读的字符,但 MQTT-SN 桥接器似乎只是垃圾。

有没有人有过这座桥的经验?我不确定是桥本身的问题还是 LoRa 基板的问题。或者谁能​​看到我哪里出错了?

1个回答

波特率

我发现值得注意的是,虽然 screen 可以获取人类可读的字符,但 MQTT-SN 桥接器似乎只是垃圾。

结果证明这是追踪问题的重要部分。GNU 屏幕设置了波特率,但mqtt-sn-serial-bridge没有这样做。那是因为

$ ./mqtt-sn-serial-bridge -?
Usage: mqtt-sn-serial-bridge [opts] <device>

  -b <baud>      Set the baud rate. Defaults to 13.
  -d             Increase debug level by one. -d can occur multiple times.
  -dd            Enable extended debugging - display packets in hex.
  -h <host>      MQTT-SN host to connect to. Defaults to '127.0.0.1'.
  -p <port>      Network port to connect to. Defaults to 1883.
  --fe           Enables Forwarder Encapsulation. Mqtt-sn packets are encapsulated according to MQTT-SN Protocol Specification v1.2, chapter 5.5 Forwarder Encapsulation.

该选项-b的参数不采用波特率。看,它的默认值是 13,相当奇怪的波特率,不是吗。它需要一个数字,该数字被移交给设置波特率的一些较低级别的 API。在我的系统上,这些数字及其相应的波特率是:

 0:      0
 50:     1
 75:     2
 110:    3
 134:    4
 150:    5
 200:    6
 300:    7
 600:    8
 1200:   9
 1800:   10
 2400:   11
 4800:   12
 9600:   13
 19200:  14
 38400:  15
 57600:  4097
 115200: 4098
 230400: 4099

所以你可以使用-b 13将波特率设置为9600。或者使用-b 14将波特率设置为19200。这对我来说真的很不直观,所以[我分叉了项目][1]以确保-b采用实际的波特率但是,这有从那以后就被修复了。