シリアルデバイスのデータを解釈できるbashスクリプトを作成しようとしています。私は生の方法でポートを設定し、/ dev / ttyUSB0に対して単純なcatを実行してデータを見ることができました。私の質問は、自由に操作できるようにデバイスからbash変数に転送された1行のデータを取得する方法です。
Pythonを使用する前に、bashで使用して常にすべてのLinuxシステムで実行されるスクリプトを持ちたいと思います。
私が受け取ったデータの形式は次のとおりです。 STX<26 x 4Bit-Nibbles coded as ASCII Payload>ETX
理想的には、新しいデータ文字列を取得するたびに、新しいペイロード(STXおよびETXなし)をBash変数に保存できます。
解決策
@icarusの答えの助けを借りて、私は魅力のように動作するものを作成しました。まず、STX 値で割り込みを発生するようにシリアルポートを設定します。
stty /dev/ttyUSB0 115200 内部 0x02
次に、必要な情報を取得するには、次のループを使用します。
ETX=$'\003'
-d "$ETX" 行を同時に読み込みます。 echo $line < /dev/ttyUSB0;
助けてくれてありがとう。このサイトの最初の経験は本当によかったです。乾杯
答え1
未検証!
#!/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
このような場合はこれを使用する必要があります。