C++ 模拟串口

C++ 模拟串口,c++,serial-port,arduino,socat,C++,Serial Port,Arduino,Socat,是否可以创建通过“虚拟”串行端口发送数据的“虚拟”串行设备?我需要开发一些代码来与Arduino交互,但我没有。可以使用socat或写入dev/ttyXXX文件的一些代码来完成吗 编辑:我正在运行Arch Linux是的,您可以使用socat模拟串行端口 您需要使用socat的PTY地址类型: PTY: Generates a pseudo terminal (pty) and uses its master side. Another process may open the pty's sl

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


编辑:我正在运行Arch Linux

是的,您可以使用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 -
让您正在测试的应用程序打开
virtualtty
。从您的 应用程序将打印到控制台。您键入的文本将发送到您的 应用程序

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

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

socat PTY,link=./virtual-tty,raw,echo=0 EXEC:simulator-command
上面将
模拟器命令的stdin/stdout连接到
伪终端

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

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

让您的模拟器在什么平台上打开?“Linux,Windows,OSX,其他?”克雷格忘了提到,我正在运行Linux,这正是我想要的。不过,有一个问题是,使用您提到的第一个命令PTY,我如何将数据输入到
虚拟tty
?另一方面,如果我的
arduino sim
使用
boost::asio
进行串行通信,我认为这是可以的?
虚拟tty
类似于模拟环境中的
/dev/ttyUSB
。您可以使用正在开发的代码与Arduino open
虚拟tty进行通信。这是串行连接的一侧。从您正在开发的代码发送的数据将显示在标准输出上,您可以通过键入标准输入来发送数据。只要您的主机应用程序和Arduino应用程序之间的通信是ASCII,这就可以工作。我不熟悉
boost::asio
,但由于socat创建的pty是一个真正的pty,与串行驱动程序创建的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用户身份运行。如果此测试有效,则用发送“47”的程序替换回波。希望你能在终端上看到“47”和cat。如果需要,您可以在运行cat之前,使用stty-F/dev/ttySIM1 9600在命令行中调整波特率。