USBインターフェイスを備えたSTM32F4マイクロコントローラがあり、それをRaspberry Piに接続します。接続するとマークされます/dev/ttyACM0
。毎秒デバイスごとにいくつかの文字を送信しています。
ウィンドウでは、パテを使用すると、すべてがうまく動作します。キャラよく受けました。
Raspberry Piで次のコマンドを実行すると:
>> sudo tail -f /dev/ttyACM0
画面には何も表示されません。私のデバッガでは、デバイスが「停止」せずに正しく送信されているようです。
コマンドが実行されないと、tail
デバイス(簡単なプログラムを含む)が停止し、監視タイマーがタイムアウトします。
パテがリストにない場合、Windowsで同じ症状が発生するため、この動作は正常なようです。
送信した文字をどのように表示しますか?
これは権利問題ですか?別のプログラムを使用する必要がありますか?フォーラムでいくつかの提案を試してみました。99-com.rules, set all rights to
/dev/ttyACM0`でルールを変更しましたが、運がありませんでした。
答え1
PuTTYは端末エミュレータなので、一度に1文字を処理するように設計されています。
一方tail
、コマンドの設計によって、またはTTYドライバが出力をバッファリングするため(デフォルト設定が上書きされない限り)、デフォルトでは文字列全体が必要になることがあります。
minicom
操作cu
が適切ではないと判断された場合は、stty -a -F /dev/ttyACM0
ポートの使用中にTTYデバイス設定リストを使用してから、コマンドを使用してその設定stty
を再現してから使用できますtail -f
。このユースケースで必要とされないすべてのTTYデバイスの基本機能を無効にするには、次のものが必要になる場合があります。
stty -F /dev/ttyACM0 -crtscts ignbrk -icrnl -onlcr -ixon -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
注:stty
オプション構文は廃止されました。各オプションキーワードの前にあるマイナス記号は障害を負う対応するTTYデバイスオプション。マイナス記号なしでキーワードを使用すると有効になります。
tail
使用しているコマンドのバージョン(おそらくGNUパッケージだけでなくRasPiで実行されているディストリビューションcoreutils
でも可能です)が完全にライン指向で変更できないことが判明した場合、それはまだ適切ではありません。busybox
時には、マイクロコントローラが送信した文字にUnixスタイルの改行文字が含まれていない限り、作業のために。 (マイクロコントローラがLFの代わりにCRを送信している場合は、icrnl
そのオプションを有効にするとTTYドライバが問題を解決する可能性があります。)
答え2
#!/bin/bash
cat < /dev/ttyACM0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"}\
/GPGGA/ { print "ID: ", $1, "Time: ", $2, "Lat: ", $3, "Lon: ", $5, "Höhe: ", $10}' > data
このスクリプトはラズベリーパイ用です。データは「data」ファイルに保存されます。