私のUSBポート(LinuxベースのOS)にArduinoが接続されており、/dev/ttyACM0
読み取るシリアルデータを受信して受信したとおりに処理しています。私がしなければならないのは、このポートにデータを送信することだけです。minicom
このプログラムを次のコマンドで使用しました。
minicom --device=/dev/ttyACM0 --baudrate=9600
完璧に動作します。問題は minicom
対話型環境で実行されています。非対話型で情報を送信するシェルスクリプトを作成したいと思います。
minicom --device=/dev/ttyACM0 --baudrate=9600 "message"
echo
私が理解したところによると、Unixのすべてはファイルです。 USBポートも同様です。それで、デバイスファイルに直接バイトを書き込むことができるかどうか疑問に思います。
echo "message" >/dev/ttyACM0
しかし、これは動作しない。私はこれがボーレートの不一致に関連している可能性があることを知っています。次のコマンドを実行しました。
$ stty -F /dev/ttyACM0
speed 9600 baud; line = 0;
min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
ところで、伝送速度は9600です。上記のコマンドで機能させる方法はありますか?
ベストアンサー1
このスレッドは1年以上経過したため、あなたの質問に答えたのかわかりません。
しかし、独自のシェルがあり、ttyとユーザー間のやり取りを自動化できるスクリプト言語でない限り、スクリプトを使用する必要はありません。
#!/usr/bin/expect -f
set timeout -1
spawn ./que.sh
expect "Enter your name\r"
send -- "I am Nikhil\r"
expect "Enter your age\r"
send -- "24\r"
expect "Enter your salary\r"
send -- "100k\r"
expect eof
最初の行は、予想されるコマンドパス(#!/usr/bin/expect)を定義します。コードの2行目はタイムアウトを無効にします。
次に generate コマンドを使用してスクリプトを起動します。スポーンを使用して、目的のプログラムや他の対話型スクリプトを実行できます。
スポーンコマンドは、シェル、FTP、Telnet、SSH、SCPなどのスクリプトまたはプログラムを起動するために使用されます。
残りの行は、シェルスクリプトと対話するExpectスクリプトです。
最後の行はファイルの終わりで、対話の終わりを意味します。
これでスクリプトを保存し、他のシェルスクリプトのようにファイルを実行可能にします。
man expect
使用方法はシェルで入力して説明し、次のページで詳しく説明します。
https://www.geeksforgeeks.org/expect-command-in-linux-with-examples/
私が助けることができることを願っています。