我有一个 Arduino 连接到我的 USB 端口(在我的基于 Linux 的操作系统上),/dev/ttyACM0
它正在侦听要读取的串行数据,并在收到时处理它们。我需要做的就是将数据发送到这个端口。我已minicom
通过以下命令使用该程序:
minicom --device=/dev/ttyACM0 --baudrate=9600
它工作完美。问题是 minicom
在交互式环境中运行,我希望编写一个以非交互方式发送信息的 shell 脚本,例如
minicom --device=/dev/ttyACM0 --baudrate=9600 "message"
据我了解,Unix 中的所有内容都是文件 - 甚至 USB 端口 - 所以我想知道是否可以将echo
字节直接简单地写入设备文件:
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
我不知道你是否得到了你的问题的答案,因为这个帖子已经存在一年多了。
但我想你可以通过使用脚本来摆脱你的脚本,除非 wich 是一种具有自己的 shell 的脚本语言,并且可以自动执行 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
第一行定义了expect命令路径,即#!/usr/bin/expect。在第二行代码中,我们禁用超时。
然后使用spawn命令启动我们的脚本。我们可以使用spawn来运行任何我们想要的程序或任何其他交互式脚本。
spawn 命令用于启动脚本或程序,例如 shell、FTP、Telnet、SSH、SCP 等。
其余行是与我们的 shell 脚本交互的 Expect 脚本。
最后一行是文件结尾,这意味着交互的结束。
现在您只需保存脚本并使文件可执行,就像任何其他 shell 脚本一样。
man expect
通过从 shell键入来描述用法;或者,以下页面详细解释了它:
https://www.geeksforgeeks.org/expect-command-in-linux-with-examples/
希望我能帮忙。