serial-port arduino亂碼 - 檢查串口是否在監聽





serial教學 tx (4)


通過使用DSR / DTR引腳,您可以檢測是否有聽到另一邊的內容。

當你打開機器上的串口時你的腳本運行,它應該提高它的DTR引腳(或者你應該能夠說服它做到這一點:用來驅動COM端口的庫的文檔應該告訴你如何) 。

然後,在你的Arduino上,你可以定期的檢查它的DSR引腳(假設在調製解調器上使用Null-modem線路,PC DTR引腳連接到Arduino上的DSR + CD),並在任何情況下處理“nobody connected”場景你認為合適的方式。

這種方法的一個問題是,當腳本崩潰/停止響應時,您的PC腳本可能不會關閉串行端口,從而使DTR引腳保持啟用狀態,就好像一切仍然正常。 而且,由於串口線路上的錯誤,您的腳本可能會錯過Arduino的消息。

出於這個原因,你應該總是在你的接收例程中實現一個超時:即使有一方在另一端監聽,也不能保證它已經收到你的消息(或者它的響應將完整地傳達給你)。

如果發生超時,重新發送消息至少一次(假設DSR發生),使您的協議更可靠。

我有一個Arduino通過串口發送和接收Python腳本的指令。

Arduino處於按鈕狀態,當它被按下時,它會通過串口發送一條消息給一個Python腳本並等待響應。 (通過Serial.available() )。 它工作得很好。

但是,如果Python腳本因為任何原因崩潰(理想情況下它會在後台運行,所以不能輕易檢查),Arduino將永遠等待,即使重新啟動腳本也將無法使用。

有沒有辦法讓我的Arduino檢查是否有東西在串口監聽? (如果沒有,閃爍的燈光等提醒我)或者這不是如何串行工作? 最壞的情況我想我可以使用超時,雖然這並不理想。




Arduino不使用DSR線或任何其他握手線,所以你不能做你的建議。




我同意mdb,超時是必要的,但也會增加,你可能想要實現簡單的挑戰/響應系統,定期檢查是否有人正在傾聽。 (我喜歡ircd的乒乓球比喻)。




也許這個問題可能完全是愚蠢的,但是有沒有人考慮使用X / Y / Z MODEM協議之一?

使用上述協議之一的主要好處是在各種編程環境中即用型實現的可用性很高。





serial-port arduino