Windowsでは、次のコマンドを使用してシリアルポートデバイスと通信できます。
mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z
デバイスは要求された操作を開始します。
スタンドアローンのdebianボックスまたは同じWindowsマシンのdebian virtualboxインスタンスから同じ操作を実行しようとすると、これまでのところ運がありませんでした。
同等のLinuxコマンドを次に示します(少なくともそう思う)。
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo '\x12\x02' > /dev/ttyS0
何も起こりません。
誰かが正しい方向に私を導くことができますか?
echo '\x12\x02'
解釈されず、文字列\x12\x02
(および改行を追加)指定されたシリアルポートに。代わりに使用
echo -n ^R^B
次のように入力して、コマンドラインで作成できます CtrlVCtrlR そして CtrlVCtrlB。または、エディターを使用してスクリプトファイルに入力する方が簡単です。
別のプログラムが干渉しない限り、stty
コマンドは機能するはずです。よくある原因はgpsd
です。これは、接続されているGPSデバイスを探します。
16進コードを使用する場合は、-e
オプションを追加して、エコーによるバックスラッシュエスケープの解釈を有効にする必要があります(ただし、結果はecho
と同じです)CtrlRCtrlB)。また、wallykが言ったように、-n
を追加して、改行の出力を防ぐことができます。
echo -en '\x12\x02' > /dev/ttyS0
また、/dev/ttyS0
が目的のポートであることを確認してください。
スクリーン:
[〜#〜] note [〜#〜]:私の知る限り、画面は実際に16進数を送信できません。これを行うには、echo
またはprintf
を使用します
私はこの投稿の提案を使用してシリアルポートに書き込み、別の post からの情報を使用してポートから読み取り、結果が混在していました。 screenを使用すると、そのポートでターミナルセッションが直接開かれるため、「簡単な」ソリューションであることがわかりました。 (画面には非常に奇妙なインターフェイスIMOがあり、それを理解するためにさらに読む必要があるため、引用符で簡単に説明します。)
このコマンドを発行してスクリーンセッションを開くと、入力したものがポートに送信され、その下に戻り値が出力されます。
screen /dev/ttyS0 19200,cs8
(速度、パリティ、ストップビットなどのニーズに合うように上記を変更してください。)投稿が具体的に求めているように、画面は「Linuxコマンドライン」ではないことを理解していますが、それは同じ精神だと思います。さらに、毎回echoやquotesを入力する必要はありません。
ECHO:
プレトリアのドロイドの答えに従ってください。しかし、これはcatコマンド(cat < /dev/ttyS0
)whileechoコマンドを送信していました。
PRINTF:
Printfの '%x'コマンドも使用できることがわかりました。
c="\x"$(printf '%x' 0x12)
printf $c >> $SERIAL_COMM_PORT
繰り返しますが、printfの場合は、cat < /dev/ttyS0
コマンドを送信する前。