コマンドラインを使用してシリアルポートでデータを送受信するには?

コマンドラインを使用してシリアルポートでデータを送受信するには?

以前は、LinuxおよびWindows環境でシリアル通信にC ++とPythonを使用していました。 Linuxでは、シリアル通信のためにpicocom、minicom、Cutecomなどのプログラムも使用していましたが、今では外部プログラムをインストールせずに、単純なLinuxコマンドを使用してシリアルポートを読み書きしたいと思います。 Raspberry Piでこの方法を使用してArduinoボードと通信します。次の例では、sttyを使用してシリアルポートオプションを設定し、echoおよびcatコマンドを使用してシリアルポートからデータを送受信しますが、最終的に出力は表示されません。サイトにこれに関する投稿がありますが、私には何の効果もないようです。 Cutecomを使用してArduinoと通信できますが、次のコマンドを使用しても応答は表示されません。

Linux(Ubuntu):

$ stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
$ echo "1" > /dev/ttyUSB0 //send data
$ cat /dev/ttyUSB0

参考のためのArduino Megaコード:

#include <Arduino.h>

void setup() {
    Serial.begin(115200);
}

void loop() {

    if(Serial.available() > 0){
        Serial.println("[123,55,7777]");
    }
}

ここでは1を送信し、Arduinoから応答を受け取ります。 キュートカムの例

これは簡単なはずです。 Arduinoに1または任意の文字を送信すると、コマンドラインに[123,55,7777]を返す必要があります。どんな助けや指導にも感謝します。

以下は試したコードですが、データは返されませんでした。

stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb  #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0                     #REDIRECT SERIAL OUTPUT TO FD 3
  cat <&3 > /tmp/ttyDump.dat &          #REDIRECT SERIAL OUTPUT TO FILE
  PID=$!                                #SAVE PID TO KILL CAT
    echo -e -n "\x01" > /dev/ttyUSB0     #SEND COMMAND HEX 0x01 TO SERIAL PORT
    sleep 0.2s                          #WAIT FOR RESPONSE
  kill $PID                             #KILL CAT PROCESS
  wait $PID 2>/dev/null                 #SUPRESS "Terminated" output

exec 3<&-                               #FREE FD 3
cat /tmp/ttyDump.dat                    #DUMP CAPTURED DATA

ありがとう

ベストアンサー1

一般的な問題は、デバイスの電源が切れると一部のデフォルト設定にリセットされ、変更が失われることです。開いたファイル記述子を保持すると、このような状況を回避できます。

このようなもの(テストされていない)

#!/bin/bash
# Keep the ttyUSB0 device open on fd 3
exec 3<>/dev/ttyUSB0
stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
echo "1" >&3                 # send data
cat <&3                      # read the data

おすすめ記事