2008-10-12 61 views
5

我有一个Arduino通过串口发送和接收Python脚本的指令。检查串口是否正在侦听

阿尔杜伊诺需要一个按钮状态,并且当它被按下时,它会通过串行端口将消息发送到一个Python脚本并等待响应。 (通过Serial.available())。它工作得很好。但是,如果Python脚本因任何原因崩溃(理想情况下它会在后台运行,因此无法轻易检查),Arduino将永远等待,即使在脚本重新启动时也将无法使用。

有没有办法让我的Arduino检查串口是否有东西在监听? (如果没有,闪烁的灯光等提醒我)或者这不是串行工作方式?最糟糕的情况我想我可以使用超时,但这并不理想。

回答

6

你要检测是否存在通过使用DSR/DTR引脚东西监听对方的能力有限。

当你打开你的脚本上运行的机器上的串行端口,它应该提高它的DTR引脚(或你应该能够说服它这样做:库的文档中,你用它来驱动器应该COM端口告诉你如何)。然后,在你的Arduino上,你可以定期检查它的DSR引脚(假定Null-modem接线与握手,其中PC DTR引脚连接到Arduino上的DSR + CD),然后处理'nobody connected '以任何你认为合适的方式。这种方法

一个问题是,您的PC脚本可能无法关闭串口,当它崩溃/停止响应,留下仿佛一切都还行启用DTR引脚。此外,由于串行线路上的错误,您的脚本可能会错过Arduino的消息。

因此,您应该总是使用在您的接收例程中实现一个超时:即使有一方正在另一端侦听,也不能保证它已收到您的消息(或其响应将达到您完整)。

重新发送该消息的至少一次(假定DSR升高)如果发生超时,使你的协议更可靠。

+0

干杯队友。作为一个有趣的观点,谷歌在发布它3分钟后选择了你的答案。 – Hyposaurus 2008-10-12 11:07:02

0

我同意MDB是超时是必要的,但也想补充一点,你可能想实现简单的挑战/响应系统,如果有人在听的是定期检查。 (我喜欢ircd的乒乓球比喻)。

1

Arduino的不使用DSR线或任何其他握手线,所以你不能你有什么建议。

相关问题