web-dev-qa-db-ja.com

Arduinoがシェルスクリプトで接続されているシリアルポートを見つけるにはどうすればよいですか?

現在、bash Shellスクリプトを介してArduinoにデータを送信する小さなスクリプトを作成しています。データを送信するコマンドは次のようになります。

alias led_green="echo -e -n '\x10' > /dev/ttyACM1"

ご覧のとおり、/ dev/ttyACM1をプログラムにハードコーディングしています。 USBポートを変更すると値も変更され、スクリプトが機能しないため、これには問題があります。 arduinoがどのポートに接続されているかをプログラムで判断する方法があるので、arduinoが接続されている限りスクリプトは常に実行されるのではないかと思います。

2
watersnake

Aliasからfunctionに切り替えることをお勧めします。この関数は、ループを使用してデバイスファイルのリストを調べます。

他のデバイスがないと仮定すると、forループを使用して、どのデバイスが存在するかを判断できます。

$ for i in $(seq 0 99) ; do                                                    
>    [ -e "/dev/ttyACM$i"  ] && break                                            
> done

ループの終了後に$iの値をエコーすると、検出されたデバイスの値になります。

ただし、たとえば、/dev/ttyACM0および/dev/ttyACM1デバイスがあり、それらがdifferentボーレートで実行されている場合、それらをループしてstty -a -F /dev/ttyACM$i | grep $BAUD_RATEをテストできます。

両方のデバイスが同じボーレートで動作するなら、まあ。 。 。することはあまりありません-手動で行う必要があります。

1