Python:'\x00'随机出现在从arduino到raspberry pi的序列中

2024-06-01 08:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过/dev/ttyUSB0端口将数据从arduino流回到raspberry pi。我在pi端使用python读取传入的串行数据。为了调试的目的,我目前正在打印每一个串行读取线(). 下面可以看到两行调试:

['A','337','731','88\r\n']

['A','33\x009','1931','8\r\n']

每隔一段时间,就会有一个随机的\x00出现在数据中,我不知道它是从哪里来的。我还没有简化arduino的串行通信,所以我相信它将每个数字作为一个单独的字节发送,比如3 3 3\x00 9,因此这一点显然可以改进。在

而且,这似乎只发生在我运行串行通信在一个单独的线程在python。。。我不太熟悉python中的多线程,但这似乎太重复了,不可能是巧合。在

一些相关的代码 Arduino公司:

Serial2.print(F("A,"));
Serial2.print(startingAngle + ix);
Serial2.print(F(","));
Serial2.print(int(aryDist[ix]));
Serial2.print(F(","));
Serial2.println(aryQuality[ix]);

Python:

^{pr2}$

在thread函数中:

with serial.Serial('/dev/ttyUSB0', 115200, timeout=1) as ser:
   ser.write(b'ShowDist\n')
   while True:
      s = ser.readline()
      vals = s.split(',')

同样,如果我只是在线程之外调用函数,它似乎可以正常工作。你知道这个“\x00”是从哪里来的吗?为什么它只在多线程时发生?最后,我希望将每个值强制转换为一个int,当包含额外的字节时,它将中断。。。我也会对一种在解析前检查字节是否正常的廉价计算方法感兴趣。。。据我所知,try-catch方法可以减慢速度。在

谢谢


Tags: 数据端口dev目的字节piraspberryarduino
1条回答
网友
1楼 · 发布于 2024-06-01 08:15:51

我在使用python2.7中的pyserial在ubuntu中使用类似的设置时也遇到了相同的行为。我正在实现一个与设备串行通信rs-232的驱动程序。由于我的软件假设对设备进行独占处理,我深入研究后发现Linux不支持对串行端口的独占访问(或者至少不支持直接访问)。所以为了看看我的驱动程序会出什么问题(非排他性的原因),我在我的驱动程序运行时,通过python控制台打开了同一个端口。这与您描述的问题完全相同,有趣的是即使我关闭控制台中的端口,问题仍然存在。除非完全关闭用于打开串行端口的线程(在我的例子中是exit ipython),否则问题不会停止。在

相关问题 更多 >