从终端向 USB 端口发送串行数据?

从终端向 USB 端口发送串行数据?

我有一个 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/

希望我能帮忙。

相关内容