我有一个Arduino通过串口发送和接收带有Python脚本的指令。

Arduino处于按钮状态,当它被按下时,它将通过串口发送消息到Python脚本并等待响应。 (通过Serial.available())。它运作良好。

但是,如果Python脚本由于某种原因而崩溃(理想情况下它将在后台运行,因此无法轻松检查),Arduino将永远等待,即使重新启动脚本也将无法使用。

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

有帮助吗?

解决方案

使用DSR / DTR引脚检测对方是否有某些内容的能力有限。

当你打开脚本运行的机器上的串口时,它应该提升它的DTR引脚(或者你应该能够说服它这样做:你用来驱动COM端口的库的文档应该告诉你你怎么样。。

然后,在您的Arduino上,您可以定期检查其DSR引脚(假设使用握手进行零调制解调器接线,其中PC DTR引脚连接到Arduino上的DSR + CD),并处理“无人连接”以任何你认为合适的方式。

此方法的一个问题是,当PC脚本崩溃/停止响应时,您的PC脚本可能无法关闭串行端口,而是启用DTR引脚,就像所有内容仍然正常一样。此外,由于串行线路上的错误,您的脚本可能会错过来自Arduino的消息。

出于这个原因,你应该总是在接收例程中实现超时:即使有一方在另一端收听,也不能保证它已收到你的消息(或者它的消息)回复将完整地告诉你。)

如果发生超时,则至少重新发送一次消息(假设DSR被引发)会使您的协议更可靠。

其他提示

Arduino不使用DSR线或任何其他握手线,因此您无法按照您的建议行事。

我同意mdb的超时是必要的,但也会补充说你可能想要实现简单的质询/响应系统,定期检查是否有人在监听。 (我喜欢ircd的Ping-Pong比喻)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top