解決策

解決策

シリアルデバイスのデータを解釈できる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このような場合はこれを使用する必要があります。

関連情報