仮想COMポート設定でArduinoデバイスを制御できるように、socatを使用してネットワーク経由でシリアル入力をルーティングしています。
socatを起動するコマンドは次のとおりです。
socat /dev/serial0,b500000,raw,echo=0 TCP-LISTEN:9876,nodelay,fork&
デバイスがポート:9876に初めて接続されると、これらすべてが正しく機能します。ただし、もう一方の端(Windowsではcom2tcpを使用)から切断された場合、追加の接続はネットワーク経由でRasPiホスティングsocatおよびシリアルデバイスにシリアルを送信しますが、/ dev / serial0ではデータを受信しません。元のsocatプロセスを終了し、ポートが解放されるのを待ってからsocatを再実行する必要があります。 RasPiがヘッドレスで動作することを考えると、これらの迷惑を避けたいと思います。
複数の非同時接続がこのように機能するようにする方法はありますか?投稿にどのような設定を追加する必要があるのecho=0
でしょうか。
(追加の説明:私が使用しているGIMXというソフトウェアが要求するものであるため、500000転送速度が必要です。この設定の目的は、次のコマンドを使用して他の部屋のデバイスを使用してゲームコンソールに接続できるようにすることです/etc/rc.local
。 Volumioを使用してメディアプレーヤーとしても機能するため、起動時にsocatを起動します。これはバックグラウンドで実行されます。
編集:ついにsocat / com2tcpパスを放棄し、RFC2247準拠の接続を実装しました。つまり、必要に応じてボーレートを手動で設定することを心配する必要はなく、より安定したブートが可能なようです。私の情報に基づいてhttps://robosavvy.com/forum/viewtopic.php?t=7578これはデフォルトで設定の完全な概要を提供します。複数のリンクが機能していなくても、接続を確立するために必要な情報があります。
私が探しているコマンドは "end-close"だと思いますが、新しい設定を適用する前にこれをテストしませんでした。
答え1
ローカルネットワークでは、TCPの代わりにUDPを使用できます。待ち時間が改善され、接続の問題がなくなる可能性があります。クイック検索をすると、COM2UDPというプログラムが表示されます。