以前は、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]");
}
}
これは簡単なはずです。 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