模拟串口

joa*_*dre 6 c++ serial-port arduino socat

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

编辑:我正在运行Arch Linux

eso*_*ton 6

是的,您可以使用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.
Run Code Online (Sandbox Code Playgroud)

最简单的选择是:

socat PTY,link=./virtual-tty,raw,echo=0 -
Run Code Online (Sandbox Code Playgroud)

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

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

如果您拥有(或创建)模拟Arduino上执行代码的应用程序,您也可以通过socat连接它.如果您的模拟器通过stdin/stdout通信,则使用以下命令:

socat PTY,link=./virtual-tty,raw,echo=0 EXEC:simulator-command
Run Code Online (Sandbox Code Playgroud)

以上将stdin/stdout连接simulator-command到伪终端.

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

socat PTY,link=./arduino-sim,raw,echo=0 PTY,link=./virtual-tty,raw,echo=0
Run Code Online (Sandbox Code Playgroud)

让你的模拟器打开arduino-sim.

  • 默认波特率为 38400。这里是一个简单的测试。打开三个终端。将上面的命令合二为一。在另一个中运行`cat /dev/ttySIM1`。在第三个中输入“echo hello > /dev/ttySIM0”。您应该在第二个中看到 hello。刚刚测试了这个并且它有效(Ubuntu 13.10)。唯一的区别是我删除了 `/dev/` 这样我就不必以 root 身份运行了。如果此测试有效,则将“echo”替换为发送“47”的程序。希望您在带有 cat 的终端上看到“47”。如果需要,您可以在运行 cat 之前使用 `stty -F /dev/ttySIM1 9600` 在命令行中调整波特率。 (2认同)