シリアルデバイスからのデータを解釈できるbashスクリプトを作成しようとしています。ポートをrawで構成すると、/ dev/ttyUSB0の単純なcatを実行してデータを確認できます。私の問題は、デバイスがbash変数で送信する1行のデータを取得して、自由に操作できるようにする方法です。
Pythonに進む前に、bashに入れておきたいので、すべてのLinuxマシンで動作することがわかっているスクリプトを常に持っています。
私が受け取るデータの形式は次のとおりです。STX<26x4ビット-ニブルはASCIIペイロード> ETXとしてコード化されています
理想的には、新しいデータ文字列を取得するたびに、新しいペイロードを(STXとETXなしで)Bash変数に格納するだけで済みます。
@icarusの回答の助けを借りて、私は魅力のように機能するものを作り上げました。まず、STX値で割り込みを生成するようにシリアルポートを構成します。
stty/dev/ttyUSB0 115200 intr 0x02
次に、必要な情報を取得するために、次のループを使用します。
ETX = $ '\ 003'
-d "$ ETX"行の読み取り中。 $ lineをエコーします。完了</ dev/ttyUSB0
助けてくれてありがとう、このウェブサイトで本当に素晴らしい最初の経験。乾杯
テストされていません!
#!/bin/bash
ETX=$'\003'
STX=$'\002'
# Open /dev/ttyUSB0 open on FD9
exec 9< /dev/ttyUSB0
# do any stty stuff needed on fd9
# e.g.
# stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
# now loop, reading from the device,
while IFS= read -rd "$ERX" -u 9 wibble
do
wibble=${wibble#"$STX"}
printf 'Got %q\n' "$wibble"
# Do something
done
bash
を使用すると、データにNULバイトが含まれている場合は機能しません。その場合は、代わりにzsh
を使用する必要があります。