【问题标题】:Emulate serial port模拟串口
【发布时间】:2014-03-21 20:27:25
【问题描述】:

是否可以创建一个通过“虚拟”串行端口发送数据的“虚拟”串行设备?我需要开发一些代码来与 Arduino 交互,但我没有。可以使用 socat 或写入dev/ttyXXX 文件的一些代码来完成吗?

编辑:我正在运行 Arch Linux

【问题讨论】:

  • 什么平台? Linux、Windows、OSX 还是其他?
  • @Craig 忘了说,我正在运行 Linux

标签: c++ serial-port arduino socat


【解决方案1】:

可以,可以用socat模拟串口。

需要使用socat的PTY地址类型:

PTY: Generates a pseudo terminal (pty) and uses its master side. Another
process may open the pty's slave side using it like a serial line or
terminal.

最简单的选择是:

socat PTY,link=./virtual-tty,raw,echo=0 -

让您正在测试的应用程序打开virtual-tty。从你的输出 应用程序将打印到控制台。您输入的文本将发送到您的 应用。

如上所述,PTY 地址类型创建一个 peudo-terminallink 选项在伪终端和给定文件之间创建软链接。 您可以选择任何您想要的文件名。如果没有软链接,您将需要 打开设备,很难确定正确的设备。 raw 将伪终端置于原始模式。你通常想要这个,因为你不想要 任何特殊的终端处理选项。 echo=0 禁用回显模式。

如果您拥有(或创建)一个应用程序来模拟在 Arduino,您也可以通过 socat 连接它。如果你的模拟器 通过 stdin/stdout 进行通信,然后使用以下命令:

socat PTY,link=./virtual-tty,raw,echo=0 EXEC:simulator-command

上面将simulator-command的stdin/stdout连接到 伪终端。

如果您的模拟器也通过串行端口进行通信,则使用 PTY 命令两次:

socat PTY,link=./arduino-sim,raw,echo=0 PTY,link=./virtual-tty,raw,echo=0

打开你的模拟器arduino-sim

【讨论】:

  • 正是我想要的。但是有一个问题,使用单个 PTY,即您提到的第一个命令,我将如何将数据键入 virtual-tty?另外,我认为如果我的arduino-sim 使用boost::asio 进行串行通信就可以了吗?
  • virtual-tty 类似于模拟环境中的/dev/ttyUSB#。您将拥有正在开发的代码以与 Arduino 进行通信,打开 virtual-tty。那是串行连接的一侧。从您正在开发的代码发送的数据将显示在 stdout 上,您可以通过在 stdin 上键入来发送数据。只要您的主机应用程序和 Arduino 应用程序之间的通信是 ASCII,这将起作用。我对boost::asio不熟悉,但是由于socat创建的pty和serial driver创建的pty是一样的,所以应该没有任何问题。
  • 最后一个例子是当你想为连接的两端使用一个虚拟串口时。您不能两次打开同一个 PTY。它行不通。这样想,如果您通过一根空调制解调器电缆连接两台 Linux 计算机,您将在其中一个上打开 /dev/ttyS#,在另一个上打开 /dev/ttyS#。您打开两个端口。 socat同理; socat 类似于您的零调制解调器电缆。不同的是socat 非常灵活。我建议阅读 socat 手册页中的示例,了解可以使用它的有趣方式的示例。
  • 使用socat PTY,link=/dev/ttySIM0,raw,echo=0 PTY,link=/dev/ttySIM1,raw,echo=0,我可以看到正在创建的设备文件,但是我的程序(使用boost::asio)和PuTTY我没有看到我的模拟器程序的任何输出(它只是发送'47' 重复)。会不会和波特率有关? socat 的默认值是多少?
  • 默认波特率为38400,这里做个简单的测试。打开三个终端。将上面的命令合二为一。在另一个中运行cat /dev/ttySIM1。在第三个中键入echo hello > /dev/ttySIM0。你应该在第二个看到你好。刚刚测试过它并且它工作(Ubuntu 13.10)。唯一的区别是我删除了/dev/,所以我不必以root 身份运行。如果此测试有效,则将echo 替换为发送“47”的程序。希望您在终端上看到带有 cat 的“47”。如果需要,您可以在运行 cat 之前在命令行中使用stty -F /dev/ttySIM1 9600 调整波特率。
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2014-02-04
  • 2011-08-09
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多