我需要从Linux系统的串口获取数据并将其转换为TCP/IP协议发送到服务器。这个操作难吗?我有一些基本的编程经验,但对Linux不是很熟悉。是否有一个开源应用程序可以完成这个任务?
我需要从Linux系统的串口获取数据并将其转换为TCP/IP协议发送到服务器。这个操作难吗?我有一些基本的编程经验,但对Linux不是很熟悉。是否有一个开源应用程序可以完成这个任务?
大多数现代Linux发行版已经提供了您需要的所有工具。
正如一些人指出的那样,您可以通过netcat来传输串行数据。但是您需要每次连接都重新启动一个新实例。为了在连接之间保持持久性,您可以使用以下配置创建xinetd服务:
service testservice
{
port = 5900
socket_type = stream
protocol = tcp
wait = yes
user = root
server = /usr/bin/netcat
server_args = "-l 5900 < /dev/ttyS0"
}
请确保将/dev/ttyS0
更改为您尝试接口的串行设备。
使用netcat在服务器上打开一个端口并开始监听:
nc -lvp port number
nc <IP address> portnumber < /dev/ttyACM0
如果你想将数据存储在服务器上,你可以将数据重定向到文本文件。
首先创建一个文件来保存数据:
touch data.txt
然后开始保存数据
nc -lvp port number > data.txt
如果你的 Linux 机器正在运行 systemd(大多数都是这样),你可以创建一个漂亮的服务,将(USB)串行设备通过 TCP(telnet)转为可用。
安全警告:将串行设备通过TCP公开可能存在安全风险。
在本例中我使用了:
5900
/dev/ttyUSB0
(使用了两次)115200
Bps你可以在以下示例中编辑这些内容。查看stty和nc(netcat)的手册以获得更多选项。
下面所有的命令都假定你是用户root
。如果不是,请执行:sudo su -
目录/etc/systemd/system
应该已经存在。如果不存在,你的系统可能没有在运行Systemd。
创建文件/etc/systemd/system/tcp2serial.service
并填入以下内容:
[Unit]
Description=TCP to Serial
[Service]
TTYPath=/dev/ttyUSB0
ExecStartPre=/usr/bin/stty -F /dev/ttyUSB0 speed 115200
ExecStart=/usr/bin/nc -k -l 5900
StandardInput=tty
StandardOutput=tty
Restart=always
[Install]
WantedBy=default.target
当您创建文件后,可以执行systemctl start tcp2serial
命令来启动服务。
从同一网络中的另一台Linux计算机上,您可以使用telnet [server] 5900
连接到它。要退出telnet,请按Ctrl+],然后键入quit
Enter
当您编辑完服务文件后,请执行以下两个命令:
systemctl daemon-reload
systemctl restart tcp2serial
要让服务在开机时启动,请执行以下操作:
systemctl enable tcp2serial
我已经为这个问题苦苦挣扎了几天。
对我来说,问题源于VirtualBox/Ubuntu。我的机器上有很多USB串行端口。当我尝试将其中一个分配给虚拟机时,它破坏了所有的串行端口 - 即主机和其他虚拟机无法再使用它们的USB串行设备。
我的解决方案是在我衣橱里偶然找到的一台netbook上设置一个独立的串行服务器。
我尝试了ser2net,并成功地将串行端口放到了线上,但remtty没有起作用。我需要将端口作为虚拟机上的tty获取。
socat完美地解决了这个问题。
这里有详细的说明:
我认为你的问题不太清楚。这里有几个答案可以解决如何捕获Linux串口输入数据的问题,但也许你的问题正好相反?
如果你需要捕获从Linux串口输出的数据并将其发送到服务器,则有几个小型硬件设备可以实现此功能,从简单的串行打印服务器(例如Lantronix gizmo)开始。
不,我与Lantronix没有任何关系。